在while
循环中,如果该日期存在,如何才能显示 的日期?
例如:如果日期为0000-00-00
,则不显示任何内容。
我目前正在阅读以下日期,但在01-01-1970
时我收到了0000-00-00
:
date('d-m-Y', strtotime($row['date']))
答案 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";
}