web-dev-qa-db-ja.com

ユーザーのタイムゾーンに関係なく、常に東部標準時に日付を設定する方法

UNIX時間でサーバーから日付が与えられました:1458619200000

注:「重複」としてマークした他の質問は、UNIX TIMEから取得する方法を示していません。javascriptの特定の例を探しています。

ただし、タイムゾーンに応じて、2つの異なる結果が得られることがわかりました。

d = new Date(1458619200000)
Mon Mar 21 2016 21:00:00 GMT-0700 (Pacific Daylight Time)

//ここでコンピューターを東部標準時間に設定すると、別の結果が得られます。

d = new Date(1458619200000)
Tue Mar 22 2016 00:00:00 GMT-0400 (Eastern Daylight Time)

それでは、どのように日付を表​​示できますか:1458619200000 ...コンピューターのタイムゾーンに関係なく、常に東部標準時(3月22日)になりますか?

9
foreyez

Javascriptで getTimezoneOffset() 関数を使用すると、タイムゾーンオフセットを簡単に処理できます。例えば、

var dt = new Date(1458619200000);
console.log(dt); // Gives Tue Mar 22 2016 09:30:00 GMT+0530 (IST)

dt.setTime(dt.getTime()+dt.getTimezoneOffset()*60*1000);
console.log(dt); // Gives Tue Mar 22 2016 04:00:00 GMT+0530 (IST)

var offset = -300; //Timezone offset for EST in minutes.
var estDate = new Date(dt.getTime() + offset*60*1000);
console.log(estDate); //Gives Mon Mar 21 2016 23:00:00 GMT+0530 (IST)

ただし、背面に表示されるロケール文字列は変更されません。この回答のソースは this post にあります。お役に立てれば!

14
Shekhar Chikara

Moment.js( http://momentjs.com/timezone )はあなたの友達です。

あなたはこのようなことをしたい:

var d = new Date(1458619200000);
var myTimezone = "America/Toronto";
var myDatetimeFormat= "YYYY-MM-DD hh:mm:ss a z";
var myDatetimeString = moment(d).tz(myTimezone).format(myDatetimeFormat);

console.log(myDatetimeString); // gives me "2016-03-22 12:00:00 am EDT"
6

夏時間の場合、東部時間はUTCから4時間遅れるため、オフセットは-4x60 = -240分になります。したがって、デイライトがアクティブでない場合、オフセットは-300になります。 easternTimeOffset変数値は、ここで注意すべき重要なポイントです。添付の画像でこのコードの動作をご覧ください。

       var offset = new Date().getTimezoneOffset();// getting offset to make time in gmt+0 zone (UTC) (for gmt+5 offset comes as -300 minutes)
        var date = new Date();
        date.setMinutes ( date.getMinutes() + offset);// date now in UTC time

        var easternTimeOffset = -240; //for dayLight saving, Eastern time become 4 hours behind UTC thats why its offset is -4x60 = -240 minutes. So when Day light is not active the offset will be -300
        date.setMinutes ( date.getMinutes() + easternTimeOffset);

You can see this code in action here in this image

0
Hasan Badshah