2016-11-11 88 views
0

我根据某些条件从不同列中的DB中获取datetime。这种格式php日期时间输出问题

if($obj->acct_status == 2) 
    $dt = date('d M, Y h:i:s A', strtotime($obj->approve_datetime)); 

if($obj->acct_status == 4) 
    $dt = date('d M, Y h:i:s A', strtotime($obj->suspend_datetime)); 

的DB存储datetime

在PHP脚本

2016-11-11 14:26:03 

输出:

30 Nov, -0001 12:00:00 AM 

是什么这个问题的原因是什么?

+0

看到这个http://php.net/manual/en/function.date.php#refsect1-function.date-parameters – Karthi

+0

它因为不同的数据库和sql之间的默认格式 –

回答

4

我坚信strtotime()应该避免有格式可用。

$from_format = 'Y-m-d H:i:s'; 
$to_format = 'd M, Y h:i:s A'; 
$date = '2016-11-11 14:26:03';   


echo DateTime::createFromFormat($from_format, $date)->format($to_format); 

输出:

11 Nov, 2016 02:26:03 PM 

为什么你的代码没有我不能肯定地说,它在这里很好的作品,但您可以诊断一点点。我假设你的情况下,因为strtotime()未能转换,返回-62169984000这实际上是0000-00-00 00:00:00但由于秒,分,日和月不允许为0,计算发生在0000-00-00 00:00:00减1天和1个月等等30 Nov -0001 12:00:00所以它会出现你的$obj->suspend_datetime不包含正确的数据。


我已经写了2个个小功能共享,将使这整个的考验就好办了:

function strtodatetime($date, $format = 'Y-m-d H:i:s'){ 
    return ($d = DateTime::createFromFormat($format, $date)) && $d->format($format) == $date ? $d : false; 
} 

function strtounixtime($date, $format = 'Y-m-d H:i:s'){ 
    return ($d = DateTime::createFromFormat($format, $date)) && $d->format($format) == $date ? $d->getTimestamp() : 0; 
} 

echo ($dt = strtodatetime($date)) ? $dt->format($to_format) : 'invalid format'; 
echo date('d M, Y h:i:s A', strtounixtime($obj->approve_datetime)); 

在你的情况下,使用strtounixtime()(更好的strtotime())它会转化回unix时代如果失败了。

+0

请解释为什么@nanny男孩代码不是工作 –

+0

可以有很多原因,你的代码实际上在这里工作。我假设'strtotime()'在你的情况下失败。尝试回显它的整数并使用[this](http://www.unixtimestamp.com/index.php)来检查它的正确日期。 – Xorifelse

+0

它是一个很好的方法,但如果你改变你的日期''date ='0000-00-00 00:00:00';'你会得到与上面提到的问题相同的输出,为什么要用这个? –