Moment日期校验基础用法:utc与isBefore方法返回结果异常求解
问题原因解析
你遇到的返回结果不符合预期的核心原因是参与比较的两个时间对象时区不统一:
moment.utc('2021-07-11')会将输入的日期字符串解析为 UTC时区的2021-07-11 00:00:00- 传入
isBefore方法的'2021-07-12'没有指定时区,moment默认会将其解析为运行环境的本地时区的2021-07-12 00:00:00
举个实际场景的例子:如果你的运行环境在东八区(UTC+8,国内大部分地区默认是这个时区),本地时区的2021-07-12 00:00:00 换算成UTC时间实际是2021-07-11 16:00:00。当使用'day'作为比较精度时,两个时间在各自的时区下的天部分对比就会出现偏差,最终返回false。
修复方案
只要统一参与比较的两个时间的时区规则即可:
- 方案1:所有时间都按UTC规则解析
moment.utc('2021-07-11').isBefore(moment.utc('2021-07-12'), 'day') // 返回 true
- 方案2:所有时间都按本地时区规则解析
moment('2021-07-11').isBefore('2021-07-12', 'day') // 返回 true
注意事项
使用moment做跨时区的时间处理、比较时,必须确保所有时间对象的时区规则一致,避免出现逻辑偏差。
内容的提问来源于stack exchange,提问作者wokoro douye samuel
相关产品推荐
相关产品推荐

