概要
javascriptでyyyy/mm/dd。
年月日の各要素を別で取ってきて整形してガッチャンコしたり、toLocaleDateString()を呼んで分割してゼロ埋めしてまたくっ付けたりといったのがよくあるやり方だけれど、どうにも野暮ったいというかもっと短く書けんものかねと常々思っていた。
そこで業務中の暇にあかせて、じゃあどれだけ短く書けるんだという一人コードゴルフ大会を障害対応に追われる同僚を横目に敢行。
以下で動作確認済
●Microsoft Edge ver:124.0.2478.80
●Google Chrome ver:124.0.6367.119
結論
ワシの中での暫定キング
const date = new Date().toLocaleString(NaN, {dateStyle:'short'});
console.log(date);
// ワンライナー
console.log(new Date().toLocaleString(NaN,{dateStyle:'short'}));
// 64bytes! shortをmediumとしても結果は同じになるようだ
// 本当ならちゃんとロケールに'JP'を指定してやる必要あるかな
試行錯誤
当初の戦略はtoLocaleDateString()を使ってのアプローチだった。
このメソッドはスラッシュ区切りの年月日を良い感じに返してくれるものだが、パディングされてないのがやや不満。
const date2 = new Date().toLocaleDateString().split('/').map(i=>i<10?'0'+i:i).join('/');
console.log(date2);
// padStartを使った方が可読性的には優か
その後、そういえば引数にフォーマットとか指定できたっけと思い出し色々調べる。
const options = {year:'numeric', month:'2-digit', day:'2-digit'};
const date3 = new Date().toLocaleDateString('ja-JP', options);
console.log(date3);
寄り道しつつ……
const date4 = new Date().toLocaleDateString('SV').replaceAll('-', '/');
console.log(date4);
結論に至ったのである。
最後に
挑戦者募集、もっと短く書けるという者あれば。
フォーマットについては暇なときにもっと調べてみたい、"R6/5/5"みたいに元号返せるとか初めて知ったわ
console.log(new Date().toLocaleDateString("ja-JP-u-ca-japanese"));// R6/5/5
しかしDate周りのメソッドはややこしいのが多い……