我们有一个存储时间戳的应用程序,用于记录时间表(即10/03/2019 0800)。该时间戳记以UTC时间保存到数据库中。使用日期戳时,我们会将其转换为本地时间。当夏令时到来时,我们将转换日期,这似乎是一个小时的时间。有没有一种方法可以始终将UTC DateTime转换为本地时间戳而不涉及夏令时?
var convertToLocalDateTimeStamp = function (datetime) {
// ignore param for now
var d = new Date("2019-01-01T08:00:00"); // UTC saved time
var newDate = new Date(d.getTime() + d.getTimezoneOffset() * 60 * 1000);
var offset = d.getTimezoneOffset() / 60;
var hours = d.getHours();
newDate.setHours(hours - offset);
// should be 3pm central time, but appearing as 2pm due to daylight savings
return newDate;
};
我刚刚使用JS小提琴尝试了您的代码,以检查getTimezoneOffset是否根据给定的日期/时间(而不是当前日期/时间)计算时区偏移,并且成功。我能够同时运行标准时间和夏令时。检查系统设置的时区和时区,确保正确。在另一个本地系统上尝试此代码。与您的本地设置有关。
对于第二个问题,您是对的,将实际日期/时间调整为偏移量以查看本地时间不是一个好习惯。有关详情,请参见How to initialize a JavaScript Date to a particular time zone。