2012-01-13 46 views
12

如果$ due等于无日期,我想要一个逻辑,那么我希望数据以2000开头。我的下面的代码不起作用。

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

请提供'var_dump($ due);' – Wrikken 2012-01-13 16:38:48

+2

这个日期来自哪里? – webbiedave 2012-01-13 16:38:54

+0

如果您已从数据库检索到该值,则最好在查询中执行此逻辑。除非你在''if()' – 2012-01-13 16:40:35

回答

25

如果你是存储在适当的$的strtotime(),那么你需要给它这样的比较,也

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'); 
} 

但如果$由于来自你的分贝作为一个字符串,你会想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')。这也可能会打破你的比较。

+5

strtotime('0000-00-00 00:00:00') 可能会返回负值,null,false取决于PHP版本 – XuDing 2012-11-01 02:38:54

1

你需要确保你是在相同的格式比较值。与你当前所拥有的三件事情上会发生:

  • 如果$dueint,你用0000-00-00 00:00:00比较它的字符串将被转换为int,这将导致0,并且$due会与0相比。这只会导致匹配,如果$due === 0
  • 如果$duebool,字符串将被转换为bool,这将导致TRUE,并且只有在$due === TRUE时才会得到匹配项。
  • 如果$due是任何其他类型,它将被转换为一个字符串,并将两个字符串进行比较。只有在$due === '0000-00-00 00:00:00'的情况下,您才会得到一个匹配。

如果会说你可能需要比较值作为整数。这意味着,你需要通过strtotime()通过任何字符串 - 包括$due,如果它是一个字符串。由于您未显示$due的示例值,因此无法提供确切的工作代码。

0

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

我想建议最简单的形式

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

这里是解决检查数据库(MySQL的)如果时间字段为空或'0000-00-00 00:00:00'

选择所有与开始时间为空或'0000-00-00 00:00:00'且endtime不是(null或'0000-00-00 00:00:00')

在数据库末尾

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

PHP结束

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

我知道这是一个老问题,但这个答案可以帮助别人

的strtotime成功返回时间戳,否则返回FALSE。

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

unset($test); 

关于。

0

我不知道为什么strtotime没有为我正确工作。可能是因为时区和其他东西。

一如既往的花式正则表达式就像一个魅力。我有点沉迷于它!

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