次のようにMomentJを使って2つの日付の違いを知ることができます。
moment(end.diff(startTime)).format("m[m] s[s]")
ただし、該当する場合は時間も表示します(60分以上経過した場合のみ)。
ただし、次のようにして期間時間を取得しようとすると、
var duration = moment.duration(end.diff(startTime));
var hours = duration.hours();
2つの日付の間の時間数ではなく、現在の時間が返されます。
2つの瞬間の時間差をどうやって知ることができますか?
あなたは近かった。 duration.asHours()
メソッドを使うだけです( the docs を参照)。
var duration = moment.duration(end.diff(startTime));
var hours = duration.asHours();
次のコードブロックは、MomentJSを使用して2つの日付間の日数の差を計算する方法を示しています。
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)
あるいは、簡単にできます。
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: ここ
あなたがする必要があるのは、moment diff関数の2番目のパラメータとしてhours
を渡すことです。
var a = moment([21,30,00], "HH:mm:ss")
var b = moment([09,30,00], "HH:mm:ss")
a.diff(b, 'hours') // 12
ドキュメント: https://momentjs.com/docs/#/displaying/difference/
例:
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>
var start=moment(1541243900000);
var end=moment(1541243942882);
var duration = moment.duration(end.diff(startTime));
var hours = duration.asHours();
お分かりのように、このメソッドが機能するには開始日と終了日が瞬間オブジェクトである必要があります。
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);
私はこれがすでに答えられていることを知っていますが、もしあなたが再帰的でより一般的なものを欲しがっていてfromNow
に頼らないのなら、私が作成したこの関数を使うことができます。もちろん、年月をサポートするために、ロジックを変更してニーズに合わせて調整することもできます。
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]);
}
私の場合は、数時間と数分が必要でした。
var duration = moment.duration(end.diff(startTime));
var hours = duration.hours(); //hours instead of asHours
var minutes = duration.minutes(); //minutes instead of asMinutes
より詳しい情報は公式の docs を参照してください。
2つの日付の間の合計分数が、コードの下に表示されるよりも細かいほうがよい場合は、 開始日:2018-05-04 02:08:05 、 終了日: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);
});
}
出力
[
{
"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
}
]
私はこれが古いことを知っています、しかしここにワンライナー解決策があります:
const hourDiff = start.diff(end, "hours");
start および end はモーメントオブジェクトです。
楽しい!