フリーランス チャレンジ!!

フリーランス チャレンジ!!

週休4日制に俺はなる!

【JSON】JSON.stringify ()でDateオブジェクトの日時がずれる(タイムゾーンになる?)

 f:id:ksakae1216:20170214222555p:plain

みなさん、コウタロウです!!

 

今日はタイトルについて。

 

 

Dateオブジェクトの値がずれる

画面から日付(日時)項目をAjax通信でサーバー側に渡すため、JSON.stringifyでオブジェクトをJSON形式にしたんだけど、Dateオブジェクトの値が変わってる!!

 

Dateオブジェクト: 2017-02-14 10:00:00

JSON.stringify変換後:2017-02-14T01:00:00Z

 

値も変わってるし、"T"と"Z"が入ってる?!

なんだこれ?と思って調べるとQiitaに原因が記載されていました。

 

qiita.com

 

JavaScriptのDateはJSON.stringify()したときにISO 8601形式で文字列にされることが分かった

 なんということでしょう!

 

このISO8601形式はタイムゾーンをUTC(協定世界時)にしてしまうそうです。

我々が普段使っている、GMT(グリニッジ標準時)ではないんです。

 

GMTをUTCに変えちゃうんです。

 

解決方法

世の中には同じ問題で困っている人がいっぱいいます。

そして、解決している人もいます。

 

下記サイトの解決方法が一番シンプルで導入しやすかったです。

私の現在の開発現場でも導入し、動作確認済みです。 

JSON.stringifyの第2引数を使って出力結果(JSON)を整形する – GUNMA GIS GEEK

 

【 解決方法イメージ】

gistf09a45eda97d119e318e9a7f5c9bd74e

 

最後に

 画面からサーバーに渡ってくる日付がずれている原因が"JSON.stringify"であることに気づくまでずいぶん時間を使いました。

 

原因が分かれば解決はすぐですね!!