Я хочу логику, если $due равно ни одной дате, тогда мне нужны данные, начиная с 2000. Мой код ниже не работает.
if($due == '0000-00-00 00:00:00'){
$due = strtotime('2000-00-00 00:00:00');
}
Я хочу логику, если $due равно ни одной дате, тогда мне нужны данные, начиная с 2000. Мой код ниже не работает.
if($due == '0000-00-00 00:00:00'){
$due = strtotime('2000-00-00 00:00:00');
}
Если вы сохраняете 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'). Это также может нарушить ваше сравнение.
Вам нужно убедиться, что вы сравниваете значения в одном формате. С тем, что у вас есть, из трех вещей произойдет:
$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
, я не могу предоставить точный рабочий код.
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>
Я хотел бы предложить простейшую форму
if(!$due)
$due = strtotime('2000-00-00 00:00:00');
Вот решение проверить, является ли поле 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){ /// }
Я знаю, что это старый вопрос, но этот ответ может помочь кому-то
strtotime возвращает временную метку успеха, FALSE в противном случае.
$test = strtotime($due);
$due = (!$test || $test < 0) ? '2000-00-00 00:00:00' : $due;
unset($test);
С уважением.
Я не знаю, почему strtotime не работает правильно для меня. Вероятно, это из-за часового пояса и других вещей.
Как всегда причудливые регулярные выражения работают как шарм. Я как-то увлекаюсь этим!
if(preg_match("/0{4}/" , $dbDateField))
{
// no its not acceptable
}
else
{
//ok
}