Intl.DateTimeFormatの例

const dateObj = new Date(2012, 2, 4, 5, 6, 7, 8);
Intl.DateTimeFormat('ja', { dateStyle: 'full', timeStyle: 'full' }).format(dateObj);

第1引数(locales引数)

jaen-USなど言語コードを指定します。

言語コード言語
ja日本語
en-USアメリカ英語
ko-KR韓国語
zh-Hans中国語(繁体字)
zh-Hant中国語(簡体字)

詳しくはJavaScriptにおける言語コード指定の詳解をご覧下さい。

第2引数(options引数)

言語以外のオプションをオブジェクト形式で指定します。

{
dateStyle: 'full',
timeStyle: 'full'
} // 例

以下では、言語コードがjaとen-USの場合についての出力を載せます。

numberingSystem

番号表記法を指定します。言語コード指定でのu-nu-何かと同じですが、それよりもこのプロパティ値が優先されます。

calendar

紀年法を指定します。言語コード指定でのu-ca-何かと同じですが、それよりもこのプロパティ値が優先されます。

localeMatcher

第1引数で指定した言語コードと、実装が対応している言語コードリストとのマッチングアルゴリズムを指定します。初期値はbest fitです。

指定値説明
lookupBCP47に基づいたアルゴリズムを使います
best fitlookupアルゴリズムと比べて、指定した言語コードにより適する言語設定を探します

dateStyle

年月日、指定によっては曜日も出力します。

指定値ja出力en-US出力
short2012/03/043/4/12
medium2012/03/04Mar 4, 2012
long2012年3月4日March 4, 2012
full2012年3月4日日曜日Sunday, March 4, 2012

timeStyle

時分、指定によっては秒とタイムゾーン名も出力します。

指定値ja出力en-US出力
short5:065:06 AM
medium5:06:075:06:07 AM
long5:06:07 JST5:06:07 AM GMT+9
full5時06分07秒 日本標準時5:06:07 AM Japan Standard Time

dayPeriod

各言語での表現に合わせて時の表現をするのですが、動作しませんでした。 動作するようになれば、おそらくhttps://github.com/tc39/ecma402/pull/346のような出力になるでしょう。

timeZone

指定されたタイムゾーンでの時刻を出力します。指定できる値は3文字のタイムゾーンIDまたはIANA指定のタイムゾーンIDです。規定値は、そのOSまたはブラウザが設定しているタイムゾーンに基づきます。

const dateObj = new Date(2012, 2, 4, 5, 6, 7, 8);
const options = { hour: 'numeric', minute: 'numeric', timeZone: 'Egypt', timeZoneName: 'long' };
new Intl.DateTimeFormat('ja', options).format(dateObj);
// 出力 '4:06 中国標準時'

hour12

午前・午後の概念がある12時制にするかを指定します。

指定値説明
true12時制
false24時制

規定では言語によって異なるため、それでは扱いにくいという場合には使うのもありでしょう。第一引数で指定する言語コードのサブタグ(u-hc-何か)やhourCycleプロパティよりも優先されます。

hourCycle

hour12プロパティに似ていて、時制の指定です。指定値は言語コード指定でのu-hc-何かと同じで、以下の通りです。

指定値説明
h11午前(午後)は0時から始まり、11時台まで
h12午前(午後)は12時から始まり、次に1時、そして11時台まで
h230時から始まり、11時台まで
h2424時から始まり、次に1時、そして23時台まで

第一引数で指定する言語コードのサブタグ(u-hc-何か)よりも優先されます。

formatMatcher

weekday, year, month, day, hour, minute, secondプロパティの扱い方に関わるアルゴリズムです。このプロパティを指定しなかった場合の規定値はbest fitです。

best fitのアルゴリズムは実装依存なので、出力の統一性に不安がある場合はbasic指定も良いでしょう。

指定値説明
basicECMAScript仕様に基づいたアルゴリズムを使います
best fit実装に依存したアルゴリズムを使います

era

紀年を出力します。

指定値ja出力en-US出力
narrowAD2012年3月4日3 4, 2012 A
short西暦2012年3月4日3 4, 2012 AD
long西暦2012年3月4日3 4, 2012 Anno Domini

calendarプロパティや言語コードのu-ca-何かを使うと、西暦ではない別の紀年法で出力されます。

year

年を出力します。

指定値ja出力en-US出力
numeric2012年2012
2-digit12年12

month

月を出力します。

指定値ja出力en-US出力
numeric3月3
2-digit03月03
narrow3月M
short3月Mar
long3月March

day

日を出力します。

指定値ja出力en-US出力
numeric4日4
2-digit04日04

weekday

曜日を出力します。

指定値ja出力en-US出力
narrowS
shortSun
long日曜日Sunday

narrowを指定した場合の英語出力は、火曜日も木曜日もTになってしまいますので、曜日で区別したい場面では他の指定値を使いましょう。

hour

時を出力します。

指定値ja出力en-US出力
numeric5時5 AM
2-digit05時05 AM

minute

分を出力します。

指定値ja出力en-US出力
numeric66
2-digit66

second

秒を出力します。

指定値ja出力en-US出力
numeric77
2-digit77

fractionalSecondDigits

ミリ秒を指定した桁数(1~3)で出力します。指定値の小数点以下は切り捨てされます。 2020年10月22日現在、FirefoxやMac Safariでは無視され、Chromeでも1未満4以上で指定するとエラーになってしまいます。

これと併せてminuteプロパティを指定すると、secondプロパティを指定しなくても秒が出力されます。

const dateObj = new Date(2012, 2, 4, 5, 6, 7, 8);
Intl.DateTimeFormat('ja', { minute: 'numeric', fractionalSecondDigits: 3 }).format(dateObj);
// 出力:'06:07.008'

timeZoneName

タイムゾーン情報を出力します。

指定値ja出力en-US出力
short2012/3/4 JST3/4/2012, GMT+9
long2012/3/4 日本標準時3/4/2012, Japan Standard Time

時分秒はセットで

実用的には、オプションで時と分と秒を併せて指定するのが良いでしょう。

hour + minute

options = { hour: string, minute: string }; // 時と分
指定値ja出力en-US出力
numeric5:065:06 AM
2-digit05:0605:06 AM

hour + minute + second

options = { hour: string, minute: string, second: string }; // 時分秒
指定値ja出力en-US出力
numeric5:06:075:06:07 AM
2-digit05:06:0705:06:07 AM

参考リンク