web-dev-qa-db-ja.com

PHP date()returning format yyyy-mm-ddThh:mm:ss.uZ

次の質問/回答を確認しました: phpで「yyyy-MM-ddTHH:mm:ss.fffZ」の形式を取得するにはどうすればよいですか? 回答には、日付をフォーマットするためのMicrosoftドキュメントへのリンクが含まれていますしかし、これらはPHPでは機能しません。

トップアンサーは提案します

date('Y-m-dTH:i:s.uZ') //for the current time

これは2013-03-22EDT12:56:35.000000-1440016を出力します

背景

上記の形式のタイムスタンプを必要とするAPIを使用しています。 APIは英国(GMT)に基づいており、私のサーバーはオーストラリア(AEST)にあります。

APIドキュメントに記載されている例では、日付を次の形式にする必要があります。

2011-07-15T16:10:45.555Z

これに最も近いのはdate( 'c')で、次のように出力されます。

2014-07-03T16:41:59+10:00//Notice the Z is replaced with a time diff in hours

'Z'はゾーンを指していると思いますが、PHPのドキュメントには記載されていません。

残念ながら、この形式を投稿すると、APIが時間を読み取り、10時間休みます。日付を過去にすることはできないというエラーが表示されます(メルボルンの現地時間と照合しているが、10時間前の時刻が表示されているため)。

APIが受け入れる+1000を削除するためにタイムスタンプをトリミングしようとしましたが、レコードは10時間前に作成されたものとして表示されます。

必要なタイムスタンプを一致させる必要がありますが、オーストラリアのメルボルンのPHPで、上記の出力を複製する方法が見つかりません。ご協力いただければ幸いです。

SOの最初の質問なので、私がどのように行ったか教えてください

9
Patrick

ZはタイムゾーンUTCを表し、 ISO-8601 で定義されます。これは、ミリ秒単位で拡張された、目的の出力形式です。

時刻を出力する前に、現地時間をUTCに転送する必要があります。

$dt = new DateTime();
$dt->setTimeZone(new DateTimeZone('UTC'));

次に、次のフォーマット文字列を使用できます。

echo $d->format('Y-m-d\TH-i-s.\0\0\0\Z');

ミリ秒の部分をゼロにし、フォーマットパターンの特殊文字TZをエスケープしたことに注意してください。

5
hek2mgl