Проверьте, если $ date равна 0000-00-00 00:00:00 - PullRequest
16 голосов
/ 13 января 2012

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

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

Ответы [ 7 ]

31 голосов
/ 13 января 2012

Если вы храните 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 поступает из вашей базы данных в виде строки, вы бы хотели 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'). Это также может нарушить ваше сравнение.

1 голос
/ 11 ноября 2017

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

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

if(preg_match("/0{4}/" , $dbDateField))
{
    // no its not acceptable
}
else
{
    //ok
}
1 голос
/ 09 марта 2017

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

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

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

unset($test);

С уважением.

1 голос
/ 13 января 2012

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

  • Если $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, я не могу предоставить точный рабочий код.

0 голосов
/ 08 января 2015

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

, выбирая все с начальным временем, является нулевым или '0000-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){  ///  }
0 голосов
/ 22 ноября 2014

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

if(!$due)
        $due =  strtotime('2000-00-00 00:00:00');
0 голосов
/ 20 января 2014

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...