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?
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();
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)
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
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>
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:
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);
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.
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!
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]);
}
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 .
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
}
]