给定一个时区字符串,如何在JS中将日期对象设置为该TZ



我有此代码:

toolFilters.filter('dateAccordingToTimeZone', function($filter) {
    // Gets the number of milliseconds pass from 1970 and convert it to time according to given timezone, currently
    // supported “Asia/Jerusalem” and “America/Los_Angeles”
    return function(milliSeconds, timeZoneId) {
        if (milliSeconds == 0) {
            return "";
        }
        var d = new Date();
        var n = d.getTimezoneOffset();
        if ((timeZoneId == "Asia/Jerusalem") || (timeZoneId == "IL")) {
            return $filter('date')(milliSeconds, 'MMM d, y H:mm:ss', '+0200');
        } else if ((timeZoneId == "America/Los_Angeles")) {
            return $filter('date')(milliSeconds, 'MMM d, y H:mm:ss', 'PST');
        } else {
            return $filter('date')(milliSeconds, 'MMM d, y H:mm:ss');
        }
    };
})

我尝试使其更通用,因此我创建了一个Date()对象,但是我无法使用给定的TZ string设置其TZ。我该怎么办?

然后我想使用getTimezoneOffset()

提供时区字符串是有效的IANA时区标识符,并且支持INTL对象,您可以使用适当的语言代码使用 date.prototype.toleotype.toleotype.toleotype.tolecalestring

var d = new Date();
console.log(d.toLocaleString('en-GB', {timeZone:'America/Los_Angeles', timeZoneName:'short'}));
console.log(d.toLocaleString('en-GB', {timeZone:'Asia/Jerusalem', timeZoneName:'short'}));
console.log(d.toLocaleString('en-GB', {timeZone:'UTC', timeZoneName:'short'}));

否则,您需要使用库。编写自己的功能以支持所有区域,时区和日光节省班次可能是不合理的,尽管如果您想这样做,则可以自由使用IANA时区数据库。

tldr;

偏移仅仅是当地时间(但这是确定的(和UTC之间的差异。时区是观察相同时区偏移的区域。该地区和偏移通常由某些行政机构(例如地区或国家政府(决定。

一个特定的地方可能位于一个以上的时区,并且根据日期,有多个偏移量,例如澳大利亚悉尼使用澳大利亚东部标准时间(AEST(,在冬季和澳大利亚东部日光时间(AEDT(中为UTC 1000,在夏季为UTC 1100,因此有两个不同的偏移和两个不同的时区。澳大利亚布里斯班全年都使用Aest,因此一个偏移和一个时区。澳大利亚珀斯(Perth(,不时地节省了日光。诺福克岛(Norfolk Island(从1951年的 11:12更改了偏移,然后 1030转变为2015年的 11:00,并观察到了1970年代的夏令。

尽管IANA名称已成为em de emabo 标准,但没有命名时区的标准。尽管可以根据夏季和冬季的偏移进行合理的猜测,但在大多数情况下都是正确的(但是在一般情况下必须正确的情况下,这是不正确的(,但也无法可靠地确定时区。。

通常,使用UTC(零偏移(交换日期,仅用于显示目的进行调整。这可能会创建应忽略偏移的问题,例如生日。2018年1月1日上午04:30出生的人在纽约说,他们没有出生于2017年12月31日,尽管那是当时他们出生的日期。

最新更新