Moment.js始终返回零时间:计算当前与未来时间间隔异常原因排查
为什么你的Moment.js代码总是返回00:00:00?
嘿,我来帮你捋清楚这个问题哈~
问题出在哪?
你之所以每次都得到00:00:00,核心是用错了moment.duration()的用法,而且代码逻辑跑偏了你的真实需求:
moment.duration()是用来创建「时长」的(比如“2小时15分钟”这种时间段),不是用来处理具体时间点的。当你把一个moment对象(也就是你定义的未来时间d)传给它时,它会把这个时间点转成从1970-01-01 UTC到该时间的毫秒数,然后把这个数值当成“时长”来处理——这完全不是你想要的「当前时间到未来时间的间隔」。- 之后你用
moment.utc(xxx.asMilliseconds()),相当于把这个错误的“时长毫秒数”当成时间戳创建了一个新日期,而这个日期的时分秒刚好是00:00:00(本质上和你要的时间间隔根本不沾边)。
正确的写法应该是这样
你的目标是计算当前UTC时间和未来UTC时间的间隔,那得先拿到两个时间点的差值,再转成时长来格式化:
// 你的未来时间(已经是有效的moment对象) var d = moment.utc('27.03.2018 - 15:43:01', 'DD.MM.YYYY - HH:mm:ss'); // 计算当前UTC时间与未来时间的间隔,得到正确的时长对象 var timeDiff = moment.duration(d.diff(moment.utc())); // 把时长格式化成HH:mm:ss var v = timeDiff.format("HH:mm:ss"); console.log(v);
额外提醒
如果你的未来时间已经是过去的时间(比如示例里的2018年,现在是2024年),得到的时长会是负数,格式化时会显示负号,你可以根据自己的需求判断处理这种情况哦~
内容的提问来源于stack exchange,提问作者drothouu
相关产品推荐
相关产品推荐

