角度:根据夏令时将时间戳转换为特定时区



在我的Angular应用程序中,我需要显示东欧时间的时间戳(以Unix epoch毫秒表示)。以下几乎是正确的,但忽略了夏令时:

{{ timestamp | date:'dd.MM.yyyy HH:mm:ss':'UTC+2' }}

我试着用EET替换UTC+2,但这只会导致所有时间都转换为用户的本地时区(就像省略了参数一样)。时间戳可以来自任何日期,因此应该考虑DST在当时是否有效,而不仅仅是在代码运行时。欧洲夏令时从三月的最后一个星期日持续到十月的最后一天。

如果给定日期在中欧夏令时(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) }}

最新更新