Angular中getTimezoneOffset返回值与日期对象时区偏移不一致的原因
时区偏移量差异的原因分析
- 首先明确
getTimezoneOffset()的规则:它返回当前本地时间与UTC的分钟差值,计算逻辑是「UTC时间 - 本地时间」,所以本地时区比UTC晚的话返回正数,早则返回负数。 - 你代码里的
offset = new Date().getTimezoneOffset()取的是当前系统时刻的时区偏移,而newdate是12月21日的日期,这两个时间点的时区规则不一样——美国东部时区有夏令时:- 每年3-11月是夏令时(EDT,GMT-4,比UTC晚4小时),此时
getTimezoneOffset()返回240分钟(即4小时); - 11月到次年3月是标准时间(EST,GMT-5,比UTC晚5小时),对应
getTimezoneOffset()返回300分钟(即5小时)。
- 每年3-11月是夏令时(EDT,GMT-4,比UTC晚4小时),此时
- 控制台显示
newdate是Dec 21 2024 00:00:00 GMT-0500,因为12月属于标准时间,但你获取的offset是当前时刻的偏移(如果当前处于夏令时,就是240分钟),所以出现1小时差异。
解决方法
要获取目标日期newdate对应的时区偏移,应该调用该日期对象的getTimezoneOffset()方法,而不是当前时间的:
let datestring="2024-12-21T00:00:00" let newdate=new Date(datestring); let offset = newdate.getTimezoneOffset(); // 此时返回300,对应5小时,和控制台显示的GMT-0500匹配
内容的提问来源于stack exchange,提问作者wiki
相关产品推荐
相关产品推荐

