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

Проверьте, равна ли $date 0000-00-00 00:00:00

Я хочу логику, если $due равно ни одной дате, тогда мне нужны данные, начиная с 2000. Мой код ниже не работает.

if($due == '0000-00-00 00:00:00'){
    $due =  strtotime('2000-00-00 00:00:00');
}
4b9b3361

Ответ 1

Если вы сохраняете strtotime() в $due, то вам также нужно сравнить его так же

if($due == strtotime('0000-00-00 00:00:00')){
    $due =  strtotime('2000-00-00 00:00:00');
}

или, проще говоря

if($due == 0){
    $due =  strtotime('2000-00-00 00:00:00');
}

но если $due исходит из вашего db в виде строки, вам нужно strtotime():

$due = strtotime($due);
if($due == 0){
    $due =  strtotime('2000-00-00 00:00:00');
}

Помните о часовых поясах. То есть strtotime ('0000-00-00 00:00:00 UTC')!= Strtotime ('0000-00-00 00:00:00 EST'). Это также может нарушить ваше сравнение.

Ответ 2

Вам нужно убедиться, что вы сравниваете значения в одном формате. С тем, что у вас есть, из трех вещей произойдет:

  • Если $due является int, строка, которую вы сравниваете с 0000-00-00 00:00:00, преобразуется в int, что приведет к 0, а $due будет сравниваться с 0. Это приведет только к совпадению, если $due === 0.
  • Если $due является bool, строка будет преобразована в bool, что приведет к TRUE, и вы получите только совпадение, если $due === TRUE.
  • Если $due - любой другой тип, он будет преобразован в строку, а два будут сравниваться как строки. Вы получите только совпадение, если $due === '0000-00-00 00:00:00'.

Если бы вы сказали, что вам, вероятно, нужно сравнить значения как целые числа. Это означает, что вам нужно передать любые строки через strtotime() - включая $due, если это строка. Поскольку вы не показываете примерное значение $due, я не могу предоставить точный рабочий код.

Ответ 3

strtotime(YourDate) != NULL отлично работает.

Я работал над разделом DOB и DOM (Дата замужества) в базе данных. Кажется, что NULL по умолчанию сохранил дату как 0000-00-00. Который вроде глупый, если честно.

Или, возможно, моя глупость сделала поле поле DATE вместо того, чтобы сделать его VARCHAR и удерживать там значение STRTOTIME.

<?php 
    if(strtotime($dates->dom) != NULL) 
    {
        echo '<a href="' . base_url() . 'dates/dom/' . $dates->dom . '">' . date('j F, Y',strtotime($dates->dom)) . '</a>';
    } 
    else 
    { 
        print 'Not Listed Yet';
    } ?></strong>

Ответ 4

Я хотел бы предложить простейшую форму

if(!$due)
        $due =  strtotime('2000-00-00 00:00:00');

Ответ 5

Вот решение проверить, является ли поле datetime в базе данных (mysql) нулевым или '0000-00-00 00:00:00'

выбор всех с временем запуска равен null или "0000-00-00 00:00:00", а время окончания не равно (null или "0000-00-00 00:00:00" )

В конце базы данных

select * from table where IFNULL(MONTH(starttime),0) >= 1 and IFNULL(MONTH(endtime),0) < 1;

в php end

if((int)$starttime && !(int)$endtime){  ///  }

Ответ 6

Я знаю, что это старый вопрос, но этот ответ может помочь кому-то

strtotime возвращает временную метку успеха, FALSE в противном случае.

$test = strtotime($due);  
$due  = (!$test || $test < 0) ? '2000-00-00 00:00:00' : $due;

unset($test);

С уважением.

Ответ 7

Я не знаю, почему strtotime не работает правильно для меня. Вероятно, это из-за часового пояса и других вещей.

Как всегда причудливые регулярные выражения работают как шарм. Я как-то увлекаюсь этим!

if(preg_match("/0{4}/" , $dbDateField))
{
    // no its not acceptable
}
else
{
    //ok
}