我有一个日期(以UTC毫秒为单位),我在页面上显示(AngularJS 1.4.0),并且用户希望在东部时间看到它,而不管时区在他们的电脑上设置。调整为夏令时的日期过滤器
我使用日期过滤器,并从documentation我看到
$filter('date')(date, format, timezone)
时区将用于格式化。它了解UTC/GMT和美国大陆时区的缩写,但对于一般用途,请使用时区偏移量,例如
'+0430'
(格林尼治子午线以东4小时30分钟)如果未指定,浏览器的时区将使用。
使用时间戳从今天起,如果我使用类似
{{ record.Timestamp | date:'HH:mm:ss.sss':'EST' }}
,因为我希望它写入时间,但我想我会用一个小时处于关闭状态时,DST来临时。我也可以指定'EDT'
,它会提前一个小时的时间,但是有没有可以使用的时区缩写,意思是“Eastern”,并且使用日期本身来确定是使用EST还是EDT?或者我需要检查日期并自己创建一个偏移量:取决于日期是-0500/EST还是-0400/EDT? (它看起来像timezone
只能是一个字符串,而不是一个函数,所以这会使我的自动检测复杂化)。
任何人想要将显示硬编码为EST或EDT似乎都不太可能 - 他们更希望将时区调整为DST。
问题在于夏时制没有普遍遵守。否则,您可以从一月的日期和七月再次检查'getTimezoneOffset()',并比较当前日期的偏移量,然后适当地使用'EDT'或'EST'。但是,如果代码将运行在亚利桑那州或夏威夷州,那么这是行不通的。 –
这听起来更像是一个问题,可能的解决办法比原来的问题,对不对?我可能会尝试类似的东西来确定DST,现在我们不会有任何用户在这些领域,但_永远不会说_... – Danny
取决于你认为的“原始问题”:)。对我而言,真正的问题是日期过滤器使用美国时区缩写,而不是更为标准的[IANA列表](https://www.iana.org/time-zones/repository/tz-link.html),不指定DST。我赞同Yaser对MomentJS的回答。 –