この記事を作った動機
Date クラスの仕様で、引っかかった部分があるのでそのことについて記録をする。具体的には、getMonthメンバ関数を使おうとしたとき、思っているのとは違う結果になったというのがある。
内容
Date クラスの getMonth関数は、MDNに書かれているように、ゼロからスタートする値である。1月は、この関数の戻り値として、0 と表現され、12月は 11 として表現される。
The return value of getMonth() is zero-based, which is useful for indexing into arrays of months, for example:
具体的に引っかかったところ
createDateStringという関数を作っていて、文字列として"YYYY/MM/DD"のような形式で今いつかということを返すようにしようとしていた時、月の部分が一つ前になっていることに気づいた。
createDateStringを実行した日を2025/10/29として、問題のあるコードと、そうでないコードの違いを以下に示す。
問題のコード
帰ってくる戻り値は、2025/9/29。
export function createDateString(){
// yyyy/mm/dd
const currentDate = new Date()
let dateString = ""
dateString += String(currentDate.getFullYear()) + "/"
dateString += String(currentDate.getMonth()) + "/"
dateString += String(currentDate.getDate())
return dateString
}
修正したコード
帰ってくる戻り値は、2025/10/29。
export function createDateString(){
// yyyy/mm/dd
const currentDate = new Date()
let dateString = ""
dateString += String(currentDate.getFullYear()) + "/"
dateString += String(currentDate.getMonth() + 1) + "/"
dateString += String(currentDate.getDate())
return dateString
}
参考にしたサイトとか
- Date - JavaScript | MDN
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date (2025年10月29日)