こんにちは

JavaScript で日時を表示する時に、1ヶ月ずれてしまうことがよくあります。

これは JavaScriptで月を取得した時に1月が0から始まる事に起因しています。

従って取得した値をそのまま使ってしまうと一か月前の数字になってしまいます(8月のつもりだったのに7月になっていたりします)。

今回はその問題に対応するための手法をメモしておきます

対策したコード

今回はデータベースなどから取得される時間情報を含む文字列をパースするところからやっていきます

covertUpdateTime(timeData) {
  const timeObj = new Date(timeData)
  return timeObj.getFullYear() + '年' + (Number(timeObj.getMonth()) + 1) + '月' + timeObj.getDate() + '日'
}

その後オブジェクトから年、月、日を取得してくるのですが、月を取得してくる時にはその値にプラス1でしたら想定通りに動きます。

この時注意しなきゃいけないのがgetMonth()した時には文字列として情報が取得されるのでNumber関数を用いて演算可能な形にキャストしてあげています。

(文字列と数字を +演算子で繋いで行って動くし、いい感じに最後はstringになるところがjsって感じw)

案外忘れてしまって、パッと作ってしまうと月がおかしくなっていることよくあるのでメモしておきました。

p.s : 合わせて読むのをおすすめ