2016-11-11 2 views
0

いくつかの条件に基づいて異なる列からdatetimeをDBに取得します。 PHPでPHP datetime出力問題

スクリプト:

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この形式で:

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 

あなたのコードは、私はそれがここ罰金に動作しますが、あなたは少しを診断することができ、特定のために言うことができない障害が発生したのはなぜ。私はあなたのケースではが変換に失敗したので、実際には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つの小さな機能を書いている


strtounixtime()を使用して、あなたのシナリオでは

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)); 

を、それが戻って翻訳します(strtotime()良い)へunix epochに失敗した場合。

+0

なぜ@nanny boyコードがそうでないのか説明してください –

+0

多くの理由がありますが、あなたのコードは実際にここで動作します。私は 'strtotime()'があなたのケースで失敗すると仮定しています。その整数をエコーし​​、[this](http://www.unixtimestamp.com/index.php)を使って正しい日付かどうか確認してください。 – Xorifelse

+0

良いアプローチですが、 '$ date = '0000-00-00 00:00:00'で日付を変更すると、上記の質問と同じ出力が得られます。 –