奇怪的行为日期()php函数。缺陷
我试着增加3天和4天。问题是date()在这两种情况下返回相同的日期。为什么?奇怪的行为日期()php函数。缺陷,php,date,Php,Date,我试着增加3天和4天。问题是date()在这两种情况下返回相同的日期。为什么? $intTime = strtotime('2012-10-25')+(3*86400); date('Y-m-d', $intTime ); $intTime = strtotime('2012-10-25')+(4*86400); date('Y-m-d', $intTime ); 返回2012-10-28 PHP 5.2.6-1 及 时区:欧洲/华沙,菲律宾:5.2.17 但是 返回有效日期。您可能希望使用
$intTime = strtotime('2012-10-25')+(3*86400);
date('Y-m-d', $intTime );
$intTime = strtotime('2012-10-25')+(4*86400);
date('Y-m-d', $intTime );
返回2012-10-28
PHP 5.2.6-1
及
时区:欧洲/华沙,菲律宾:5.2.17
但是
返回有效日期。您可能希望使用不同的方法添加一天内容-这更容易理解:
$time = strtotime('+3 day',strtotime('2012-10-25'));
$data = date('Y-m-d', $time);
我不确定上面的内容是否会考虑到夏令时,但是正如Michael Berkowski所提到的。不,这不是PHP中的错误——你正在违反夏令时 使用
strotime()
创建的日期没有指定时间,因此默认为午夜(即00:00:00)
当你在时间戳上加上24小时,它通常会在第二天的同一时间结束。然而,由于在某些国家,本周末是夏令时的结束日,因此这一天会延长一个小时——因此,加上24小时,时间戳会映射到当天23点
这就是为什么你会得到这种奇怪的效果
解决办法是:
date\u add()
方法,该方法允许您指定天数,完全绕过整个问题。(该类还有许多其他优秀的功能,比旧式功能更好、更易于使用)。**注意:
DateTime::add()
方法仅在PHP5.3中可用。如果你被5.2卡住了,你就不能使用它(但如果是这样,我也强烈建议你升级,因为你已经严重过时了)希望这能有所帮助。根据你的时区、日期、DST、月相以及那天早上是否见过黑猫,两个时间戳可能会在同一天结束,一个在清晨,另一个在深夜。一天并不总是86400秒长
使用适当的日期/时间处理功能。可以使用
+3天
语法添加时间,可以使用一些涉及的数学来创建新的时间戳,但该类是操作时间戳的最健壮和通用的方法。通常,当您在一个时区中,在这些日期中经历夏令时,会发生这种情况。当这种情况发生时,添加86400
是错误的,因为现在一天中不再有86400秒
尝试将日期生成更改为:
$intTime = strtotime('2012-10-25 +3 days');
尝试添加:
date_default_timezone_set('UTC');
这对我有用。返回2012-10-28和2012-10-29。当你回显它们时会返回什么日期?+1@Trevor,我也是。您是否在水星上运行服务器;)我想我们需要看看你用来输出日期的实际代码。。。这将有助于在您的区域设置中,您可能会遇到夏时制更改()的冲突。简单地增加86400对于增加天数来说是不可靠的。您所在的时区是什么?时钟在这个周末会改变吗?是的,这会返回有效日期。谢谢。没问题,很高兴知道它似乎考虑了一天的长度:)而且我不知道你可以像
strotime('2012-10-25+3天')那样使用它代码>-+1很好找到了。
date_default_timezone_set('UTC');