そのままtoString()をすると色々余計な文字がついてくる
※Dateの第二引数(Month)は1月=0となる。例えば2月なら「1」を設定する。
const d = new Date(2024, 1, 10)
console.log(d.toString())
結果
Sat Feb 10 2024 00:00:00 GMT+0900 (日本標準時)
よく見かける方法
const d = new Date(2024, 1, 10)
const s = `${d.getFullYear()}/${d.getMonth() + 1}/${d.getDate()}`
console.log(s)
結果
2024/2/10
ただ毎回これを書くのは面倒……
Date.prototype.toStringを上書きしてみる
Date.prototype.toString = function get() {
return `${this.getFullYear()}/${this.getMonth() + 1}/${this.getDate()}`
}
これでインスタンスをtoString()するだけで目的の形式が取得できる。
const d1 = new Date(2024, 1, 10)
console.log(d1.toString())
const d2 = new Date(2025, 2, 15)
console.log(d2.toString())
const d3 = new Date(2030, 5, 30)
console.log(d3.toString())
結果
2024/2/10
2025/3/15
2030/6/30
prototypeの上書きは標準の振る舞いを破壊します。
他の人がソースを見たときに混乱する可能性があるので、実際に使うときは注意しましょう。
ライブラリとの競合が起こる可能性もあります。
使用の際は十分に注意してください。
おまけ
実は YYYY/MM/DD を取るだけなら toLocaleDateString() を使うだけでいい。
const d = new Date(2024, 1, 10)
console.log(d.toLocaleDateString())
結果
2024/2/10
もっと早く気付けば……
追記 2024/05/15
コメントにて別の方法を教えてもらいました!
(最近はこれがベストプラクティスっぽい)
Intl.DateTimeFormat()を使う方法
const formatter = new Intl.DateTimeFormat("ja-JP", { dateStyle: "short" });
const date = new Date(2024, 1, 10);
console.log(formatter.format(date));
結果
2024/2/10
Intl.DateTimeFormatのインスタンスは生成コストが高いという情報も。
なのでMDN Web Docsにあるソースを流用すると大変なことになるかも(未検証)
使うときはインスタンス使い回すようにしたほうがいいかもしれない。
MDN Web Docs より引用
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
// toLocaleString without arguments depends on the implementation,
// the default locale, and the default time zone
console.log(new Intl.DateTimeFormat().format(date));
// → "12/19/2012" if run with en-US locale (language) and time zone America/Los_Angeles (UTC-0800)
こんな感じ
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
const formatter = new Intl.DateTimeFormat();
console.log(formatter.format(date));