您好我在使用php date()函数时遇到了一些奇怪的行为。我试图将日期增加一周,就像这样。
CODE:
<?php
date_default_timezone_set('Europe/London');
echo 7*24*60*60;
echo '<br>';
echo date('d/m/Y H:i:s', 0);
echo '<br>';
echo date('d/m/Y H:i:s', 604800);
?>
这导致以下输出。
输出:
604800
01/01/1970 01:00:00
08/01/1970 01:00:00
您所期望的是,日期增加了7天到第二天。但是在我达到一定的秒数之后,日期函数似乎从一个小时开始松动。
CODE:
<?php
date_default_timezone_set('Europe/London');
echo (1351468800 - 1350864000);
echo '<br>';
echo date('d/m/Y H:i:s', 1350864000);
echo '<br>';
echo date('d/m/Y H:i:s', 1351468800);
?>
以下输出结果
输出:
604800
22/10/2012 01:00:00
29/10/2012 00:00:00
正如您所看到的,即使两个日期之间的差异为604800秒,日期也已丢失一小时。我在两个不同的服务器上测试了这个,我也使用DateTime对象测试了类似的代码,但结果仍然相同。我哪里错了?
答案 0 :(得分:6)
我相信DST会在这里发挥作用。 DST于2012年10月28日在伦敦结束。
答案 1 :(得分:3)
使用strtotime
更可靠
date_default_timezone_set('Europe/London');
$startDate = "1350864000" ;
$senvenDays = strtotime("+7 day", $startDate);
var_dump(date("d/m/Y H:i:s",$startDate));
var_dump(date("d/m/Y H:i:s",$senvenDays));
var_dump($senvenDays - $startDate);
输出
string '22/10/2012 01:00:00' (length=19)
string '29/10/2012 01:00:00' (length=19)
int 608400