2011-10-12 114 views
9

我想以dd-mm-yyyy格式显示$ row-> depositdate。PHP strtotime在日期列为空时返回1970年的日期

如果数据库中的日期栏为空显示的日期是:01-01-1970

echo "<td align=center>".date('d-m-Y', strtotime($row->depositdate))."</td>"; 

如果日期是在数据库它应该显示什么空,否则在DD-MM的日期应该显示-yyyy格式。预先

由于

和Sandeep

+0

然后检查值为空,如果是,不要指望'date'功能做你的工作适合你 - 显示器空字符串,否则显示'日期'功能输出。 –

回答

16

NULL通过的strtotime解释为0,因为它要被传递的整数时间戳。 0的时间戳意味着1-1-1970。

所以你必须检查自己是否$row->depositdate === NULL,如果是的话,根本不要叫strtotime。

+0

谢谢GolezTrol .... – Sandy505

6

NULL转换为0 - 时代(1970年1月1日)

做到这一点,而不是

echo "<td align=center>".($row->depositdate ? date('d-m-Y', strtotime($row->depositdate)) : '')."</td>"; 
+0

这很完美! –

0

您需要以前如果$按行>检查depositdata is_null或之后检查0 strtotime如果$ row-> depositdata的值对于strtotime是无法识别的。

echo "<td align=center>"; 
    if (!is_null($row->depositdate)) 
    { 
    $jUnixDate = strtotime($row->depositdate)); 
    if ($jUnixDate > 0) 
    { 
      echo date('d-m-Y', $jUnixDate); 
    } 
    } 
    echo "</td>"; 

strtotime希望给予含英语日期格式的字符串并尝试将其格式解析为Unix timestamp(的秒数自1970年1月1日00:00:00 UTC),相对于时间戳现在给出,或当前时间,如果现在没有提供。

更多unixtime和Y2K38问题:http://en.wikipedia.org/wiki/Year_2038_problem

-1

哦! 我知道为什么会发生这种情况? 只需在您的SELECT查询中没有包含“depositdate” 。 首先更改SQL查询来选择所有的野生卡签到 如下所示

$sql = "SELECT * FROM `yourtable`"; 
+0

你怎么知道我没有在SELECT查询中包含“depositdate”?请仔细阅读这个问题..... – Sandy505