PHP дата выпуска - strtotime не выводит то, что должен? - PullRequest
1 голос
/ 12 января 2010

У меня есть пара пустых значений DATETIME (0000-00-00 00:00:00) в моей базе данных.

Всякий раз, когда я запускаю их через strtotime, они возвращают «1263247058» вместо FALSE, что должно быть сделано в соответствии с информацией на связанной странице:

PHP strtotime () ничего не выводит

Как получилось?

Спасибо.

Ответы [ 5 ]

3 голосов
/ 12 января 2010

Как говорится в одном из комментариев в документах для strtotime, «значение, возвращаемое strtotime("0000-00-00"), зависит от версии PHP». Поэтому лучше выполнить дополнительную проверку для этого конкретного значения.

1 голос
/ 12 января 2010

Многие функции PHP внутренне зависят от стандартной реализации библиотеки C, и вполне вероятно, что это случай strtotime (). Это означает, что точное поведение зависит от операционной системы, в которой работает PHP.

Я думаю, что лучше не полагаться на strtotime () для обнаружения неверных дат.

Как примечание ... Я предполагаю, что вы используете MySQL. Можно настроить его так, чтобы он не принимал недопустимые даты:

NO_ZERO_DATE

1 голос
/ 12 января 2010

Почему это объясняется в других ответах. Этот код приведет к значению false:

if ($db_datetime == 0) {
    $unix_timestamp = false;
} else {
    $unix_timestamp = strtotime($db_datetime);
}
0 голосов
/ 12 января 2010

Рассмотрим вывод следующего кода (PHP версии 5.3.0):

echo date( "h:i:sa m/d/Y", strtotime( '00:00:00' ) ) . "<br/>" ;
echo date( "h:i:sa m/d/Y", strtotime( '00:00:00 00-00-0000' ) ). "<br/>"  ;

// Output
12:00:00am 01/12/2010
12:00:00am 01/01/1970
0 голосов
/ 12 января 2010

у меня работает: \

$ php -r 'var_dump(strtotime("0000-00-00 00:00:00"));'
bool(false)
$

PHP 5.2.8 для Mac OS, а также PHP 5.2.5 для CentOS 5.2. Можете ли вы попробовать тот же тест? Если результат будет другим, какую версию PHP вы используете и какую платформу?

FWIW, мне кажется, что вы можете полностью избежать этой ситуации, сохранив в базе данных фактическое значение NULL вместо нулевой даты.

...