возникает проблема, когда я пытаюсь сосчитать дни между двумя датами.
Для быстрой отладки моего кода я использую http://sandbox.onlinephpfunctions.com/ с PHP версия 7.4.0
Проблема:
$date = new DateTime( '2018-02-28' );
$date2 = new DateTime( '2018-03-12' );
$diff = $date2->getTimestamp() - $date->getTimestamp();
var_dump($diff/(60*60*24)); //float(11.958333333333)
Как вы видите - я устанавливаю даты и рассчитываю unixtimestamp-diff между датами.
Затем я пытаюсь найти дату, когда разница между двумя датами! = 86400.
$date = new DateTime( '2020-03-08' );
$date2 = new DateTime( '2020-03-09' );
$diff = $date2->getTimestamp() - $date->getTimestamp();
var_dump($diff/(60*60*24)); //float(0.95833333333333)
Тогда я нахожу все дни с 2010 года:
$secInDay = 60 * 60 * 24;
$start_date = strtotime('2010-01-01');
$end_date = strtotime('2021-01-01');
while($start_date<$end_date) {
$next_date = strtotime('+1 day', $start_date);
$diff = ($next_date - $start_date) / $secInDay;
if ($diff !== 1) {
var_dump(date('d.m.Y', $start_date) . ' -> ' . date('d.m.Y', $next_date));
}
$start_date = strtotime('+1 day', $start_date);
}
Result:
string(24) "14.03.2010 -> 15.03.2010"
string(24) "07.11.2010 -> 08.11.2010"
string(24) "13.03.2011 -> 14.03.2011"
string(24) "06.11.2011 -> 07.11.2011"
string(24) "11.03.2012 -> 12.03.2012"
string(24) "04.11.2012 -> 05.11.2012"
string(24) "10.03.2013 -> 11.03.2013"
string(24) "03.11.2013 -> 04.11.2013"
string(24) "09.03.2014 -> 10.03.2014"
string(24) "02.11.2014 -> 03.11.2014"
string(24) "08.03.2015 -> 09.03.2015"
string(24) "01.11.2015 -> 02.11.2015"
string(24) "13.03.2016 -> 14.03.2016"
string(24) "06.11.2016 -> 07.11.2016"
string(24) "12.03.2017 -> 13.03.2017"
string(24) "05.11.2017 -> 06.11.2017"
string(24) "11.03.2018 -> 12.03.2018"
string(24) "04.11.2018 -> 05.11.2018"
string(24) "10.03.2019 -> 11.03.2019"
string(24) "03.11.2019 -> 04.11.2019"
string(24) "08.03.2020 -> 09.03.2020"
string(24) "01.11.2020 -> 02.11.2020"
Итак, мой главный вопрос - почему PHP неправильно unix -временная метка для текущих дат?