【发布时间】:2014-07-08 12:29:34
【问题描述】:
我目前正在为 php 应用程序使用时区。
我发现 strtotime 似乎没有连贯的行为。 这个例子突出了我在说什么:
var_dump("strtotime('now'), UTC, Europe/Paris and America/New_York");
date_default_timezone_set('UTC');
var_dump(strtotime('now'));
date_default_timezone_set('Europe/Paris');
var_dump(strtotime('now'));
date_default_timezone_set('America/New_York');
var_dump(strtotime('now'));
var_dump("strtotime('now UTC'), UTC, Europe/Paris and America/New_York");
date_default_timezone_set('UTC');
var_dump(strtotime('now UTC'));
date_default_timezone_set('Europe/Paris');
var_dump(strtotime('now UTC'));
date_default_timezone_set('America/New_York');
var_dump(strtotime('now UTC'));
var_dump("strtotime('today'), UTC, Europe/Paris and America/New_York");
date_default_timezone_set('UTC');
var_dump(strtotime('today'));
date_default_timezone_set('Europe/Paris');
var_dump(strtotime('today'));
date_default_timezone_set('America/New_York');
var_dump(strtotime('today'));
var_dump("strtotime('today UTC'), UTC, Europe/Paris and America/New_York");
date_default_timezone_set('UTC');
var_dump(strtotime('today UTC'));
date_default_timezone_set('Europe/Paris');
var_dump(strtotime('today UTC'));
date_default_timezone_set('America/New_York');
var_dump(strtotime('today UTC'));
结果:
string 'strtotime('now'), UTC, Europe/Paris and America/New_York'
int 1404821878
int 1404821878
int 1404821878
string 'strtotime('now UTC'), UTC, Europe/Paris and America/New_York'
int 1404821878
int 1404829078
int 1404807478
string 'strtotime('today'), UTC, Europe/Paris and America/New_York'
int 1404777600
int 1404770400
int 1404792000
string 'strtotime('today UTC'), UTC, Europe/Paris and America/New_York'
int 1404777600
int 1404777600
int 1404777600
strtotime('foo UTC') 应始终返回 UTC 时间戳,无论 date_default_timezone_get() 返回什么。
它适用于strotime('today UTC'),在此示例中总是返回1404777600。
此外,strtotime('today') 根据设置的时区,按预期返回不同的时间戳。
但在调用strtotime('now UTC')时却有相反的行为,返回时区设置的不同时间戳函数,调用strtotime('now')时总是返回1404821878。
这是一个错误还是我误解了什么?
提前致谢
【问题讨论】: