我在php或.....中找到了一个错误吗?

时间:2018-03-06 08:54:46

标签: php

我在php中发现了一个错误还是其他错误? 鉴于2018-03-25结束于2018-03-2018在2015年结束的日期是2016年3月,2017年,2018年是2月2019年再次发布3

查看使用的代码

$startdate_2015 = strtotime(date('2015-03-25'));
$enddate_2015 = strtotime(date("2015-03-28"));
$nights_2015 = floor($enddate_2015 - $startdate_2015);
echo 'nights in 2015: '.$nights_2015 = floor($nights_2015/(60*60*24));
echo '<p>';
$startdate_2016 = strtotime(date('2016-03-25'));
$enddate_2016 = strtotime(date("2016-03-28"));
$nights_2016 = floor($enddate_2016 - $startdate_2016);
echo 'nights in 2016: '.$nights_2016 = floor($nights_2016/(60*60*24));
echo '<p>';
$startdate_2017 = strtotime(date('2017-03-25'));
$enddate_2017 = strtotime(date("2017-03-28"));
$nights_2017 = floor($enddate_2017 - $startdate_2017);
echo 'nights in 2017: '.$nights_2017 = floor($nights_2017/(60*60*24));
echo '<p>';
$startdate_2018 = strtotime(date('2018-03-25'));
$enddate_2018 = strtotime(date("2018-03-28"));
$nights_2018 = floor($enddate_2018 - $startdate_2018);
echo 'nights in 2018: '.$nights_2018 = floor($nights_2018/(60*60*24));
echo '<p>';
$startdate_2019 = strtotime(date('2019-03-25'));
$enddate_2019 = strtotime(date("2019-03-28"));
$nights_2019 = floor($enddate_2019 - $startdate_2019);
echo 'nights in 2019: '.$nights_2019 = floor($nights_2019/(60*60*24));
echo '<p>';

2 个答案:

答案 0 :(得分:2)

区别很简单:

259200
255600
255600
255600
{{1}}

2015年,在您测试的时间范围之后,DST切换于3月29日下降。在其他所有年份中,它在3月25日到28日之间下降,导致一小时的时差减少。

答案 1 :(得分:2)

根据时区的不同,其中一些时间间隔在标准时间开始,在夏令时结束时结束。这就是为什么差异并不总是3*24*60*60秒。

使用秒进行任意计算并不是计算日期之间差异的正确方法。使用DateTime::diff()

foreach (range(2015, 2019) as $year) {
    $start = new DateTime($year.'-03-25');
    $end   = new DateTime($year.'-03-28');
    $diff  = $end->diff($start);
    echo("Year: $year, nights: {$diff->days}\n");
}