2017-06-22 2 views
2

私は、ユーザのロケールに応じてYYYY-MM-DDの形式で日付をフォーマットするために次のコードを使用する半古いコードベースを探しています:Firefoxのロケールに応じて "YYYY-MM-DD"の日付文字列をフォーマットする

new Date('2000-01-01')は日時を返すため toLocaleDateStringは、ユーザーのローカルタイムゾーンを使用しながら、上記の米国内のユーザーのために "December 31, 1999"を返しますので、
new Date('2000-01-01').toLocaleDateString(navigator.language) 

しかし、これは、UTCに(時間は午後12時です)Firefoxで動作しません。

これはブラウザ間でこれを行う上で安全な方法ですか? 1つ以上の余分な依存関係なしで行うことは可能ですか?

+0

あなたは何を見たいですか?それはフォーマットの問題です – FieryCat

+0

恐らくhttps://stackoverflow.com/questions/439630/how-do-you-create-a-javascript-date-objectの複製です-with-a-set-time-without-using-as –

+0

私は '2000年1月1日 'のようなものを見ることを期待しています。 – beta

答えて

1

あなたがその日付文字列にタイムスタンプを追加する場合は、ローカルタイムゾーンで、その時点で初期化しているように見える:

new Date('2000-01-01T00:00:00'); 

私はChromeとFirefoxの両方でこれを試してみましたが、あなたが望むように動作するようです。ただし、文字列を含む日付を作成することは避けてください。異なるブラウザ間で一貫して動作するという保証はありません。それは、その部分に日付を破る数値としてそれを解析し、そのように日付を初期化すると良いでしょう:

var dateParts = '2000-01-01'.split('-').map(Number); 
new Date(
    dateParts[0], 
    dateParts[1] - 1, // month is base 0 
    dateParts[2] 
); 

更新:は、日付文字列にタイムスタンプを付加しても、Safariが前提としてUTCが判明しますこれはそれを解析し数値を使って日付を初期化するもう一つの理由です。これは常にローカルのタイムゾーンを使用するためです。

+0

@betaですが、' .toLocaleDateString() 'を実行するとどうなりますか?アウトプットが重要なのはどこですか? –

+0

はい。コメントを削除して申し訳ありません。私が間違っていることを直ちに理解した。 – beta

関連する問題