繁体   English   中英

如何在PHP中正确地将时间戳转换为ISO 8601?

[英]How to properly covert timestamp to ISO 8601 in PHP?

我从http://www.unixtimestamp.com/index.php获取时间戳

因此,对于2016/1/1 @ 1:1:1 ,时间戳应为1451610061 ,相当于ISO 8601 2016-01-01T01:01:01+00:00 (来自站点),但是当我运行代码时下面我会得到2016-01-01T02:01:01+01:00的输出。 我想念什么吗?

$ts = 1451610061;
echo date('c', $ts);

从“ +00:00”与“ +01:00”可以看出,这显然是一个时区问题。

您还可以通过在date_default_timezone_set之前设置默认时区来验证这date_default_timezone_set

date_default_timezone_set("UTC");

2016-01-01T01:01:01 + 00:00

参见eval.in-UTC

date_default_timezone_set("Europe/Berlin");

2016-01-01T02:01:01 + 01:00

参见eval.in-柏林


您还可以使用date_default_timezone_get查找有关本地时区的date_default_timezone_get

echo date_default_timezone_get();

eval.in-当地时区

世界标准时间

这也解释了为什么http://eval.in显示预期的输出。


当然,您可以在DateTime对象上单独设置时区

$ts = 1451610061;
$dt = new DateTime("@$ts");

$utc = new DateTimeZone("UTC");
$dt->setTimezone($utc);
echo "UTC=", $dt->format('c'), "\n";

$berlin = new DateTimeZone("Europe/Berlin");
$dt->setTimezone($berlin);
echo "Berlin=", $dt->format('c'), "\n";

这将显示

UTC = 2016-01-01T01:01:01 + 00:00
柏林= 2016-01-01T02:01:01 + 01:00

eval.in-setTimezone


最后回答您的问题:您的代码没有错。 根据ISO 8601-Wikipedia, 2016-01-01T02:01:01+01:00是此时间戳的完美有效表示形式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM