У меня простая проблема с mktime. Я найти следующий код:PHP mktime иногда возвращает неправильный день
echo date("Y-M-d", mktime(11, 45, 0, 01, 05, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 06, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 07, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 08, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 09, 2014)); echo ", ";
производит следующий вывод:
2014-Jan-05, 2014-Jan-06, 2014-Jan-07, 2013-Dec-31, 2013-Dec-31
Функция даты только там, чтобы сделать его более удобным для чтения; временные метки, возвращенные самим mktime, ошибочны. Только вещь меняется день месяца, поэтому я не знаю, почему произошел разрыв между 7 и 8 днями, или почему оба 8 и 9 возвращаются в тот же день.
Я проверил, что час, минута и секунда не изменяют результат неправильного дня, хотя они меняют точную метку времени. То есть, последние две строки выше возвращают ту же самую временную метку (1388508300), но если я изменю час, относительное изменение временной метки будет таким, как ожидалось.
В случае, если это имеет значение, это выполняется в PHP 5.3 в рамках установки WordPress.
И месяцы. Когда вы доберетесь до 08 и 09, у вас тоже будут большие проблемы. – Jessica
Thanks; конечно, как только я ударил «задаю вопрос», эта возможность возникла и у меня. Я не знал, что начальный ноль (общий для дат форматирования!) В PHP интерпретируется как восьмеричное число. Чтобы быть полностью верным, я должен удалить начальный ноль с «01» (январь), иначе в противном случае у меня возникнет еще одна проблема августа. – GJP
@GJP '08' - это не дата, это просто номер ... :) – deceze