2017-04-26 9 views
4

私のWebページにユーザーのロケールの日付と時刻を表示させたい。Javascript - Intlを使用して現在のロケールを取得して時刻と日付を表示する

ほとんどのブラウザでIntlがサポートされているようです(Can I Use Intl参照)。私はIntl.DateTimeFormat().resolvedOptions().timeZoneを使ってブラウザのタイムゾーンをうまく取得できます。私は私が行うことで、私の現在のロケールを使用して日時を放出することができるようになります望ん:私はWindows上でChromeを使用しています

var date = new Date(2017, 11, 31, 23, 59, 59); 
 
var format = new Intl.DateTimeFormat(
 
    undefined, // locale 
 
    { 
 
    year: "numeric", 
 
    month: "numeric", 
 
    day: "numeric", 
 
    hour: "numeric", 
 
    minute: "numeric", 
 
    } 
 
) 
 

 
console.log(format.format(date))

。私のWindows OSロケールは「チェコ共和国」に設定されています。私の好みのサイト言語はChromeで "Czech"に設定されていますが、ブラウザ自体は米国英語を使用するように設定されています。

これらの設定では、私のロケールがen-usのように、出力が12 Hフォーマットで行われます。プレゼンテーション言語としてチェコ語を使用するようにChromeブラウザを切り替えるとすぐに、時刻は24形式に切り替わります。

私はロケールユーザーが本当に使用できないウェブページですか、それともChrome Intl実装のいくつかのバグや不完全さですか?

答えて

0

Chromeでの信頼性が高いことがわかりました。navigator.languages[0]を使用すると、ユーザーがコンテンツを好む言語で定義されたロケールを取得できます。ブラウザーとの互換性については、Best way to determine user's locale within browserも参照してください。

function getLocale() { 
 
    return (navigator.languages && navigator.languages.length) ? navigator.languages[0] : navigator.language; 
 
} 
 

 

 
var locale = getLocale(); 
 
var date = new Date(2017, 11, 31, 23, 59, 59); 
 
var format = new Intl.DateTimeFormat(
 
    locale, 
 
    { 
 
    year: "numeric", 
 
    month: "numeric", 
 
    day: "numeric", 
 
    hour: "numeric", 
 
    minute: "numeric", 
 
    } 
 
) 
 

 
console.log(format.format(date))

まだそれが1ユーザーが作ったロケールのシステム幅広い選択肢にアクセスすることはできません恥です。

関連する問題