如何更改日期字符串的时区?

时间:2015-08-24 06:00:33

标签: php datetime timezone timestamp

我想改变时间的时区,如:

2015-08-24 01:30:40

所以它在America/Los_Angeles时区,但下面的代码没有按预期工作:

$timedate = date_timezone_set(
              date_create_from_format('Y-m-d h:i:s A', $row[timezone]),
              new DateTimeZone('America/Los Angeles')
            );

$row[timezone]已成功返回2015-08-24 01:30:40,但当我这样做以尝试更改时区时,它无法正常工作。

之后的所有PHP代码都不会运行。我已经做了很多搜索,但我无法弄清楚如何让它正常工作所以有人能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:3)

您对date_create_from_format的调用在格式字符串的末尾包含一个A - 看起来似乎对我有好感,因为您的值不会以am或pm结尾。您对h的使用看起来也不太正确,因为这样做的时间为12小时,当您没有使用时,这不是很有用pm指标。我怀疑你想要一种格式

Y-m-d H:i:s

这似乎更符合你的样本字符串...

此外,如评论中所述,您的时区ID应为'America/Los_Angeles'而不是'America/Los Angeles'

我还会将您在这一大段代码中进行的各种调用分开,以便更容易诊断 - 这样您可以告诉它解析失败,而不是任何事情。与时区有关。这里有三个独立的操作:

  • 将字符串解析为日期时间
  • 创建时区对象
  • 在日期时间设置时区

将这三个保存在单独的语句中将使代码更易于阅读和维护。 (特别是,您能够独立地找到并纠正这两个问题......)