PHPで日時をISO 8601に変換する方法


103

時間2010-12-30 23:21:46をISO 8601日付形式に変換するにはどうすればよいですか?(-_-;)


1
@Gordonはい、約4,530件の結果が得られ、@ alexからの回答が見つかりました。
すごい

@wow 4530のどの結果もあなたの質問に答えなかった理由を指摘してください。
Gordon

1
@Gordon私はまだAからZへの書き方を学んでいるが、ZからAへの書き方を教えてくれた:)
wow

@wowいいえ。アルファベット($ from、$ to)の書き方を教えてくれます。それらのほとんどすべてが、使用するように指示するdate($format, strtotime($dateString))か、DateTime同等のオブジェクトです。それらは、それらの関数への入力のみが異なります。あなたがしなければならないのは、PHPマニュアルの対応するページに行き、入力が何であるかを見つけることです。
Gordon

3
@Gordonはい、あなたは正しいです。私はアルファベットを知っていて、今は蜂の時間を綴っています。私が正しい学校にいることを願っています。
すごい

回答:


229

オブジェクト指向

これが推奨される方法です。

$datetime = new DateTime('2010-12-30 23:21:46');

echo $datetime->format(DateTime::ATOM); // Updated ISO8601

手続き型

古いバージョンのPHPの場合、または手続き型コードに慣れている場合。

echo date(DATE_ISO8601, strtotime('2010-12-30 23:21:46'));

3
質問、出力は2010-12-30T23:21:46+1100どのようにするの2010-12-30T23:21:46+11:00ですか?
すごい

2
@wowこれを試してくださいpreg_replace('/(?<=\d{2})(?=\d{2}$)/', ':', '2010-12-30T23:21:46+1100')。出力します2010-12-30T23:21:46+11:00
アレックス


12
date('c', strtotime('2010-12-30 23:21:46'))nice @Gordon :)
すごい

8
を使用DATE_ISO8601すると、ISO8601とわずかに異なる日付文字列が生成されることに注意してください(TZでコロンが欠落しています。ISO8601は、すべてがコロン付きまたはORなしですべて期待され、混合ではありません)- date('c')厳密なISO 8601有効日付を生成します-コードが厳密なISO 8601日時形式を期待している場合、これによりバグの追跡が困難になる可能性があります。参照:en.wikipedia.org/wiki/ISO_8601
ckm 2015年

38

PHP 5以降では、これを使用できます。echo date("c");形式はISO 8601形式の日時です。

http://ideone.com/nD7piL

コメントに関する注意:

この、これらの表現の両方が、基本的な形式のため、タイムゾーンのために有効です±[hh]:[mm], ±[hh][mm], or ±[hh]

ただし、+ 0X:00は正しい値であり、+ 0X00は拡張された使用法では正しくないことに注意してください。したがって、を使用することをお勧めしますdate("c")ここで同様の議論。


1
とのわずかな違いに注意してくださいDATE_ISO8601+0X:00+0X00
ジャック

@Ja͢ckでは、これには反対投票が必要ですか?通常、わずかな違いは悪い考えです。
rybo111 2015年

@ rybo111この回答に反対票を投じる理由がわかりません。技術的には、'c'およびDATE_ISO8601は有効なISO8601時間表現を生成します。
ジャック

回答するメモを追加しました。
トランテ

@Ja͢ck DATE_ISO8601は、有効なISO8601表現を生成しません。DATE_ATOMはそうします
キャプテン

3

ISO 8601からunixtimestampに変換する方法:

strtotime('2012-01-18T11:45:00+01:00');
// Output : 1326883500

unixtimestampからISO 8601(タイムゾーンサーバー)に変換する方法:

date_format(date_timestamp_set(new DateTime(), 1326883500), 'c');
// Output : 2012-01-18T11:45:00+01:00

unixtimestampからISO 8601(GMT)に変換する方法:

date_format(date_create('@'. 1326883500), 'c') . "\n";
// Output : 2012-01-18T10:45:00+00:00

unixtimestampからISO 8601(カスタムタイムゾーン)に変換する方法:

date_format(date_timestamp_set(new DateTime(), 1326883500)->setTimezone(new DateTimeZone('America/New_York')), 'c');
// Output : 2012-01-18T05:45:00-05:00


1

datetime-localに値を設定しようとした場合

date("Y-m-d\TH:i",strtotime('2010-12-30 23:21:46'));

//output : 2010-12-30T23:21

承認された回答に付けられたコメントにも同様の解決策が記載されています
sushant047
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.