Javascript显示毫秒为天:小时:分钟没有秒

IT技术 javascript datetime
2021-03-14 23:07:57

我正在计算有许多不同示例可用的 2 个日期之间的差异。返回的时间以毫秒为单位,因此我需要将其转换为更有用的内容。

大多数示例是针对 days:hours:minutes:seconds 或 hours:minutes,但我需要days:hours:minutes所以秒应该四舍五入到分钟。

我目前使用的方法接近但显示 3 天为 2.23.60 时它应该显示 3.00.00 所以有些事情不太正确。由于我刚刚从网络上的示例中获取了当前代码,因此我愿意接受其他方法的建议。

我通过从结束日期中减去开始日期来获得以毫秒为单位的时间,如下所示:-

date1 = new Date(startDateTime);
date2 = new Date(endDateTime);
ms = Math.abs(date1 - date2)

我基本上需要将 ms 变量转换为 days.hours:minutes。

6个回答

像这样的东西?

function dhm(t){
    var cd = 24 * 60 * 60 * 1000,
        ch = 60 * 60 * 1000,
        d = Math.floor(t / cd),
        h = Math.floor( (t - d * cd) / ch),
        m = Math.round( (t - d * cd - h * ch) / 60000),
        pad = function(n){ return n < 10 ? '0' + n : n; };
  if( m === 60 ){
    h++;
    m = 0;
  }
  if( h === 24 ){
    d++;
    h = 0;
  }
  return [d, pad(h), pad(m)].join(':');
}

console.log( dhm( 3 * 24 * 60 * 60 * 1000 ) );
非常感谢 Mic,在所有示例中,我发现您的代码在向其抛出不同值时最可靠。非常感激。
2021-04-29 23:07:57
@Mic 谢谢,如何在此处添加秒数?
2021-05-03 23:07:57

不知道为什么,但其他人没有为我工作,所以这是我的

function dhm (ms) {
  const days = Math.floor(ms / (24*60*60*1000));
  const daysms = ms % (24*60*60*1000);
  const hours = Math.floor(daysms / (60*60*1000));
  const hoursms = ms % (60*60*1000);
  const minutes = Math.floor(hoursms / (60*1000));
  const minutesms = ms % (60*1000);
  const sec = Math.floor(minutesms / 1000);
  return days + ":" + hours + ":" + minutes + ":" + sec;
}
我花了2个小时才找到它!非常感谢你!
2021-05-08 23:07:57

听起来像是Moment.js的工作

var diff = new moment.duration(ms);
diff.asDays();     // # of days in the duration
diff.asHours();    // # of hours in the duration
diff.asMinutes();  // # of minutes in the duration

在 MomentJS 中,还有很多其他方法可以格式化持续时间。文档是非常全面的。

尊重:明确提出的天数:小时:分钟的问题,而不是总值。
2021-04-30 23:07:57
这将如何解决问题。不会得到所需格式的结果。它给出总小时数、总分钟数或总天数。当所需的结果是总天数:小时:分钟
2021-05-04 23:07:57
MomentJS 对此没有解决方案。上面的评论解释了它。
2021-05-14 23:07:57

干得好:

http://jsfiddle.net/uNnfH/1

或者,如果您不想玩正在运行的示例,则:

window.minutesPerDay = 60 * 24;

function pad(number) {
    var result = "" + number;
    if (result.length < 2) {
        result = "0" + result;
    }

    return result;
}

function millisToDaysHoursMinutes(millis) {
    var seconds = millis / 1000;
    var totalMinutes = seconds / 60;

    var days = totalMinutes / minutesPerDay;
    totalMinutes -= minutesPerDay * days;
    var hours = totalMinutes / 60;
    totalMinutes -= hours * 60; 

    return days + "." + pad(hours) + "." + pad(totalMinutes);
}
感谢您的建议 aroth,我最终采用了许多不同的方法,这是我采用的一种近距离的方法。我之前没有见过 jsfiddle,所以感谢你向我介绍它。
2021-05-12 23:07:57

不知道您需要多少答案,但这是另一个答案 - 只是对已经给出的几个答案的另一种看法:

function msToDHM(v) {
  var days = v / 8.64e7 | 0;
  var hrs  = (v % 8.64e7)/ 3.6e6 | 0;
  var mins = Math.round((v % 3.6e6) / 6e4);

  return days + ':' + z(hrs) + ':' + z(mins);

  function z(n){return (n<10?'0':'')+n;}
}

但是请注意此类计算,跨越夏令时边界的时段会导致问题。最好在 UTC 中工作并转换为本地时间进行演示。