0

以下のコードは、タイムゾーン/場所によって動作が異なります。

インドでは私のデスクで完璧に動作します

var sdate =  new Date("2013-12-12");
document.write(sdate)

以下のように表示されます

2013 年 12 月 12 日木曜日 05:30:00 GMT+0530 (インド標準時)

どちらが正しい。

ただし、米国のクライアントのサーバーにホストするときに同じコードを実行すると、次のように表示されます

2013 年 12 月 11 日水曜日 16:00:00 GMT-0800 (太平洋標準時)

クライアントのホストで日付を正しく表示するにはどうすればよいですか?

前もって感謝します

4

1 に答える 1

0

JavaScript には現在、時刻のない日付を表す組み込みの標準オブジェクトがありません。このオブジェクトを使用するときはDate、その名前にかかわらず、他の言語の呼び出しに近い「日付と時刻」オブジェクトと考える必要がありますDateTime。提供しなくても、暗黙の時間コンポーネントが常に存在します。

オブジェクトのコンストラクターには、Date渡す引数によって異なるいくつかの異なる形式があります。文字列を渡すと、その文字列を解析しようとします。ただし、文字列に含まれる内容によって効果が異なり、実装によって異なる場合があります。

例えば:

// This will be parsed as UTC at midnight (but doesn't work in IE8)
new Date("2013-05-31")

// This will be parsed as local time in Chrome, and cause "Invalid Date" in IE
new Date("2013-05-31 00:00:00")

// This will be parsed as local time at midnight, and usually works in all browsers, but is not standardized.
new Date("2013/05/31")

その最後のものは受け入れられるかもしれませんが、それでも私には怪しいようです. ほとんどの人はその形式を使用せず、mm/dd/yyyy または dd/mm/yyyy を入力する可能性が高く、文化や入力する日付によってはあいまいになる可能性があります。

Dateおそらく、数値引数をコンストラクターに渡す方がよいでしょう:

new Date(2013, 4, 31)

これを行うと、月は 1 ~ 12 ではなく 0 ~ 11 で実行されることに注意してください。を渡したので4、これは 5 月を表します。これはエラーの一般的な原因であるため、注意して監視してください。

また、 Moment.jsなどのライブラリを使用すれば、ブラウザのバリエーションをすべて排除して、必要な任意の形式をサポートできることにも言及しておく必要があります。例えば:

// This will be parsed as local time
moment('2013-05-31','YYYY-MM-DD')

// This will be parsed as UTC
moment.utc('2013-05-31','YYYY-MM-DD')

他にも多くの優れた日付/時刻ライブラリがあります。古いブラウザーをサポートする必要がある場合は、Moment が適しています。ただし、最新のブラウザーをほとんどサポートしている場合は、代わりにLuxonまたはdate-fnsを試してください。

于 2013-05-31T14:44:16.910 に答える