提问者:小点点

如何告诉JavaScript日期从哪里取TimezoneOffset?


我使用new Date().gettime()将日期字符串从1970年起传递到毫秒。

问题是日期字符串上不包含时区。他们是英国人,所以时区将是GMT或GMT+1取决于日期...

当我在前端(Chrome)或后端(Node.js)中使用此技术时。所取时区为英国时区(GMT或GMT+1,视日期而定)。我认为这是从操作系统中提取的。

但是,在使用Node.js服务器时,我被告知该服务器配置为UTC格式...时区总是格林尼治标准时间,导致英国夏季时间出现错误。

有没有什么方法告诉date从操作系统中获取时区而不更改服务器配置?

示例:

var aDate = new Date('2016-06-23 10:15:0');
var timestamp = aDate.getTime();

以防万一我的解释不清楚:

// Executed on 28-06-2016

// In the browser (in London)
new Date().getTimezoneOffset();                            // -60
new Date('28-06-2016 11:11:11').getTimezoneOffset();       // -60
new Date('28-01-2016 11:11:11').getTimezoneOffset();       // 0

// In the Node.js server I am forced to use, which is configured to use UTC
new Date().getTimezoneOffset();                            // 0
new Date('28-06-2016 11:11:11').getTimezoneOffset();       // 0
new Date('28-01-2016 11:11:11').getTimezoneOffset();       // 0

// Ideally, I would like to have the output I get in the browser when I run the code in the UTC Node.js server

共1个答案

匿名用户

我建议使用Moment Timezone来实现这一点,因为如果没有库,实现起来会不必要的复杂。若要在给定时区中从给定日期获取以毫秒为单位的UTC,可以执行以下操作:

const moment = require('moment-timezone');

function londonTimeToUTC(dateString) {
  return moment.tz(dateString, 'DD-MM-YYYY HH:mm:ss', 'Europe/London').valueOf();
}

console.log(londonTimeToUTC('28-06-2016 11:11:11')); // 1467108671000
console.log(londonTimeToUTC('28-01-2016 11:11:11')); // 1453979471000

传递给moment.tz()的第二个参数是一个格式字符串,如果日期字符串不是ISO格式,则这是必需的。第三个参数是任何有效的时区标识符。