2016-11-11 134 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';'你會得到與上面提到的問題相同的輸出,爲什麼要用這個? –