w3cdtf形式で受信した日付データのフォーマット変換
w3cdtfとは
ISO8601の日付形式のプロファイル。インターネットで時刻情報をやり取りするときに使用する。
- YYYY(2018)
- YYYY-MM(2018-11)
- YYYY-MM-DD(2018-11-20)
- YYYY-MM-DDThh:mmTZD(2018-11-20T10:45+09:00)
- YYYY-MM-DDThh:mm:ssTZD(2018-11-20T10:45:23+09:00)
- YYYY-MM-DDThh:mm:ss.sTZD(2018-11-20T10:45:23.5+09:00)
+09:00はUTC(協定世界時=グリニッジ標準時)との時差を表しています。+0900と表記することも可能。
w3cdtf形式のフォーマット変換
GETまたはPOSTパラメータとして受け取ったw3cdtf形式をPHPで使い勝手よくするためのフォーマット変換で少しハマったのでメモ。
w3cdtfのフォーマット変換そのものはdate関数とstrtotime関数の組み合わせで実装可能。
$w3cDate = "2018-11-20T01:23:45+09:00"; $date = date("Y-m-d H:i:s", strtotime($w3cDate));
しかしこの$w3cDateを実際にGETデータに置き換えると上手く動かない。
var_dump($date); =>string(19) "1970-01-01 09:00:00"
なぜか日付が1970年(UNIXシステムでの時間の起点)に。
そこでパラメータの値を確認してみることに
$parameter = $request->input(); var_dump($parameter["date"]); =>string(25) "2018-11-20T12:34:56 09:00"
どうやら+09:00の+が消えてしまった模様。GETやPOSTで+を送信すると消えてしまう。
つまり送信元の方で
$data
= urlencode(
$data
);
とURLエンコードしてあげて解決。
コメント