javascript - 给定一个时区字符串,我如何在 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
. 我该怎么做?
然后我想用getTimezoneOffset()
解决方案
如果时区字符串是有效的IANA 时区标识符并且支持Intl 对象,您可以使用Date.prototype.toLocaleString和适当的语言代码,例如
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),冬季为 UTC+1000,澳大利亚东部夏令时间 (AEDT) 为夏季 UTC+1100,因此有两个不同的偏移量和两个不同的时区。澳大利亚布里斯班全年使用 AEST,因此一个偏移量和一个时区。澳大利亚珀斯不时涉足夏令时。诺福克岛将其偏移量从 1951 年的 +11:12 更改为 2015 年的 +1030 至 +11:00,并在 1970 年代观察到一年的夏令时。
尽管 IANA 名称正在成为事实上的标准,但没有命名时区的标准。也没有办法从偏移量中可靠地确定时区,尽管可以根据大多数时间正确的夏季和冬季偏移量做出合理的猜测(但在必须正确的一般情况下不会这样做) .
通常,使用 UTC(零偏移)交换日期,并进行调整仅用于显示目的。这可能会产生应忽略偏移的问题,例如生日。2018 年 1 月 1 日凌晨 04:30 在印度出生的人在纽约时不会说他们出生于 2017 年 12 月 31 日,即使那是他们出生时在纽约的日期。
推荐阅读
- python - 在 Mysql 或 Python 中很好地实现有限的值集
- node.js - Node JS Socket.io:在发出()之后是否可以等待连接另一端的回复?
- drupal - Drupal 8 Views 涉及实体参考的问题
- javascript - 用摩卡测试
- azure - 从章鱼部署到天蓝色会出现连接错误
- c# - 主窗口上的文本框必须更改 wpf 中第二个窗口上的标签内容
- svn - '/svn/xxxx/!svn/me' 的 POST:403 禁止
- android - ViewPager 和 Android Wear = 崩溃
- javascript - 变量复制错误的内容js
- sql - postgreSQL 中的 CASE 中不允许使用集合返回函数