こんにちは、7月から案件が変わり、残業多め、スケジュール管理がずさんな会社にあたってしまい、
テンションダダ下がりな根本です。
いつもはIT関連の気になった記事を紹介していますが、
今回は現在の案件の対応で少しはまってしまった話を自分の備忘+同じ人がいる場合の共有として書こうと思います。
今回対応した内容はDB:Aから取得したデータをDB:Bへ登録するというものです。
文章にしてしまうと簡単なのですが、
なぜ私がはまってしまったのかというと、
既存コードでJSON形式にしてリクエストで取得結果を投げる方法で記載がされており、
JSON.stringify()の記述は変更できないため、どのようにしたらタイムゾーンが変換されずに、
取得した結果をinsertできるのか。
めちゃくちゃ調べました。
おそらく、スキルのある方はすぐに方法が思いつくのかもしれませんが、
たいしてスキルのない私はだいぶはまりました。。。
【検索ワード】
JSON.stringify
JSON.stringify 日付
タイムゾーン
nodejs 日付
などなど、、、、
私の環境がnodejsでの開発だったので、nodejsでの実装をどうすればよいのか、
本当に彷徨いました。
・replacerを使う
・以下の記述を使う
Date.prototype.toJSON=function(){return this.getFullYear()+‘–‘+(‘0‘+(this.getMonth()+1)).slice(–2)+‘–‘+(‘0‘+this.getDate()).slice(–2)+‘T‘+(‘0‘+this.getHours()).slice(–2)+‘:‘+(‘0‘+this.getMinutes()).slice(–2)+‘:‘+(‘0‘+this.getSeconds()).slice(–2)+‘.000Z‘;}
いろいろ試しましたがうまくいかず、調べた結果、
JSON.stringify()で変換される前にDate型の値を文字列にするということが共通点だと気づきました。
そこで、YYYY/MM/DD hh:mm:ss.fff形式(私の案件ではミリ秒まで必要でした)の文字列に変換してからJSON.stringify()の処理に入ることでついに解決されました。
以下のソースでJSON.stringify()に渡す値を文字列に変換し、リクエストを投げてinsert。
ソース