PHP - странная разница в секундах между двумя датами (90000 вместо 86400) - PullRequest
2 голосов
/ 01 ноября 2011

Сегодня странное поведение PHP:

$ds = array('2011-10-28', '2011-10-29', '2011-10-30', '2011-10-31','2011-11-01');
for($i=0; $i<count($ds); $i++) {
  print_r($ds[$i].' '.strtotime($ds[$i])."\n");
  if ($i < count($ds)-1) {
    print_r(abs(strtotime($ds[$i+1]) - strtotime($ds[$i]))."\n");
  }
}

Вывод:

2011-10-28 1319756400
86400
2011-10-29 1319842800
86400
2011-10-30 1319929200
90000
2011-10-31 1320019200
86400
2011-11-01 1320105600

Может кто-нибудь объяснить аномальные 90 тысяч между 30-м и 31-м?

Ответы [ 3 ]

5 голосов
/ 01 ноября 2011

90000 секунд - это 25 часов - 25-часовой день может означать только одно ... Часы были возвращены на конец летнего времени.

Конечно, в Великобритании (я не знаю где-нибудь еще), что произошло в воскресенье утром, в результате чего 30-е было 25-часовым днем.

2 голосов
/ 01 ноября 2011

Похоже, что это дополнительный час из-за изменения летнего времени:

90000 = 25 * 60 * 60
1 голос
/ 25 октября 2013

Для правильного преобразования вы должны добавить к дате строку "+00" (часовой пояс UTC).
Например, strtotime ("2011-10-30 +00");

...