Год 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'')