Javascript 中的 UTC 偏移量(以秒为单位)

UTC Offset in Seconds to Date in Javascript

我一直在使用 api returns UTC 时间偏移量,如“7000”秒,我试图传递到像“2020-01-01T01”这样的日期:56:40.000Z' 或像 '1:12:03 PM' 这样的时间

我已经试过了,但是 returns 一个错误的日期,好像我给它一个以毫秒为单位的值


var utcSeconds = 7000;
var d = new Date(7000); 

console.log(d);  // 1970-01-01T00:00:07.000Z


我在网上看到的都是相反的程序或不同的程序, 希望你能帮助我,谢谢!

实现此目的的一种方法是找到与您从 API 获得的 UTC 偏移相匹配的规范 IANA 时区。这些看起来像 'Etc/GMT-9' 并且具有固定的 UTC 偏移量。 (参见 List of tz database timezones

一旦我们有了这个时区,我们就可以使用 Date.toLocaleTimeString() 来格式化当地时间。

我们可以将所有这些封装在一个函数中 formatLocalTime(),它将显示该 UTC 偏移量的时间。

function getIANATimezone(utcOffsetSeconds) {
    const utcOffsetHours = Math.abs(utcOffsetSeconds / 3600);
    const sign = (utcOffsetSeconds < 0 ) ? '+': '-';
    return `Etc/GMT${sign}${utcOffsetHours}`;
}

function formatLocalTime(utcOffsetSeconds) {
    const timeZone = getIANATimezone(utcOffsetSeconds);
    return new Date().toLocaleTimeString('en-US', { timeZone });
}

const utcOffsets = [32400,-25200, 0, 3600];
console.log('UTC Offset(s)\tLocal time')
for(let utcOffset of utcOffsets) {
    console.log(utcOffset + '', '\t\t', formatLocalTime(utcOffset))
}
.as-console-wrapper { max-height: 100% !important; }