React Native项目中Moment时间格式化在iPhone 12 Mini显示异常
问题根因
该异常并非Moment针对iPhone 12 Mini的专属适配问题,由两个常见问题叠加导致:
moment(0)传入的是Unix时间戳0,对应UTC标准时间1970-01-01 00:00:00,Moment默认会读取设备本地时区解析该时间,若设备时区存在30分钟的偏移量,或是老版本Moment读取iOS系统时区出错,都会导致解析出的时间分钟位为30- 你使用的格式化字符串存在位序错误:你预期输出的
00:00:00对应「分钟:秒:毫秒」的话没问题,但如果预期是「小时:分钟:毫秒」,你使用的mm:ss:SS中mm是分钟占位符,漏掉了小时占位符,会把小时数换算为分钟累加到mm位,进一步放大展示异常
修复方案
方案1:强制UTC解析消除时区影响
如果你是做倒计时、时长统计等和时区无关的时间展示,直接强制使用UTC模式解析时间戳,所有设备输出统一:
import moment from 'moment'; const format = 'mm:ss:SS'; const startPoint = moment.utc(0).format(format);
修改后所有设备都会输出预期的00:00:00。
方案2:升级Moment修复时区读取bug
如果确认设备时区为常规整点偏移时区,可将项目中的Moment升级到2.29.1及以上版本,该版本修复了iOS 14+系统时区读取异常的已知问题。
方案3:修正格式化字符串
如果你需要展示本地时间的「小时:分钟:秒:毫秒」,将格式化字符串调整为正确的占位符即可:
// HH为24小时制小时占位符,hh为12小时制小时占位符 const format = 'HH:mm:ss:SS';
内容的提问来源于stack exchange,提问作者Fred A
相关产品推荐
相关产品推荐

