我有此代码:
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日,尽管那是当时他们出生的日期。