1. ホーム
  2. javascript

[解決済み] JavaScriptの日付の書式設定方法

2022-03-16 13:48:07

質問内容

JavaScript で、日付オブジェクトを次のように表示するにはどうしたらよいでしょうか。 10-Aug-2010 ?

解決方法は?

カスタム区切りの日付フォーマットの場合、日付(または時間)を取り出す必要があります。 コンポーネントから DateTimeFormat オブジェクト(これは ECMAScript 国際化 API を作成し、手動で文字列 を、必要なデリミターで指定します。

これを行うには DateTimeFormat#formatToParts . あなたは 配列の再構築を行いますが、これは理想的ではありません。 ロケールを使用します。

{ // example 1
   let f = new Intl.DateTimeFormat('en');
   let a = f.formatToParts();
   console.log(a);
}
{ // example 2
   let f = new Intl.DateTimeFormat('hi');
   let a = f.formatToParts();
   console.log(a);
}

より良い方法は、フォーマット配列と結果の文字列を対応させることです。

function join(t, a, s) {
   function format(m) {
      let f = new Intl.DateTimeFormat('en', m);
      return f.format(t);
   }
   return a.map(format).join(s);
}

let a = [{day: 'numeric'}, {month: 'short'}, {year: 'numeric'}];
let s = join(new Date, a, '-');
console.log(s);

の部分を抜き出すこともできます。 DateTimeFormat を使用して、1つ1つ DateTimeFormat#format ただし、この方法を使う場合、3月時点では 2020年、そこには バグ ECMAScript の実装で 分と秒の先頭にゼロを付ける(このバグは、このアプローチで回避できる となります。)

let d = new Date(2010, 7, 5);
let ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d);
let mo = new Intl.DateTimeFormat('en', { month: 'short' }).format(d);
let da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d);
console.log(`${da}-${mo}-${ye}`);

日付や時刻を扱う場合、通常はライブラリ (例. moment.js , ルクソン というのも、この分野には多くの複雑な問題が隠されているからです。 の分野です。

上記のソリューションで使用されているECMAScript国際化APIは には対応していません。 IE10で ( 0.03% 2月の世界ブラウザシェア 2020).