检查日期是否为空

时间:2012-05-05 12:40:44

标签: php html

while循环中,如果该日期存在,如何才能显示 的日期?

例如:如果日期为0000-00-00,则不显示任何内容。

我目前正在阅读以下日期,但在01-01-1970时我收到了0000-00-00

date('d-m-Y', strtotime($row['date']))

6 个答案:

答案 0 :(得分:6)

试试这个,它为我工作

while($row = mysql_fetch_array($result)){ 
 if(strtotime($row['date']) > 0){
   echo date('d-m-Y', strtotime($row['date']));
 }else{
   echo 'Date not valid or null';
 }
}

答案 1 :(得分:6)

目前接受的答案是错误的。

日期" 0000-00-00"被解析为" -0001-11-30"。这在PHP手册的Date Formats部分进行了解释:

  

dd和DD格式可以上下溢。第0天表示上个月的最后一天,而溢出计入下个月。这使得" 2008-08-00"相当于" 2008-07-31"和" 2008-06-31"相当于" 2008-07-01" (六月只有30天)。

     

请注意,从PHP 5.1.0起,日期范围限制为0-31,如上面的正则表达式所示。因此" 2008-06-32"例如,它不是有效的日期字符串。

     

mm和MM格式的下溢也可能为0。月份值0表示上一年的12月。例如" 2008-00-22"相当于" 2007-12-22"。

     

如果你结合前两个事实并在当天和月份下溢,则会发生以下情况:" 2008-00-00"首先转换为" 2007-12-00"然后转换为" 2007-11-30"。字符串" 0000-00-00"也会发生这种情况,它会被转换为" -0001-11-30" (ISO 8601日历中的第-1年,即公元前2世纪的格里高利历)。

如果你使用旧版本的PHP或32位操作系统,strtotime(" 0000-00-00")将返回false,但不是因为它认为它不是设置,但因为解析日期(11月30日,-0001)超出了它可以处理的日期。使用较新的PHP版本在64位系统上调用相同的函数将返回类似于-62169984000的整数(稍有差异,具体取决于系统的时区)。这是因为该系统可以处理提供的日期并正确返回1970年1月1日至11月30日-0001之间的秒数。

所以在字符串" 0000-00-00"上使用strtotime()确定是否已设置是否正确使用该功能并且不返回所需的结果。作为字符串" 0000-00-00"被认为是这个问题中的默认未设置值,一个简单的字符串比较就足够了:

while($row = mysql_fetch_array($result)){
    if($row['date'] != '0000-00-00'){ // string comparison to see if set or not
        echo date('d-m-Y', strtotime($row['date']));
    }
}

请注意,在32位系统和较旧的PHP版本中,这仅适用于1901年12月13日到2038年1月19日之间的日期。除此之外的日期将导致strtotime($ row [' date'])返回false,date()函数将其解释为0并返回" 01-01-1970"因为这是自1970年1月1日以来的0秒。

答案 2 :(得分:3)

您应首先检查日期字段中是否包含日期或其NULL。根据结果​​,你可以阅读日期。

while($row = mysql_fetch_array($result)){ 

if(strtotime($row['date'])!='0000-00-00'){
mydate = date('d-m-Y', strtotime($row['date']));
}else{
mydate ='';
}
}

答案 3 :(得分:3)

一种简单的方法是将$ row ['date']计算为整数并测试该值,如下所示:

if(!empty((int)$row['date']))
{
  echo "NOT empty";
}
else echo "EMPTY";

OR短版:

!empty((int)$row['date']) ? echo "NOT empty" : echo "EMPTY";

答案 4 :(得分:1)

试试这个

foreach($row As $rows){
 if(strtotime($rows['date']) == ''){
    echo "N/A";
  }else{
echo date('d-m-Y', strtotime($rows['date']));
 }
echo "<br/>";

}

strtotime of "0000-00-00" AND "" is equal to "".

答案 5 :(得分:1)

您可以执行的操作是替换日期或日期时间字符串中的所有0-:值,并检查该值是否为空。

if (empty(str_replace(array("0", "-", ":", " "), "", $mydate)))
{
  echo "empty date";
}
else
{
  echo "not empty date";
}