Ищите краткое или лучшее средство для проверки нулевой даты (столбец datetime MySQL), кроме:
if ($row['this_date'] == '0000-00-00 00:00:00') echo 'No date set.';
Есть ли функция PHP, которая ее проверяет? Спасибо.
Ищите краткое или лучшее средство для проверки нулевой даты (столбец datetime MySQL), кроме:
if ($row['this_date'] == '0000-00-00 00:00:00') echo 'No date set.';
Есть ли функция PHP, которая ее проверяет? Спасибо.
Я думаю, что вам не нужна стенография.
Это своего рода микро-оптимизация.
Вы уже потратили больше времени на задание этого вопроса, чем сможете сэкономить на таком сокращении в год среднего кодирования. Просто напишите и перейдите.
У вас нет более важных проблем?
Кроме того, с такой стенографией вы будете запутывать свой собственный код.
Ваше текущее выражение совершенно ясно, читает "if date is empty"
но все предложенные фрагменты не так понятны. Придя к этому коду спустя несколько месяцев, вы будете озадачены вопросом, если такой монстр кода имеет какое-то особое значение.
То, что вы действительно хотели, - это удобочитаемость. Но у вас это уже есть. Хотя все предлагаемые сокращения не имеют.
Как насчет:
if(strtotime($row['this_date']) == 0) echo 'No date set.';
Хотя вы, вероятно, должны использовать NULL в своей базе данных, простой взлом:
if(!(int)$row['this_date'])echo'No Date Set.';
Какой лучший способ вы ожидаете найти? это быстро, как есть.
P.S. Это взломать, потому что я предполагаю, что у вас будет год. Значит, это не будет работать для строки 0000-00-00 00:00:01
if (strtotime($row['this_date'])) echo 'No date set.';
Будучи поклонником регулярных выражений, я добавлю еще один:
if (!preg_match('/[1-9]/', $row['this_date'])) echo 'No date set.';
Вы можете использовать следующий код
$date = '0000-00-00 00:00:00';
if(str_replace(array("-", " ", ":"), "", $date)*1>0){
echo "DATE";
} else {
echo "NODATE";
}
Я использую:
if ($timedate->format('U') == -62169962400){
// 0000-00-00
}
format('U')
вернется Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)
Возможно, потребуется скорректировать номер для часового пояса
Использовать checkdate
<?php
var_dump(checkdate(12, 31, 2000));
var_dump(checkdate(2, 29, 2001));
?>
Вышеприведенный пример выводит:
bool(true)
bool(false)
Это функция, которую я использую для той же самой вещи:
/**
* 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;
}
Это решение работает для меня.
'0000-00-00'
значение сохраняется в моей таблице db.
function checkValidDate($date){
$timestamp = strtotime($date);
return (!empty($timestamp) && $date!='0000-00-00') ? date('d-M-Y',$timestamp) : null;
}
Что-то, что я сейчас использую и изучаю, чтобы надеяться найти лучшее решение...
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;
}
}
}
}
Мой код просто избавляется от "пустых" значений, но может быть хорошей отправной точкой для вас.