为什么Javascript/ReactNative中Date函数获取的本地时区会不时变动?
变动原因
- 你的Date对象生成方式错误:直接调用
Date(year, month, date)(无new关键字)时,Date作为普通函数会忽略所有传入参数,返回当前调用时刻的时间字符串,而非你指定年月日的Date对象。你每次调用实际取的都是运行瞬间的实时时间,1分钟内的时间差如果刚好跨了夏令时切换的临界点,时区偏移就会发生变动。 Date.prototype.getTimezoneOffset()返回的是当前Date对象对应时间点的本地时区与UTC的偏移差,并非固定的系统当前时区偏移。即便你正确生成指定日期的Date对象,如果该日期落在夏令时切换前后的不同时段,返回的偏移值也会不同。你当前设置的山地夏令时本身就存在时令切换规则,自然会出现偏移变动的情况。
固定时区偏移的方案
- 首先修正Date对象生成语法,添加
new关键字让传入的年月日参数生效(注意JS中月份为0基计数,0代表1月,11代表12月):let date = new Date(year, month, date); - 如果需要完全固定偏移、不受本地时令切换影响,可以手动指定时区偏移生成时间,不需要依赖系统时区配置:
// 示例:固定使用山地标准时(UTC-7,对应偏移420分钟),不需要跟随夏令时切换 const FIXED_TIMEZONE_OFFSET = 7 * 60; // 基于UTC时间计算得到对应固定时区的时间 let date = new Date(Date.UTC(year, month, date, 0, 0, 0) - FIXED_TIMEZONE_OFFSET * 60 * 1000); - 若使用iOS模拟器测试,可以直接在模拟器的「设置-通用-日期与时间」中单独固定时区,关闭自动同步,避免跟随电脑系统的时令切换产生变动。
内容的提问来源于stack exchange,提问作者Chen Li Yong
相关产品推荐
相关产品推荐

