PHP strtotime () ничего не выводит - PullRequest
4 голосов
/ 04 августа 2009

Вот мой PHP-код:

echo '<br />1. '.$w_time_no;
echo '<br />2. '.strtotime($w_time_no);
echo '<br />3. '.date('G:i', strtotime($w_time_no));

Вот что я получаю:

1. 0000-00-00 22:00:00
2.
3. 2:00

Почему strtotime () ничего не выводит сам по себе? Что-то не так с настройками сервера? Сервер: Apache / 2.2.11 (Win32), PHP 5.2.10, версия клиента MySQL: 5.0.51a.

Ответы [ 3 ]

10 голосов
/ 04 августа 2009

strtotime ничего не "выводит", кстати: возвращает false в случае ошибки; см. руководство :

Возвращаемые значения

Возвращает метку времени при успехе, ЛОЖЬ иначе. До PHP 5.1.0 это функция вернет -1 в случае ошибки.

Что ничего не выводит, так это echo: false считается пустой строкой, и ничего не выводится.

В документации strtotime также указан допустимый диапазон дат:

Примечание. Допустимый диапазон отметки времени обычно с пт, 13 декабря 1901 20:45:54 UTC в вт, 19 января 2038 г. 03:14:07 UTC. (Это даты которые соответствуют минимуму и максимальные значения для 32-битного со знаком целое число.) Кроме того, не все платформы поддерживают отрицательные временные метки, поэтому ваш диапазон дат может быть ограничено не ранее, чем Unix эпоха. Это означает, что, например, даты до 1 января 1970 г. работать не будет Windows, некоторые дистрибутивы Linux и несколько других операционных систем. PHP 5.1.0 и более новые версии преодолевают это ограничение.

'0000-00-00' находится вне этого диапазона, поэтому не считается действительной датой; следовательно false возвращаемое значение.


В качестве идентификатора, чтобы действительно знать, что находится внутри переменной, вы можете использовать var_dump.
Как bnus, используемый с Xdebug , он даст вам хорошо отформатированный вывод.

7 голосов
/ 04 августа 2009

0000-00-00 не является действительной датой.

date () дает вывод, потому что он интерпретирует время ввода как 0 и компенсирует часовой пояс вашего сервера, я бы предположил. Могу поспорить, что date('Y-m-d H:i', strtotime(...)) даст 1970-01-01 2: 00

0 голосов
/ 04 августа 2009

Вы принимаете strtotime() за time().

strtotime буквально строка во время, для преобразования ..... во время нужна строка.

Возвращает метку времени при успехе, FALSE в противном случае. До PHP 5.1.0 эта функция возвращала -1 при ошибке.

Так что не удается проверить эту временную строку.

...