web-dev-qa-db-de.com

Stundenunterschied zwischen zwei Terminen in Moment Js

Ich kann den Unterschied zwischen zwei Daten mit MomentJs wie folgt ermitteln:

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

Ich möchte jedoch auch die Stunde anzeigen, wenn anwendbar (nur wenn> = 60 Minuten vergangen sind).

Wenn ich jedoch versuche, die Dauer in Stunden abzurufen, verwenden Sie Folgendes:

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

es wird die aktuelle Stunde und nicht die Anzahl der Stunden zwischen den beiden Datumsangaben zurückgegeben. 

Wie bekomme ich den Zeitunterschied zwischen zwei Momenten? 

269
Dani

Du warst nah. Sie müssen nur die duration.asHours()-Methode verwenden (siehe the docs ).

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

Der folgende Codeblock zeigt, wie mit Hilfe von MomentJS die Differenz der Anzahl Tage zwischen zwei Datumsangaben berechnet wird.

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)
146
selftaught91

Oder Sie können einfach tun:

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

docs: hier

110
Sebastián Lara

Alles, was Sie tun müssen, ist hours als zweiten Parameter an die Momenten-Diff-Funktion zu übergeben.

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

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

Beispiel:

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>

6
JSON C11

Es gibt eine großartige moment-Methode namens fromNow(), die die Zeit von einer bestimmten Zeit in einer für Menschen lesbaren Form zurückgibt:

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

Oder wenn Sie dies zwischen zwei bestimmten Daten wünschen, können Sie Folgendes verwenden:

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

Aus den Dokumenten entnommen:

3
Dryden Williams
var __startTime = moment("2016-06-06T09:00").format();
var __endTime = moment("2016-06-06T21:00").format();

var __duration = moment.duration(moment(__endTime).diff(__startTime));
var __hours = __duration.asHours();
console.log(__hours);
2
AKHIL
 var start=moment(1541243900000);
 var end=moment(1541243942882);
 var duration = moment.duration(end.diff(startTime));
 var hours = duration.asHours();

Wie Sie sehen, mussten Anfangs- und Enddatum Momentobjekte sein, damit diese Methode funktionieren kann. 

1
Richang Sharma

Ich weiß, dass dies alt ist, aber hier ist eine einzeilige Lösung:

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

Wo Start und Ende Momentobjekte sind.

Genießen!

1
Francois Nadeau

Ich weiß, dass dies bereits beantwortet wurde, aber für den Fall, dass Sie etwas Rekursives und Allgemeineres wollen und sich nicht auf den Moment verlassen möchten, fromNow, können Sie diese von mir erstellte Funktion verwenden. Natürlich können Sie die Logik ändern, um sie an Ihre Bedürfnisse anzupassen und auch Jahre und Sekunden zu unterstützen.

var createdAt = moment('2019-05-13T14:23:00.607Z');
var expiresAt = moment('2019-05-14T14:23:00.563Z');

// You can also add years in the beginning of the array or seconds in its end
const UNITS = ["months", "weeks", "days", "hours", "minutes"]
function getValidFor (createdAt, expiresAt, unit = 'months') {
    const validForUnit = expiresAt.diff(createdAt, unit);
    // you could adjust the if to your needs 
    if (validForUnit > 1 || unit === "minutes") {
    return [validForUnit, unit];
  }
  return getValidFor(createdAt, expiresAt, UNITS[UNITS.indexOf(unit) + 1]);
}
0
Mounir Dhahri

In meinem Fall wollte ich Stunden und Minuten:

var duration = moment.duration(end.diff(startTime));
var hours = duration.hours(); //hours instead of asHours
var minutes = duration.minutes(); //minutes instead of asMinutes

Weitere Informationen finden Sie in den offiziellen docs .

0
Anil Singh

Wenn Sie die Gesamtminute zwischen zwei Datumsangaben in Bezug auf den Tag wünschen, kann der untenstehende Code Ihnen helfen. Startdatum: 2018-05-04 02:08:05 , Enddatum: 2018-05-14 09: 04:07 ...

function countDaysAndTimes(startDate,endDate){
return new Promise(function (resolve, reject) {
var dayObj = new Object;
var finalArray = new Array;

var datetime1 = moment(startDate);
var datetime2 = moment(endDate);
if(datetime1.format('D') != datetime2.format('D') || datetime1.format('M') != datetime2.format('M') ||  datetime1.format('YYYY') != datetime2.format('YYYY')){
  var onlyDate1 = startDate.split(" ");
  var onlyDate2 = endDate.split(" ");
  var totalDays = moment(onlyDate2[0]).diff(moment(onlyDate1[0]), 'days')

  // First Day Entry
  dayObj.startDate = startDate;
  dayObj.endDate = moment(onlyDate1[0]).add(1, 'day').format('YYYY-MM-DD')+" 00:00:00";
  dayObj.minutes = moment(dayObj.endDate).diff(moment(dayObj.startDate), 'minutes');
  finalArray.Push(dayObj);

  // Between Days Entry
  var i = 1;
  if(totalDays > 1){
    for(i=1; i<totalDays; i++){
      var dayObj1 = new Object;
      dayObj1.startDate = moment(onlyDate1[0]).add(i, 'day').format('YYYY-MM-DD')+" 00:00:00";
      dayObj1.endDate = moment(onlyDate1[0]).add(i+1, 'day').format('YYYY-MM-DD')+" 00:00:00";
      dayObj1.minutes = moment(dayObj1.endDate).diff(moment(dayObj1.startDate), 'minutes');
      finalArray.Push(dayObj1);
    }
  }

  // Last Day Entry
  var dayObj2 = new Object;
  dayObj2.startDate = moment(onlyDate1[0]).add(i, 'day').format('YYYY-MM-DD')+" 00:00:00";
  dayObj2.endDate = endDate ;
  dayObj2.minutes = moment(dayObj2.endDate).diff(moment(dayObj2.startDate), 'minutes');
  finalArray.Push(dayObj2);

}
else{
  dayObj.startDate = startDate;
  dayObj.endDate = endDate;
  dayObj.minutes = datetime2.diff(datetime1, 'minutes');
  finalArray.Push(dayObj);
}
console.log(JSON.stringify(finalArray));
// console.table(finalArray);
resolve(finalArray);
});
}

Ausgabe

 [
  {
  "startDate":"2018-05-04 02:08:05",
  "endDate":"2018-05-05 00:00:00",
  "minutes":1311
  },
  {
  "startDate":"2018-05-05 00:00:00",
  "endDate":"2018-05-06 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-06 00:00:00",
  "endDate":"2018-05-07 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-07 00:00:00",
  "endDate":"2018-05-08 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-08 00:00:00",
  "endDate":"2018-05-09 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-09 00:00:00",
  "endDate":"2018-05-10 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-10 00:00:00",
  "endDate":"2018-05-11 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-11 00:00:00",
  "endDate":"2018-05-12 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-12 00:00:00",
  "endDate":"2018-05-13 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-13 00:00:00",
  "endDate":"2018-05-14 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-14 00:00:00",
  "endDate":"2018-05-14 09:04:07",
  "minutes":544
  }
 ]
0
Renish Gotecha