【问题标题】:Formatting date in PHP/MySQL query在 PHP/MySQL 查询中格式化日期
【发布时间】:2013-08-14 18:34:24
【问题描述】:

我有一个使用 MySQL 和 PDO 的 PHP/JSON 脚本,现在数据运行良好。 代码:

 <?php
header('Content-type: application/json; charset=utf-8');
header("access-control-allow-origin: *");

$dsn = "mysql:host=localhost;dbname=myradio";
$username=test;
$password=test;
$pdo = new PDO($dsn, $username, $password);
$rows = array();
    $stmt = $pdo->prepare("SELECT *, DATE_FORMAT(start, '%d%M') FROM mystation");
    $stmt->execute();
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo '{"success":true,"error":"","data":{"schedule":';
echo json_encode($rows);
echo "]}}";
?>

如何使用 DATE_FORMAT 让我的字段开始和结束(都存储为 DATETIME)显示如下: 16/08/2013 00:00:00

等等?

正在正确显示数据,但我不太确定如何让 DATE_FORMAT 正常工作。

【问题讨论】:

  • “它正在正确显示数据”是什么意思?
  • 您遇到了什么问题?你见过这个参考吗? w3schools.com/sql/func_date_format.asp
  • DATE_FORMAT(start, '%d/%m/%Y 00:00:00') 帮你解决了吗?
  • 我试图让该字段中的所有数据开始显示,如 16/08/2013 00:00:00

标签: php mysql json


【解决方案1】:

在您的查询中将正确的格式字符串传递给DATE_FORMAT

SELECT 
    *, 
    DATE_FORMAT(start, '%d/%m/%Y %H:%i:%s') AS the_date 
FROM mystation

然后,当您遍历行时,格式化日期将在 the_date 列中可用。

以下由 Marty McVry 建议的格式化字符串也适用:

DATE_FORMAT(start, '%d/%m/%Y %T')

参考:DATE_FORMAT on MySQL manual entry

【讨论】:

  • 附带说明,您也可以使用%T 代替%H:%i:%s
  • 谢谢,也将其添加到答案中。
  • 如果我的回答有误,我想知道,@downvoter
  • +1 用于参考 MySQL 文档,以及返回指定格式字符串的示例。但最好展示一个如何为结果集中的该列分配别名的示例。 AS start_dmyt
  • 谢谢@spencer7593,补充说。
【解决方案2】:

除了下面的解决方案之外, 是正确的:在处理数据时 - 在您使用 REST-API 或其他方式传递日期的情况下 - 您通常不想应用格式化。您应该尽可能将数据返回为 RAW,以允许最终处理应用程序根据需要格式化数据。

使用通用格式 '2013-08-14 20:45:00 GMT+2'('Year-Month-Day Hour:minute:second timezone')以便每个客户能够以适当的方式重构检索到的数据。

数据应该在呈现给用户的时刻被转换 - 不早于一秒。

(对原始数据格式的日期可以进行&lt;&gt;equals比较或排序操作,不会出错。)

【讨论】:

  • 我不太确定这种方法是否真的能将人们与“做错事”隔离开来。处理 DATE 和 DATETIME 列可能很复杂,您描述的方法肯定有好处。但是您确定这是处理数据的唯一合适方法吗?或许您应该向 MySQL 建议不推荐使用 DATE_FORMAT 函数,以帮助防止人们做错事。
  • 我试图让该字段中的所有行开始具有像 16/08/2013 00:00:00 这样的格式
  • @spencer7593 这样做会使不同应用程序之间的交互更加容易。不,如果您要立即显示数据,那么在查询中对其进行格式化是没有问题的。但是在将数据填充到外部应用程序时,与国家/时区相关的格式总是不好的。每个参加过国际项目(不同的时区、不同的小数分隔符、不同的字符串中的特殊字符)的人都会知道我的意思。既然 - 恕我直言 - 在非常本地化的应用程序中处理原始格式的数据并不痛苦 - 为什么不这样做呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多