使用Moment.js判断两个日期是否相同时返回false如何解决
问题原因
- 解析参数不匹配:你传入的
'1635750314812'是毫秒级时间戳,但是指定的解析格式为YYYY/MM/DD,Moment.js无法按该格式正确解析时间戳,导致生成的beginningTime是无效日期,无法和正常生成的当前时间匹配。 - 日期对比精度问题:
isSame方法默认精确到毫秒级别,即便是同一天的两个时间,只要生成的毫秒数有差异,默认对比结果也会是false,仅判断是否为同一天需要指定对比精度为day。
修复后的实现代码
// 直接传入毫秒时间戳即可完成解析,也可以加格式标识'x'明确是毫秒时间戳 var beginningTime = moment(1635750314812, 'x'); // 生成当前时间不需要传undefined参数 var endTime = moment(); // 对比时指定精度为天,仅判断是否为同一日期 console.log(beginningTime.isSame(endTime, 'day'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
可选兼容方案
如果你需要严格按YYYY/MM/DD格式解析两个日期再对比,可以先将时间戳和当前时间都转成对应格式的字符串再解析:
var beginningTime = moment(moment(1635750314812).format('YYYY/MM/DD'), 'YYYY/MM/DD'); var endTime = moment(moment().format('YYYY/MM/DD'), 'YYYY/MM/DD'); // 此时两个日期对象都对应当天0点,毫秒数完全一致,默认对比也返回true console.log(beginningTime.isSame(endTime));
内容的提问来源于stack exchange,提问作者Asking
相关产品推荐
相关产品推荐

