在while
循环中,如何仅在该日期存在时才显示日期?
例如:如果日期为0000-00-00
,则不显示任何内容。
我目前正在阅读如下日期,但我得到的01-01-1970
是0000-00-00
:
date('d-m-Y', strtotime($row['date']))
您应该首先检查日期字段中的内容是否包含日期或其 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 = '';
}
}
试试这个,它对我有用
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';
}
}
当前接受的答案是错误的。
日期“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 秒。
一个简单的方法是将 $row['date'] 评估为整数并测试该值,如下所示:
if(!empty((int)$row['date']))
{
echo "NOT empty";
}
else echo "EMPTY";
或短版:
!empty((int)$row['date']) ? echo "NOT empty" : echo "EMPTY";
试试这个
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 "".
您可以做的是替换日期或日期时间字符串中的所有0
、和值-
,并检查它是否为空。:
if (empty(str_replace(array("0", "-", ":", " "), "", $mydate)))
{
echo "empty date";
}
else
{
echo "not empty date";
}