使用 Moment JS 计算两个日期之间的小时数差异

8

我发现计算日期时间范围存在一些问题。我的目标是让 Moment 库提供小时差。

以下是我的脚本示例:

    var startTime = $('2016-02-21 18:00');
    var endTime = $('2016-02-21 19:30');
    var hours = moment(endTime, 'YYYY/MM/DD HH:mm').diff(moment(startTime, 'YYYY/MM/DD HH:mm')).duration().asHours();
console.log(hours);

我期望console.log(hours)返回类似于1.5(以小时为单位估算)。但是它返回了以下错误信息:
Uncaught TypeError: moment(...).diff(...).duration is not a function
    at <anonymous>:5:90
    at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
    at Object.InjectedScript.evaluate (<anonymous>:694:21)

有人有什么想法吗?

这里有一个完整的示例https://jsfiddle.net/ewmq6sof/


1
可能是Get hours difference between two dates in Moment Js的重复问题。 - Ben
3个回答

17
你需要将 duration 包含在差异中:
var startTime = '2016-02-21 18:00';
var endTime = '2016-02-21 19:30';
var hours = moment
        .duration(moment(endTime, 'YYYY/MM/DD HH:mm')
        .diff(moment(startTime, 'YYYY/MM/DD HH:mm'))
        ).asHours();
console.log(hours); // 1.5

6

以下内容比被接受的答案更为简洁:

const startTime = moment('2016-02-21 18:00', 'YYYY/MM/DD HH:mm');
const endTime = moment('2016-02-21 19:30', 'YYYY/MM/DD HH:mm');

const hoursDiff = endTime.diff(startTime, 'hours', true);

console.log(hoursDiff); // 1.5

0
你只需要使用moment.js中的date.diff()方法。

const now = moment.utc();
var end = moment("2022-11-08"); 
var hours = now.diff(end, "hours"); 
console.log(hours)
<script src="https://momentjs.com/downloads/moment.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接