MySQLデータベースの日付時刻を、PHPのISO 8601形式の文字列として表示しようとしていますが、間違っています。
2008年10月17日は1969-12-31T18:33:28-06:00として公開されますが、これは明らかに正しくありません(1969年ではなく2008年である必要があります)
これは私が使用しているコードです:
_<?= date("c", $post[3]) ?>
_
MySQLデータベースの$post[3] is the datetime (CURRENT_TIMESTAMP)
.
何が間違っているのでしょうか?
PHPバージョン5.2で利用可能な DateTimeクラス を使用すると、次のようになります。
$datetime = new DateTime('17 Oct 2008');
echo $datetime->format('c');
PHP 5.4の時点で、これをワンライナーとして実行できます。
echo (new DateTime('17 Oct 2008'))->format('c');
echo date_format(date_create('17 Oct 2008'), 'c');
// Output : 2008-10-17T00:00:00+02:00
$formatteddate = new DateTime('17 Oct 2008');
echo $datetime->format('c');
// Output : 2008-10-17T00:00:00+02:00
echo date_format(new DateTime('17 Oct 2008'), 'c');
// Output : 2008-10-17T00:00:00+02:00
echo date_create('17 Oct 2008')->format('c');
// Output : 2008-10-17T00:00:00+02:00
1)'Y-m-d\TH:i:sP'
の代わりに'c'
をフォーマットに使用することもできます。
2)入力のデフォルトのタイムゾーンは、サーバーのタイムゾーンです。入力を別のタイムゾーン用にしたい場合は、タイムゾーンを明示的に設定する必要があります。ただし、これは出力にも影響します。
echo date_format(date_create('17 Oct 2008 +0800'), 'c');
// Output : 2008-10-17T00:00:00+08:00
3)入力とは異なるタイムゾーンの出力にする場合は、タイムゾーンを明示的に設定できます。
echo date_format(date_create('17 Oct 2008')->setTimezone(new DateTimeZone('America/New_York')), 'c');
// Output : 2008-10-16T18:00:00-04:00
Pre PHP 5:
function iso8601($time=false) {
if(!$time) $time=time();
return date("Y-m-d", $time) . 'T' . date("H:i:s", $time) .'+00:00';
}
Pre PHP 5:最後にGMTの違いを追加しましたが、ハードコードされていません。
function iso8601($time=false) {
if ($time === false) $time = time();
$date = date('Y-m-d\TH:i:sO', $time);
return (substr($date, 0, strlen($date)-2).':'.substr($date, -2));
}