PHPでのISO 8601形式として日付を表示する方法
-
05-09-2019 - |
質問
私はPHPとISO 8601フォーマットされた文字列としての私のMySQLデータベースから日時を表示しようとしているが、それは間違って出てきています。
1969-12-31T18:33:28から06:2008年10月17日のように出ている、明らかに正しいではありません00(年がない1969 2008でなければなりません)。
これは私が使用しているコードです。
<?= date("c", $post[3]) ?>
私のMySQLデータベースから$post[3] is the datetime (CURRENT_TIMESTAMP)
ます。
任意のアイデア何が間違って起こっているの?
解決
date
するの第2引数はUNIXタイムスタンプではなく、データベースのタイムスタンプ文字列です。
あなたは、データベースのタイムスタンプがのstrtotime にして変換する必要があります。
<?= date("c", strtotime($post[3])) ?>
他のヒント
<:
それはこのように行われますPHPのバージョン5.2で利用できるののDateTimeクラスを使用/ P>
$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
ハイブリッド1:
echo date_format(new DateTime('17 Oct 2008'), 'c');
// Output : 2008-10-17T00:00:00+02:00
ハイブリッド2:
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
前のPHP 5の場合:
function iso8601($time=false) {
if(!$time) $time=time();
return date("Y-m-d", $time) . 'T' . date("H:i:s", $time) .'+00:00';
}
ここでは、事前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));
}
所属していません StackOverflow