如何更改日期字符串的时区?
How can I change the timezone of a date string?
我想更改时间的时区,例如:
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]
成功 returns 2015-08-24 01:30:40
它自己,但是当我这样做以尝试更改时区时,它不起作用。
之后的所有 PHP 代码都没有 运行。我做了很多搜索,但我不知道如何让它正常工作所以有人可以告诉我我做错了什么吗?
您对 date_create_from_format 的调用在格式字符串的末尾包含一个 A - 这对我来说似乎似是而非,因为您的值不以 am 或 pm 结尾。您对 h
的使用看起来也不太可能是正确的,因为那是一天中的 12 小时,当您没有 am/pm 指标时,这没有用。我怀疑你想要
的格式
Y-m-d H:i:s
这似乎更符合您的示例字符串...
此外,如评论中所述,您的时区 ID 应为 'America/Los_Angeles'
而不是 'America/Los Angeles'
。
我还会将您在这一大行代码中的各种调用分开,以便更容易诊断 - 这样您就可以判断是解析失败了,而不是与时区有关.您在这里有三个独立的操作:
- 将字符串解析为日期时间
- 创建时区对象
- 在日期时间设置时区
将这三个放在单独的语句中将使代码更易于阅读和维护。 (特别是,您将能够独立地找到并纠正这两个问题...)
我想更改时间的时区,例如:
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]
成功 returns 2015-08-24 01:30:40
它自己,但是当我这样做以尝试更改时区时,它不起作用。
之后的所有 PHP 代码都没有 运行。我做了很多搜索,但我不知道如何让它正常工作所以有人可以告诉我我做错了什么吗?
您对 date_create_from_format 的调用在格式字符串的末尾包含一个 A - 这对我来说似乎似是而非,因为您的值不以 am 或 pm 结尾。您对 h
的使用看起来也不太可能是正确的,因为那是一天中的 12 小时,当您没有 am/pm 指标时,这没有用。我怀疑你想要
Y-m-d H:i:s
这似乎更符合您的示例字符串...
此外,如评论中所述,您的时区 ID 应为 'America/Los_Angeles'
而不是 'America/Los Angeles'
。
我还会将您在这一大行代码中的各种调用分开,以便更容易诊断 - 这样您就可以判断是解析失败了,而不是与时区有关.您在这里有三个独立的操作:
- 将字符串解析为日期时间
- 创建时区对象
- 在日期时间设置时区
将这三个放在单独的语句中将使代码更易于阅读和维护。 (特别是,您将能够独立地找到并纠正这两个问题...)