带有日期差异的PHP strotime问题

带有日期差异的PHP strotime问题,php,strtotime,date-math,Php,Strtotime,Date Math,有人能解释一下这个例子中strotime函数的错误吗?我在计算日期之间的差异。PHP 5.6.0(cli)(构建日期:2014年8月28日08:03:51) 当我执行这个循环时,它显示数字88两次 date_default_timezone_set('Europe/London'); for($i=1;$i<=100;$i++){ $daysAfterTime = floor( abs( strtotime('2014-01-01') - strtotime('2014-01-01

有人能解释一下这个例子中strotime函数的错误吗?我在计算日期之间的差异。PHP 5.6.0(cli)(构建日期:2014年8月28日08:03:51) 当我执行这个循环时,它显示数字88两次

date_default_timezone_set('Europe/London');
for($i=1;$i<=100;$i++){
    $daysAfterTime = floor( abs( strtotime('2014-01-01') - strtotime('2014-01-01 +'.$i.' days')  )/(60*60*24));
    echo $daysAfterTime.'<br/>';
} 
date\u default\u timezone\u set(“欧洲/伦敦”);

对于($i=1;$i我不知道预期的输出是什么,但另一个88结果是因为
floor()
函数。它将最低值四舍五入,从而重复88。将增长值切换为减去常量值,这样就不需要使用
abs()
ceil()

date\u default\u timezone\u set(“欧洲/伦敦”);
对于($i=1;$i
strotime()
不适用于日期数学

不建议将此函数用于数学运算

日子并不完全是
60*60*24
秒长,等等

如注释中所述,
DateTime()
更适合于此,因为它考虑了夏令时、闰年等因素。这里有一种使用执行相同操作的高级方法,任何试图弄清楚发生了什么的人都可以更清楚地看到这一点

$start    = new DateTimeImmutable('2014-01-01', new DateTimeZone('Europe/London'));
$finish   = $start->modify('+101 days'); // extra day as the last day is not inclusive
$interval = new DateInterval('P1D');     // interval of one day 
$period   = new DatePeriod($start, $interval, $finish);
foreach ($period as $date) {
    $diff = $start->diff($date);
    echo $diff->days . "<br>";
} 
$start=new DateTimeImmutable('2014-01-01',new DateTimeZone('Europe/London');
$finish=$start->modify(“+101天”);//不包括最后一天的额外天数
$interval=new DateInterval('P1D');//一天的间隔
$period=newdateperiod($start、$interval、$finish);
foreach($期间为$日期){
$diff=$start->diff($date);
回声$diff->days.“
”; }

我认为欧洲/伦敦时区使用

有关伦敦DST的信息:

附言。 与z一起使用可以正常工作

date_default_timezone_set('Europe/London');
for($i=1;$i<=100;$i++){
    $daysAfterTime = date('z', strtotime('2014-01-01 +'.$i.' days')) - date('z', strtotime('2014-01-01'));
    echo $daysAfterTime.PHP_EOL;
}
date\u default\u timezone\u set(“欧洲/伦敦”);

对于($i=1;$iI)不知道预期的结果是什么,但我建议使用DateTime类来查找时间差。^谢谢大家的提示
date_default_timezone_set('Europe/London');
echo (strtotime('2014-01-01 +89 days') - strtotime('2014-01-01 +88 days'))/(60*60), ' hours per day';
// 23 hours per day
var_dump(date('Y-m-d',strtotime('2014-01-01 +88 days')));
// string(10) "2014-03-30"
date_default_timezone_set('Europe/London');
for($i=1;$i<=100;$i++){
    $daysAfterTime = date('z', strtotime('2014-01-01 +'.$i.' days')) - date('z', strtotime('2014-01-01'));
    echo $daysAfterTime.PHP_EOL;
}