我正在使用AWS PHP SDK,而亚马逊的API正在返回以下时间戳。
2013-04-23T13:18:00Z
他们给我的时间戳似乎已经在我的时区。由于它没有指定它是哪个时区,我猜它被认为是我当地的时间。 ISO 8601的维基站点也声明......
如果没有给出时间表示的UTC关系信息,则假定时间是当地时间。
但是当我尝试在像this这样的PHP中使用它时,它会将其转换为我当地的时区。 PHP的strtotime页面说明了......
除非在该参数中指定了时区,否则此函数的每个参数都使用默认时区。
我的问题是,为什么strtotime将其转换为我的时区,如果它已经在我的时区?
答案 0 :(得分:2)
亚马逊返回日期末尾的“Z”表示它是UTC。您需要转换时区以使其本地化。您可以通过执行以下操作来执行此操作:
<?php
$date = new DateTime('2013-04-23T13:18:00Z'); // Z = UTC
echo $date->format('H') . PHP_EOL;
//> 13
$date->setTimezone(new DateTimeZone('America/Los_Angeles')); // -0700
echo $date->format('H') . PHP_EOL;
//> 06
更新:阅读完整解决方案的所有评论。