【问题标题】:Find time difference between 2 times using moment.js使用 moment.js 查找 2 次之间的时间差
【发布时间】:2017-01-21 10:25:35
【问题描述】:

我需要找出 2 次(HH:MM:SS 格式的时间)之间的差异。

需要在几秒钟内获得差异。

var a = moment('21:04:59');
var b = moment('21:04:00');

a - b = 59 seconds 

我已尝试关注 它使用日期时间格式对我有用,但不能单独提交时间。

var a = moment('2016-06-06T20:30:59');
var b = moment('2016-06-06T20:30:00');

console.log(a.diff(b, 'seconds')) // 59 seconds

【问题讨论】:

  • 没有日期,你怎么知道这些时间相隔 59 秒?
  • 看看@pranal patev 的回答,他是对的

标签: javascript datetime momentjs


【解决方案1】:

你必须像下面moment一样打发时间

var a = moment({
  h: 21,
  m: 04,
  s: 59
});
var b = moment({
  h: 21,
  m: 04,
  s: 00
});

输出
console.log(a.diff(b, 'seconds')) // 59秒

【讨论】:

  • 您的答案中的代码有效,但是 OP 有一个字符串输入,因此他需要将第一个输入字符串分成几部分,然后使用给定的代码。请注意,moment 有一个 moment(String, String); 构造函数,用于解析非 ISO 8601 格式的字符串。
【解决方案2】:

在核心中,moment.js 不支持仅时间数据。即使您提供仅限时间的数据,它也会尝试将“今天”存储为日期。

但你仍然可以这样做。

法律途径

var a = moment('21:04:59', 'HH::mm::ss');
var b = moment('21:04:50', 'HH::mm::ss');

alert(a-b); // returns miliseconds

棘手的替代方案

var dummyDate = '2016-05-05T'; // any date
var a = moment(dummyDate + '21:04:59');
var b = moment(dummyDate + '21:04:00');
console.log(a.diff(b, 'seconds'))

【讨论】:

【解决方案3】:

在将字符串解析为时刻对象时,您只需添加正确的格式 ('HH:mm:ss')。

您的代码给出了一个弃用警告,因为您试图解析一个不是已知 ISO 8601 格式的字符串。作为documentation states

警告:浏览器对解析字符串的支持不一致。因为没有规范应该支持哪些格式,所以在某些浏览器中有效的在其他浏览器中无效。

为了获得一致的结果解析除 ISO 8601 字符串之外的任何内容,您应该使用字符串 + 格式。

请注意,由于您没有提供有关日期部分的信息,因此 moment 会创建一个包含当前日期、月份和年份的对象。

这是一个工作示例:

var a = moment('21:04:59', 'HH:mm:ss');
var b = moment('21:04:00', 'HH:mm:ss');
console.log(a.diff(b, 'seconds'));
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

有趣的事:我不久前给了你一个类似的answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    相关资源
    最近更新 更多