【问题标题】:Calculate the exact time difference using moment JS使用moment JS计算准确的时差
【发布时间】:2016-05-10 00:09:11
【问题描述】:

我需要使用 moment JS 计算准确的时间差异。

我的 JS 代码是:

var a = moment(from_url);
                a.format('DD/MM/YYYY hh:mm:ss');
                var b = moment(to_url);
                b.format('DD/MM/YYYY hh:mm:ss');

                console.log("from URL")
                var from_hours = from_url()
                console.log(b.diff(a, 'minutes')) // 
                console.log(b.diff(a, 'hours')) // 
                console.log(b.diff(a, 'days')) // 
                console.log(b.diff(a, 'weeks')) // 

                console.log("Time interval: "+b.diff(a, 'days')+ " days "+ b.diff(a, 'hours') +" hours " +b.diff(a, 'minutes')+" mintes");

现在,

from_url = '2016-05-03T08:00:00';
to_url = '2016-05-04T09:00:00';

现在,对于这些时间,我得到的输出为: Time interval: 1 days 25 hours 1500 minutes 它将所有内容转换为天数(1 天~25 小时)。

但是,我想要的输出是:1 天 1 小时 0 分钟

任何人都可以帮助我吗? 我是 JS 的新手,无法弄清楚这一点。 谢谢。

【问题讨论】:

  • 这方面已经有很多问题了,pick a duplicate。 moment.js diff 方法只解决一个单元的差异,而不是多个。

标签: javascript timestamp momentjs unix-timestamp timestampdiff


【解决方案1】:

要解析字符串,您应该始终告诉解析器您提供的格式。 Moment.js 可以提供帮助,但您也可以使用自己的小函数。

要获得天数、小时数等方面的差异,您可以简单地从另一个日期减去一个日期以获得毫秒数,然后将其转换为您想要的格式。

请注意,日期算术并不简单,有许多规则会根据自定义或管理规则而变化。此外,当越过夏令时边界时,有些日子是 23 小时,有些是 25 小时。

以下是不考虑夏令时的简单方法。希望 cmets 足够了,使用输出格式来获得你需要的任何东西。

// Parse ISO format string as local, ignore timezone
// E.g. 2016-05-29T23:32:15
function parseISOLocal(s) {
  // Split string into its parts
  var b = s.split(/\D/);
  // Create and return a date object
  return new Date(b[0], b[1]-1, b[2], b[3], b[4], b[5]);
}

// Convert a millisecond value to days, hours, minutes and seconds
function formatDHMS(ms) {
  // Helper to add 's' to a number if other than 1
  function addS(n){return n == 1? '' : 's';}
   
  // Get the whole values of each unit, rounded down ( |0 truncates)
  var d =  ms/8.64e7 | 0;          // days
  var h = (ms%8.64e7) / 3.6e6 | 0; // hours
  var m = (ms%3.6e6)  / 6e4 | 0;   // minutes
  var s = (ms%6e4)    / 1e3 | 0;   // seconds

  // Return a formatted string
  return d + ' day' + addS(d) + ', ' + 
         h + ' hour' + addS(h) + ', ' + 
         m + ' minute' + addS(m) + ' and ' +
         s + ' second' + addS(s);
}

document.write(formatDHMS(parseISOLocal('2016-05-04T09:00:00') - parseISOLocal('2016-05-03T08:00:00')))

【讨论】:

    猜你喜欢
    • 2020-11-27
    • 2021-01-15
    • 2019-04-17
    • 2013-07-04
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    相关资源
    最近更新 更多