strtotime()正在添加额外的一天



有人能告诉我为什么strtotime()似乎增加了1天吗?这似乎只发生在下午晚些时候(大约晚上7点或8点),否则它就说是正确的一天。

echo date('m/d/Y h:i:s a', time());

输出:

2015年12月21日08:34:43下午

echo gmdate('l, F jS, Y', strtotime(date('m/d/Y h:i:s a', time())));

输出:

2015年12月22日,星期二

我想要上面的输出,但是,我想要今天的日期(21日而不是22日)。

使用date而不是gmdate

您使用的是以UTC为单位的gmdate()。这个问题只发生在下午/晚上的晚些时候,因为在这些时候实际上是UTC时间的第二天

你也做了太多的工作——你可以将这行代码简化为:

// echo gmdate('l, F jS, Y', strtotime(date('m/d/Y h:i:s a', time())));
echo date('l, F jS, Y');

否则,您已经根据当前时间戳从时间字符串创建了时间戳。您可以将第二个迄今为止的参数留空,并假定当前时间为"现在"。

同样重要的是要确保您在某个地方调用date_default_timezone_set,或者在php.ini中配置了它。

代码中的这个细节。。。

echo gmdate('l, F jS, Y', strtotime(date('m/d/Y h:i:s a', time())));

(="gmdate")将始终返回格林尼治标准时间(GMT),即伦敦/英国。

所以将其更改为date(....

无论如何添加date_default_timezone_set('America/New_York');。。。

决定最终使用:

$date = new DateTime(date('Y-m-d'), new DateTimeZone('America/New_York'));
$timestamp = $date->format('U');
$date = gmdate('l, F jS, Y', $timestamp);

根据亚历山大的评论。

最新更新