Год 0 испорчен

$datetime = new DateTime('0000-00-00 00:00:00');
$date_string = $datetime->format('Y-m-d H:i:s');//-0001-11-30 00:00:00 

дата превращается из 0000-00-00 00:00:00 в -0001-11-30 00:00:00 это, очевидно, неправильно, почему это происходит, как это исправить? Должен хотя бы вернуть false.

информация: PHP версии 5.2.13-0.dotdeb.1 Linux 2.6.26-2-openvz-amd64 #1 SMP чт 25 ноября 05:14:47 UTC 2010 x86_64

1 ответ

Решение

Это вроде правильно по определению:

  • нулевой день в отличие от первого дает (гипотетический) минус один день
  • нулевой месяц в отличие от первого дает (гипотетический) минус один месяц

Возьмите (гипотетическое) 1 января в году 0, вычтите месяц -> 1 декабря в году -1. Вычтите день -> 30 ноября года -1

В качестве альтернативы, они могли бы сначала выбрать день, а затем: 1 января минус 1 день -> 31 декабря -0001, минус 1 месяц -> 30 ноября -0001

Форматировщик, очевидно, выполняет связанную проверку, чтобы получить только действительные даты. (Для некоторого определения ``valid'')

Другие вопросы по тегам