Есть ли функция PHP для проверки нулевой даты - PullRequest
29 голосов
/ 08 апреля 2011

Ищем сокращенный или лучший способ проверить нулевую дату (столбец даты и времени MySQL), кроме:

if ($row['this_date'] == '0000-00-00 00:00:00') echo 'No date set.';

Есть ли функция PHP, которая проверяет это? Спасибо.

Ответы [ 11 ]

19 голосов
/ 08 апреля 2011

Я думаю, вам не нужны какие-либо сокращения.
Это какая-то микрооптимизация.

Вы уже потратили больше времени на задание этого вопроса, чем можете сэкономить такие сокращения в год среднего кодирования. Просто напишите это и двигайтесь дальше.
Разве вам не нужно решать более важные проблемы?

Более того, с таким сокращением вы запутываете свой код.
Ваше текущее утверждение совершенно ясно, читает "if date is empty"
но все предложенные фрагменты не так ясны. Придя к этому коду несколько месяцев спустя, вы будете задавать себе вопрос, если такой кодовый монстр имеет какое-то особое значение.

На самом деле вы хотели удобочитаемость . Но у вас уже есть. В то время как все предложенные сокращения не делают.

16 голосов
/ 19 июня 2014

А как же:

if(strtotime($row['this_date']) == 0) echo 'No date set.';
5 голосов
/ 08 апреля 2011

Хотя вам, вероятно, следует использовать NULL в вашей базе данных, простой хак будет:

if(!(int)$row['this_date'])echo'No Date Set.';

Какой лучший способ вы ожидаете найти?это быстро, как есть.

PS Это взлом, потому что я предполагаю, что у вас будет год.Это означает, что это не будет работать для строки 0000-00-00 00:00:01

3 голосов
/ 05 ноября 2015

Будучи фанатом регулярных выражений, я добавлю еще одно:

if (!preg_match('/[1-9]/', $row['this_date'])) echo 'No date set.';
  • Работает также с метками времени и другими вещами.
  • Очевидно, не проверяет согласованность даты.
2 голосов
/ 08 апреля 2011
if (strtotime($row['this_date'])) echo 'No date set.';
1 голос
/ 30 сентября 2014

Вы можете использовать следующий код

$date = '0000-00-00 00:00:00';
if(str_replace(array("-", " ", ":"), "", $date)*1>0){
    echo "DATE";
} else {
    echo "NODATE";
}
0 голосов
/ 01 декабря 2016

Это решение работает для меня.

'0000-00-00' значение хранится в моей таблице БД.

function checkValidDate($date){
   $timestamp = strtotime($date);
   return (!empty($timestamp) && $date!='0000-00-00') ? date('d-M-Y',$timestamp) : null;
}
0 голосов
/ 07 августа 2014

Это функция, которую я использую для точно такой же вещи:

/**
 * Like empty(), but also returns true for empty MySQL DATE ('0000-00-00') and DATETIME ('0000-00-00 00:00:00')
 *
 * @param mixed $var Variable to check
 * @return bool
 */
function empty_date($var)
{
    if (empty($var) or $var === '0000-00-00' or $var === '0000-00-00 00:00:00')
        return true;
    else
        return false;
}
0 голосов
/ 07 августа 2014

Использовать контрольную дату

<?php
var_dump(checkdate(12, 31, 2000));
var_dump(checkdate(2, 29, 2001));
?>

Приведенный выше пример выдаст:

bool(true)
bool(false)

http://php.net/manual/en/function.checkdate.php

0 голосов
/ 27 июня 2014

Я использую:

if ($timedate->format('U') == -62169962400){
   // 0000-00-00
}

format('U') вернется Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT) Возможно, потребуется изменить номер для часового пояса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...