Подтвердить что ты не робот

Есть ли функция PHP для проверки нулевой даты

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

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

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

4b9b3361

Ответ 1

Я думаю, что вам не нужна стенография.
Это своего рода микро-оптимизация.

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

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

То, что вы действительно хотели, - это удобочитаемость. Но у вас это уже есть. Хотя все предлагаемые сокращения не имеют.

Ответ 2

Как насчет:

if(strtotime($row['this_date']) == 0) echo 'No date set.';

Ответ 3

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

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

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

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

Ответ 4

if (strtotime($row['this_date'])) echo 'No date set.';

Ответ 5

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

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

Ответ 6

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

$date = '0000-00-00 00:00:00';
if(str_replace(array("-", " ", ":"), "", $date)*1>0){
    echo "DATE";
} else {
    echo "NODATE";
}

Ответ 7

Я использую:

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

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

Ответ 8

Использовать checkdate

<?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

Ответ 9

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

/**
 * 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;
}

Ответ 10

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

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

function checkValidDate($date){
   $timestamp = strtotime($date);
   return (!empty($timestamp) && $date!='0000-00-00') ? date('d-M-Y',$timestamp) : null;
}

Ответ 11

Что-то, что я сейчас использую и изучаю, чтобы надеяться найти лучшее решение...

function prep_empty_fields(&$data) {
$is_obj = is_object($data);
$is_arr = is_array($data);
if ($is_obj || $is_arr) {
    $empty_values = array(
        NULL,
        FALSE,
        '0',
        '00',
        '0000', //year
        '000000',
        '00000000',
        '0000000000',
        '000000000000',
        '00000000000000',
        '0000000000000000',
        '0000-00-00 00:00:00', //datetime
        '0000-00-00', //date
        '00:00:00', //time
        '0.0000',
        '0.000',
        '0.00',
        '0.0'
    );
    foreach ($data as $key => $value) {
        if (in_array($value, $empty_values)) {
            if ($is_obj) {
                $data->$key = '';
            } else {
                $data[$key] = '';
            }
        } elseif (strpos($value, '<') !== FALSE) { //has html characters
            $value = htmlentities($value);
            if ($is_obj) {
                $data->$key = $value;
            } else {
                $data[$key] = $value;
            }
        }
    }
}

Мой код просто избавляется от "пустых" значений, но может быть хорошей отправной точкой для вас.