【发布时间】:2016-09-30 15:23:00
【问题描述】:
我已通过以下方式计算日期差异:
- 将收到的 unix 日期转换为 js 日期,
- 将当前日期保存为 js 日期,
- 将两者及其格式一起传递给 moment.js 以获得差异
- 转换为毫秒
- 以毫秒为单位的差异转换为时刻并返回小时分钟秒
我遇到了一个问题,即特定版本的 moment 可以解决这个问题,而其他版本在 calc 差异时会在内部将异常抛出为 nan。很想只用普通的 js 来做,希望能绕过这种情况。
上传了一个小提琴,除非你注释掉 moment 部分,否则它不会运行,因为在 cdn 上没有找到 moment.js 版本。
我更关注逻辑和一些伪代码/语法,而不是一个工作示例。 JS 版本的问题是,当计算出的两个 unix 日期之间的差异然后转换为日期 *1000 毫秒时,它变成了 1970 日期。 js 中的 getMinutes() 也可以获取该时间戳的实际分钟数,而不是总分钟数,小时数等。
这是瞬间的JS例子:
var now = new Date(Date.now()),
ms = moment(then, "DD/MM/YYYY HH:mm:ss").diff(moment(now, "DD/MM/YYYY HH:mm:ss")),
d = moment.duration(ms),
formattedMomentDateDifference = Math.floor(d.asHours()) + ":";
formattedMomentDateDifference += Math.floor(d.minutes()) + ":";
formattedMomentDateDifference += Math.floor(d.seconds());
$('#momentdifference').val(formattedMomentDateDifference);
以下是js日期示例:
var then = cleanedReceivedDate, //cleaned received date in unix
difference = Math.floor(then - now)*1000, /* difference in milliseconds */
msDifferenceInDate = new Date(difference),
hoursDiff = msDifferenceInDate.getHours(),
minutesDiff = "0"+msDifferenceInDate.getHours(),
secondsDiff = "0"+msDifferenceInDate.getSeconds(),
formattedTime = hoursDiff + ':' + minutesDiff.substr(-2) + ':' + secondsDiff.substr(-2);
$('#jsdifference').val(formattedMomentDateDifference);
【问题讨论】:
标签: javascript date momentjs difference