无论用户的时区如何,如何将日期始终设置为东部时间

for*_*yez 10 javascript timezone datetime

我有一个服务器在unix时间给我的日期:1458619200000

注意:您标记为"重复"的其他问题没有显示如何从UNIX TIME到达那里.我在javascript中寻找一个具体的例子.

但是,我发现根据我的时区,我会得到两个不同的结果:

d = new Date(1458619200000)
Mon Mar 21 2016 21:00:00 GMT-0700 (Pacific Daylight Time)
Run Code Online (Sandbox Code Playgroud)

//现在我将计算机设置为东部时间,我得到了不同的结果.

d = new Date(1458619200000)
Tue Mar 22 2016 00:00:00 GMT-0400 (Eastern Daylight Time)
Run Code Online (Sandbox Code Playgroud)

那么我怎么能显示日期:1458619200000 ...总是在东部时间(3月22日),不管我的电脑的时区是什么?

She*_*ara 15

您可以使用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)
Run Code Online (Sandbox Code Playgroud)

但是,后面显示的区域设置字符串不会更改.这个答案的来源是这篇文章.希望这可以帮助!

  • 这没有考虑夏令时。例如,EST 冬季为 -5 小时,夏季为 -4 小时 (6认同)

Ash*_*han 7

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"
Run Code Online (Sandbox Code Playgroud)

  • 我不想使用时刻 (9认同)
  • 是的,但是这给我下载库,将其添加到我的源代码,更改我所有的现有代码以使其适应等添加了一个问题,与我正在寻找的相反:这是我可以使用的两行JavaScript不知道。 (2认同)
  • 对于我的代码库,moment + moment-timezone已增加了500kb的应用程序大小,因为它不可摇树。如果您想要较小的捆束尺寸,力矩可能不是最佳的解决方案。 (2认同)