获取天,小时和分钟的差异时刻js

Art*_*ter 4 javascript momentjs

我有两个日期时间选择器(从,到)。我需要得到分钟(1505分钟)和日期和时间(2天1小时35分钟)之间的FROM和TO日期之间的差异。

我使用moment.js

var now = moment('2018-03-28 14:02');
var end = moment('2018-06-02 00:00'); // another date
var duration = moment.duration(end.diff(now));
var days = duration.asDays();
console.log(days) //65.41527777777777
Run Code Online (Sandbox Code Playgroud)

这里输出的65.41527777777777地方65是正确天,但如何转换41527777777777到小时和分钟。如果我这样做,0,41527777777777 * 24 = 9,96666666648我会得到9个小时,0,96666666648 * 60 = 57这又是正确的区别

65 day, 9 hour and 57 min
Run Code Online (Sandbox Code Playgroud)

但是,有什么方法可以直接使用moment.js做到这一点吗?

谢谢

Dan*_*eck 6

不是直接在 moment.js 中,不,但是这个悬而未决的问题让我想到这个 moment.js 插件,它允许格式化持续时间。看起来使用该插件,您可以使用它来获得所需的输出:

duration.format("D [day], H [hour and] m [min]")
Run Code Online (Sandbox Code Playgroud)


小智 6

没有插件:

var now = moment('2018-03-28 14:02');
var end = moment('2018-06-02 00:00'); // another date
var duration = moment.duration(end.diff(now));

//Get Days and subtract from duration
var days = duration.asDays();
duration.subtract(moment.duration(days,'days'));

//Get hours and subtract from duration
var hours = duration.hours();
duration.subtract(moment.duration(hours,'hours'));

//Get Minutes and subtract from duration
var minutes = duration.minutes();
duration.subtract(moment.duration(minutes,'minutes'));

//Get seconds
var seconds = duration.seconds();
console.log("Days: ",days);
console.log("Hours: ",hours);
console.log("Minutes: ",minutes);
console.log("Seconds: ",seconds);
Run Code Online (Sandbox Code Playgroud)

  • 我必须更改它才能使其正常工作 - var days = Math.floor(duration.asDays()); 因为它以分数形式返回天数,例如 0.05。 (5认同)

use*_*742 6

作为moment.asDays(date)返回浮点数,您需要使用 Math.floor()

function durationAsString(start, end) {
  const duration = moment.duration(moment(end).diff(moment(start)));

  //Get Days
  const days = Math.floor(duration.asDays()); // .asDays returns float but we are interested in full days only
  const daysFormatted = days ? `${days}d ` : ''; // if no full days then do not display it at all

  //Get Hours
  const hours = duration.hours();
  const hoursFormatted = `${hours}h `;

  //Get Minutes
  const minutes = duration.minutes();
  const minutesFormatted = `${minutes}m`;

  return [daysFormatted, hoursFormatted, minutesFormatted].join('');
}

console.log(durationAsString('2018-03-28 14:02', '2018-06-02 00:00'))

console.log(durationAsString('2018-06-01 14:02', '2018-06-02 00:00'))
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>
Run Code Online (Sandbox Code Playgroud)