javascript - Hämta timskillnaden mellan två datum i Moment Js


Jag kan få skillnaden mellan två datum med MomentJs på följande sätt:

moment(end.diff(startTime)).format("m[m] s[s]")

Jag vill dock också visa timmen när det är tillämpligt (endast när >= 60 minuter har gått).

Men när jag försöker hämta varaktighetstimmarna med följande:

var duration = moment.duration(end.diff(startTime));
var hours = duration.hours();

det returnerar den aktuella timmen och inte antalet timmar mellan de två datumen.

Hur får jag skillnaden i timmar mellan två Moments?

Svar #1

Du var nära. Du behöver bara använda metoden duration.asHours() (se dokumentationen).

var duration = moment.duration(end.diff(startTime));
var hours = duration.asHours();

Svar #2

Följande kodblock visar hur man beräknar skillnaden i antal dagar mellan två datum med MomentJS.

var now = moment(new Date()); //todays date
var end = moment("2015-12-1"); // another date
var duration = moment.duration(now.diff(end));
var days = duration.asDays();
console.log(days)

Svar #3

Eller så kan du helt enkelt göra:

var a = moment('2016-06-06T21:03:55');//now
var b = moment('2016-05-06T20:03:55');

console.log(a.diff(b, 'minutes')) // 44700
console.log(a.diff(b, 'hours')) // 745
console.log(a.diff(b, 'days')) // 31
console.log(a.diff(b, 'weeks')) // 4

dokument: här

Svar #4

Det finns en fantastisk moment-metod som heter fromNow() som kommer att returnera tiden från en specifik tid i ett trevligt och lättläst format, som detta:

moment('2019-04-30T07:30:53.000Z').fromNow() // an hour ago || a day ago || 10 days ago

Eller om du vill ha det mellan två specifika datum kan du använda:

var a = moment([2007, 0, 28]);
var b = moment([2007, 0, 29]);
a.from(b); // "a day ago"

Tagen från dokumentationen:

  • fromNow()
  • from()

Svar #5

Allt du behöver göra är att skicka in hours som den andra parametern till moments diff-funktion.

var a = moment([21,30,00], "HH:mm:ss")
var b = moment([09,30,00], "HH:mm:ss")
a.diff(b, 'hours') // 12

Dokumentation: https://momentjs.com/docs/#/displaying/difference/

Exempel:

const dateFormat = "YYYY-MM-DD HH:mm:ss";
// Get your start and end date/times
const rightNow = moment().format(dateFormat);
const thisTimeYesterday = moment().subtract(1, 'days').format(dateFormat);
// pass in hours as the second parameter to the diff function
const differenceInHours = moment(rightNow).diff(thisTimeYesterday, 'hours');

console.log(`${differenceInHours} hours have passed since this time yesterday`);
<script 
  src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js">
</script>

Svar #6

Jag vet att detta är gammalt, men här är en enradslösning:

const hourDiff = start.diff(end, "hours");

Där start och end är momentobjekt.

Relaterade artiklar