web-dev-qa-db-ja.com

JavaScript Intl.DateTimeFormat.format vs Date.toLocaleString

特定のタイムゾーン、ロケール、表示オプションを使用して、日付を表す文字列を印刷したいと思います。

これらのどれを使用すべきですか?

  1. Intl.DateTimeFormat.prototype.format
  2. Date.prototype.toLocaleString()

同じ結果を返すようです。

const event = new Date(1521065710000);

const options = {
  day: 'numeric',
  month: 'long',
  weekday: 'short',
  hour: 'numeric',
  minute: 'numeric',
  timeZoneName: 'short',
  timeZone: 'America/Los_Angeles',
};

console.log(event.toLocaleString('en-US', options));
// "Wed, March 14, 3:15 PM PDT"

console.log(new Intl.DateTimeFormat('en-US', options).format(event));
// "Wed, March 14, 3:15 PM PDT"
11
mark

これは、意見に基づいたトピック外であることに非常に近いが、とにかくここに行く。

これらのどれを使用すべきですか?

Date.prototype.toLocaleStringはもともと実装依存であり、ブラウザ間でかなり異なっていました。 Intlオブジェクトのサポートが追加されたとき(ECMAScript 2015、ed 6)、toLocaleStringは同じオプションをサポートできました。サポートはECMA-262によって義務付けられているわけではありませんが、おそらく現在のすべての実装でサポートされています。

これは許可された実装のばらつきを除去しなかったことに注意してください。言語、地域、方言に基づいたいくつかのフォーマットオプション(および IANAタイムゾーンデータベース 識別子と値に基づくタイムゾーンオプション)を提供しただけです。

Intlオブジェクト(したがってtoLocaleString)は ECMA-402 に基づいており、厳密にはフォーマットを指定していないため、まだ実装の余地があります異なる。最大の違いは、タイムゾーン名(標準ではない)とコンマ、スペースなどの配置です。

ただし、最も実用的な目的のために、Intlオブジェクトを使用するか、toLocaleStringを使用するかはあなた次第ですが、どちらかを優先する技術的な理由はないと思います。両方の結果は特定の実装に対して同一である必要がありますが、結果の文字列が実装間でexactly同一であることや特定の実装に準拠することを期待しないでください指定された形式 BCP 47言語タグ

8
RobG

他の人が発行したポイントに加えて、default format(options)との違いを見ました:

const event = new Date(1521065710000);

//const options = ...

console.log(event.toLocaleString('en-US' /*, options*/));
// "3/15/2018, 1:45:10 AM"

console.log(new Intl.DateTimeFormat('en-US' /*, options*/).format(event));
// "3/15/2018"

Chrome v72。

2
Mir-Ismaili

国際化API サポートされていません すべてのブラウザーでまだ-特にIE10以下およびUCブラウザーAndroid 11.8。これらのブラウザーをサポートする場合は、 ToLocaleString(国際化APIがサポートされていない場合でも、ToLocalStringが返すものは実装依存です。)

Intl.DateTimeFormat.prototype.formatは、日付と時刻の大きなグループをフォーマットするために設計されています-毎回ロケールとオプションを設定するのではなく、一度それらを設定してから、結果のフォーマット関数を使用します。

2
Sora2455