我使用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
我建议使用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格式,则这是必需的。第三个参数是任何有效的时区标识符。