【问题标题】:Displaying actual time using iso 8601使用 iso 8601 显示实际时间
【发布时间】:2016-03-20 23:17:33
【问题描述】:

我指的是这个:Converting ISO 8601 format to d M Y in PHP

我也试过这个:echo date("d M Y H:i:s", strtotime($time));

但是时间没有显示为保存在数据库中。它显示几个小时的差异。

数据库有:2016-03-20T23:30:51+00:00

通过上面的 php echo 我得到:2016 年 3 月 21 日 00:30:51 2016 年 3 月 20 日 23:30:51

上面的例子显示了额外的 1 小时? 我尝试使用这种格式来显示小时和分钟,但显示的时间是错误的。时间显示有几个小时的差异。为什么会这样?

【问题讨论】:

  • 你能显示数据库中的原始字符串吗?
  • 看起来 strtotime 和 date 以某种方式使用不同的时区。我们可以看一个$time变量内容的例子吗?
  • 问题中更新了详细信息。是的,时区不同。
  • @fusion3k 数据库有:2016-03-20T23:30:51+00:00 上面的 php echo 我得到:2016 年 3 月 21 日 00:30:51 必须是 2016 年 3 月 20 日 23:30:51
  • 日期为格林威治标准时间。因此,如果 GMT 和您的时区之间的差异是 5 小时,那么您的结果仍然是正确的。

标签: php timestamp iso8601


【解决方案1】:

您的日期格式 2016-03-20T23:30:51+00:00 显示 GMT DateTime(旁注:与 php/unix 时间戳使用的 TimeZone 相同)。

所以当你写的时候:

echo date( "d M Y H:i:s", strtotime( $time ) );

您获得了在您的系统时区中转换的正确日期。

您可以使用DateTime 类对日期执行更多操作:

$date = new DateTime( $time );
echo $date->format("d M Y H:i:s");

将以原始 (GMT) 格式打印日期。

$date->setTimezone( new DateTimeZone('Europe/Berlin') );
echo $date->format("d M Y H:i:s");

将以“欧洲/柏林”时区打印日期。


附注:以 ISO 8601 UTC/GMT 保存日期实际上是最佳选择。


【讨论】:

  • 本地服务器中的时区是:UTC+05:30(印度)数据库值是(GMT-3)(智利)如果数据库中智利的值是2016-03-20T23:30:51+00:00,那么在印度它将是2016-03-21T05:00:51 附近还没有正常返回!
  • +00:00 mean UTC/GMT 基于我上面的例子,创建$date = new DateTime( $time ); 然后echo $date->getTimezone->getName(); 来查看它。日期为 UTC/GMT 格式 100% 见here
  • 我的数据在$row_MultipleLOPStatus["TimeUpdated"] 上,你能帮我提供完整的代码吗? @fusion3k 抱歉,存储的时间是格林威治标准时间。 - 都柏林时间
  • 如果你想要本地时区系统中的日期,你已经有了它,因为 php date 函数在本地 default_timezone 中打印日期。如果您从未设置此变量,您可以在脚本顶部放置date_default_timezone_set ( string 'Ireland/Dublin' ) 或修改您的php.ini 文件中带有date.timezone 的行。否则使用我上面的示例:只需将 $time 替换为您的 GMT 时间字符串/变量。
  • 都柏林(爱尔兰)Sunday, 20 March 2016, 23:30:00班加罗尔(印度 - 卡纳塔克邦)Monday, 21 March 2016, 05:00:00 但正在显示:21 Mar 2016 00:30:51
【解决方案2】:

您的系统使用其本地时区而不是 UTC,而数据库使用 UTC。如果您希望以 UTC 显示,您可以在调用 strtotime 和 date 之前使用http://php.net/manual/en/function.date-default-timezone-set.php 将时区设置为 UTC。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2011-01-10
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 2010-10-23
    相关资源
    最近更新 更多