PHP '0:00 GMT' 的 strtotime 时区问题
PHP strtotime timezone issue with '0:00 GMT'
所以我有一个函数 get_start_of_day($time)
,我想给我一个时间戳,表示时间戳 $time
落下的那一天的第一分钟。
原来我用的是:
function get_start_of_day($time) {
return strtotime('0:00 GMT', $time);
}
这似乎工作得很好。
然后我意识到在某些时候它返回前一天的午夜,例如:
$x = 1432468800;
echo gmdate('Y-M-d H:i:s', $x);
$y = get_start_of_day($x);
echo gmdate('Y-M-d H:i:s', $y);
输出:
2015-May-24 12:00:00
2015-May-24 00:00:00
但是:
$x = 1432432800;
echo gmdate('Y-M-d H:i:s', $x);
$y = get_start_of_day($x);
echo gmdate('Y-M-d H:i:s', $y);
输出:
2015-May-24 02:00:00
2015-May-23 00:00:00
所以在 $x 的某个值下,输出错误地跳到前一天并输出它。一些进一步的实验表明,发生跳跃的 $x 的值是凌晨 4 点,即时间戳 1432440000
给出了正确的结果,但时间戳 1432439999
没有。
现在,根据 Epoch Converter,我现在是 GMT-4:00。似乎这一定是原因。我已将函数更新为:
function get_start_of_day($time) {
$start_of_day = strtotime('tomorrow 0:00 GMT', $time);
if ($start_of_day > $time) {
$start_of_day -= 86400;
}
return $start_of_day;
}
这似乎工作正常,但我忍不住想知道...这是怎么回事?有人知道吗?
提前致谢! :)
编辑:我正在使用格林威治标准时间以防万一我搬到新服务器......我不想在我假设移动后获得不同的开始日值,这可能与旧值不同步.所以我想,所有时间都使用 GMT。
使用strtotime('today', $time)
。您将需要使用 date_default_timezone_set
or date.timezone INI 设置为 select 您的时区。
所以我有一个函数 get_start_of_day($time)
,我想给我一个时间戳,表示时间戳 $time
落下的那一天的第一分钟。
原来我用的是:
function get_start_of_day($time) {
return strtotime('0:00 GMT', $time);
}
这似乎工作得很好。
然后我意识到在某些时候它返回前一天的午夜,例如:
$x = 1432468800;
echo gmdate('Y-M-d H:i:s', $x);
$y = get_start_of_day($x);
echo gmdate('Y-M-d H:i:s', $y);
输出:
2015-May-24 12:00:00
2015-May-24 00:00:00
但是:
$x = 1432432800;
echo gmdate('Y-M-d H:i:s', $x);
$y = get_start_of_day($x);
echo gmdate('Y-M-d H:i:s', $y);
输出:
2015-May-24 02:00:00
2015-May-23 00:00:00
所以在 $x 的某个值下,输出错误地跳到前一天并输出它。一些进一步的实验表明,发生跳跃的 $x 的值是凌晨 4 点,即时间戳 1432440000
给出了正确的结果,但时间戳 1432439999
没有。
现在,根据 Epoch Converter,我现在是 GMT-4:00。似乎这一定是原因。我已将函数更新为:
function get_start_of_day($time) {
$start_of_day = strtotime('tomorrow 0:00 GMT', $time);
if ($start_of_day > $time) {
$start_of_day -= 86400;
}
return $start_of_day;
}
这似乎工作正常,但我忍不住想知道...这是怎么回事?有人知道吗?
提前致谢! :)
编辑:我正在使用格林威治标准时间以防万一我搬到新服务器......我不想在我假设移动后获得不同的开始日值,这可能与旧值不同步.所以我想,所有时间都使用 GMT。
使用strtotime('today', $time)
。您将需要使用 date_default_timezone_set
or date.timezone INI 设置为 select 您的时区。