13

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

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

我目前正在阅读如下日期,但我得到的01-01-19700000-00-00

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

6 回答 6

13

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

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

    if (strtotime($row['date']) != '0000-00-00') {

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

    } else {
        mydate = '';
    }
}
于 2012-05-05T12:45:43.607 回答
8

试试这个,它对我有用

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';
 }
}
于 2015-07-15T08:22:26.027 回答
6

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

日期“0000-00-00”被解析为“-0001-11-30”。PHP 手册的日期格式部分对此进行了解释:

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”不是有效的日期字符串。

也可以使用值为 0 的 mm 和 MM 格式下溢。月份值为 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 月30th, -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 秒。

于 2017-11-29T09:18:39.563 回答
6

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

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

或短版:

!empty((int)$row['date']) ? echo "NOT empty" : echo "EMPTY";
于 2018-04-24T07:52:46.607 回答
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 "".

于 2012-05-05T13:35:46.777 回答
1

您可以做的是替换日期或日期时间字符串中的所有0、和值-,并检查它是否为空。:

if (empty(str_replace(array("0", "-", ":", " "), "", $mydate)))
{
  echo "empty date";
}
else
{
  echo "not empty date";
}
于 2015-07-30T08:08:02.943 回答