みなさん、コウタロウです!!
今日はタイトルについて。
Dateオブジェクトの値がずれる
画面から日付(日時)項目をAjax通信でサーバー側に渡すため、JSON.stringifyでオブジェクトをJSON形式にしたんだけど、Dateオブジェクトの値が変わってる!!
Dateオブジェクト: 2017-02-14 10:00:00
JSON.stringify変換後:2017-02-14T01:00:00Z
値も変わってるし、”T”と”Z”が入ってる?!
なんだこれ?と思って調べるとQiitaに原因が記載されていました。
JavaScriptのDateはJSON.stringify()したときにISO 8601形式で文字列にされることが分かった
なんということでしょう!
このISO8601形式はタイムゾーンをUTC(協定世界時)にしてしまうそうです。
我々が普段使っている、GMT(グリニッジ標準時)ではないんです。
GMTをUTCに変えちゃうんです。
解決方法
世の中には同じ問題で困っている人がいっぱいいます。
そして、解決している人もいます。
下記サイトの解決方法が一番シンプルで導入しやすかったです。
私の現在の開発現場でも導入し、動作確認済みです。
JSON.stringifyの第2引数を使って出力結果(JSON)を整形する – GUNMA GIS GEEK
【 解決方法イメージ】
gistf09a45eda97d119e318e9a7f5c9bd74e
最後に
画面からサーバーに渡ってくる日付がずれている原因が”JSON.stringify“であることに気づくまでずいぶん時間を使いました。
原因が分かれば解決はすぐですね!!
コメント