使用moment判断ISO日期的小时是否等于或早于指定HH:mm格式时间
问题原因
- 逻辑写反:你的需求是判断给定的
HH:mm时间是否等于或早于ISO日期对应的小时,代码里却判断ISO的时间是否早于给定的HH:mm,完全颠倒了判断方向 - 时区不统一:ISO字符串是UTC格式,默认用
moment(isoDateString)会自动转换为运行环境的本地时间,如果你需要对比UTC维度的小时,要先调用.utc()方法再提取时间,确保和对比的时间时区一致 - 隐式解析风险:解析提取到的
HH:mm字符串时没有指定格式,虽然当前场景不会出错,但隐式解析可能在其他格式场景下出现非预期结果
修正代码
const TIME_FORMAT = 'HH:mm' const isoDateString = '2021-09-28T07:30:00Z' const hour = '07:30' // 如果要和本地时区的hour对比,直接提取本地时区的时间 const isoTime = moment(isoDateString).format(TIME_FORMAT) // 如果要和UTC时区的hour对比,改为: // const isoTime = moment(isoDateString).utc().format(TIME_FORMAT) const isHourSameOrBeforeIsoString = moment(hour, TIME_FORMAT).isSameOrBefore(moment(isoTime, TIME_FORMAT)) console.log(isHourSameOrBeforeIsoString)
验证匹配你的示例场景:
- ISO时间为
07:30,给定hour为07:30时返回true - ISO时间为
07:30,给定hour为08:30时返回false
内容的提问来源于stack exchange,提问作者marielle
相关产品推荐
相关产品推荐

