Angular:将时间戳转换为特定时区,尊重夏令时
Posted
技术标签:
【中文标题】Angular:将时间戳转换为特定时区,尊重夏令时【英文标题】:Angular: convert timestamps to specific timezone, respecting daylight saving time 【发布时间】:2021-11-27 12:36:04 【问题描述】:在我的 Angular 应用程序中,我需要显示东欧时间的时间戳(以 Unix 纪元毫秒数给出)。以下几乎是正确的,但忽略了夏令时:
timestamp | date:'dd.MM.yyyy HH:mm:ss':'UTC+2'
我尝试将UTC+2
替换为EET
,但这只会导致所有时间都转换为用户的本地时区(例如省略参数时)。时间戳可以来自任何日期,因此它应该考虑 DST 在那个时候是否有效,而不仅仅是在代码运行时。欧洲的夏令时从 3 月的最后一个星期日持续到 10 月的最后一个星期日。
【问题讨论】:
是timestamp
always UTC 吗?
是的,以毫秒为单位的 Unix 时间。
【参考方案1】:
如果给定日期在 CEST(中欧夏令时)期间,此功能将为您提供信息:
lastSunday(year, month)
var date = new Date(year, month, 1, 12);
let weekday = date.getDay();
let dayDiff = weekday===0 ? 7 : weekday;
let lastSunday = date.setDate(date.getDate() - dayDiff);
return date;
isCEST(d: Date): boolean
let year = d.getFullYear();
let startCET: Date = this.lastSunday(year, 3);
let endCET: Date = this.lastSunday(year, 10);
return !(startCET < d && d < endCET);
offset(d: Date): string
return isCEST(d) ? 'UTC+2' : 'UTC+1'
现在您可以将管道更改为:
timestamp | date:'dd.MM.yyyy HH:mm:ss': offset(timestamp)
【讨论】:
谢谢!不过,您似乎忘记包含 lastSunday 函数。 @laurt 很抱歉。刚刚包含它...以上是关于Angular:将时间戳转换为特定时区,尊重夏令时的主要内容,如果未能解决你的问题,请参考以下文章
在 php 中从 EDT 转换为 GMT+05.30 时区以在 mysql 数据库中输入时间戳