php:按 UTC 偏移量设置时区
使用javascript,我知道我的用户时区是UTC +3。
现在我想用这个知识创建DateTime对象:
$usersNow = new DateTime('now', new DateTimeZone("+3"));
我收到作为responses:
'Unknown or bad timezone (+2)'
我做错了什么?我该如何修复?
使用javascript,我知道我的用户时区是UTC +3。
现在我想用这个知识创建DateTime对象:
$usersNow = new DateTime('now', new DateTimeZone("+3"));
我收到作为responses:
'Unknown or bad timezone (+2)'
我做错了什么?我该如何修复?
怎么样...
$original = new DateTime("now", new DateTimeZone('UTC'));
$timezoneName = timezone_name_from_abbr("", 3*3600, false);
$modified = $original->setTimezone(new DateTimezone($timezoneName));
你说:
使用javascript,我知道我的用户时区是UTC +3。
您可能运行了类似如下的内容:
var offset = new Date().getTimezoneOffset();
这将返回 UTC 的当前偏移量(以分钟为单位),正值位于 UTC 以西。它不会返回时区!
时区不是偏移量。时区具有偏移量。它可以有多个不同的偏移量。通常有两个偏移量,一个用于标准时间,另一个用于夏令时。单个数值不能单独表示这一点。
"America/New_York"
UTC-5
UTC-4
除了两个偏移量之外,在该时区中还包含了在两个偏移量之间转换的日期和时间,以便您知道它们何时适用。还有一个关于偏移和过渡如何随时间变化的历史记录。
另请参阅时区标签 wiki 中的“时区 != 偏移量”。
在您的示例案例中,您可能从 javascript 收到一个值,表示 UTC+3 的当前偏移量。但这只是该特定时间点的偏移量!如果您遵循minaz的答案,您将获得一个时区,该时区假设UTC + 3始终是正确的偏移量。如果实时时区是像“非洲/内罗毕”
这样的东西,那么除了UTC + 3之外,它从未使用过任何东西,这将起作用。但据您所知,您的用户可能在“欧洲/伊斯坦布尔”
,夏季使用UTC + 3,冬季使用UTC + 2。-180