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

时间:2015-12-22 01:36:08

标签: php date datetime strtotime

有人可以告诉我为什么strtotime()似乎要加1天?这似乎只发生在下午晚些时候(比如7点或8点),否则说的是正确的一天。

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

输出:

  

12/21/2015 08:34:43 pm

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

输出:

  

2015年12月22日星期二

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

3 个答案:

答案 0 :(得分:2)

使用date代替gmdate

您正在使用gmdate()获取UTC日期。这个问题只发生在下午/晚上,因为那时候确实是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中配置了((token)(.*\n)*.*(readonly))|((readonly)(.*\n)*.*(token)) ,这一点非常重要。

答案 1 :(得分:0)

您的代码中的详细信息......

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'); ......

答案 2 :(得分:0)

决定最终使用:

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

基于亚历山大的评论。