JavaScript-2つの日付間の分を取得する


156

2つの日付がある場合、JavaScriptを使用して2つの日付の差を分単位で取得するにはどうすればよいですか?


それらは日付オブジェクトですか、それとも単なる文字列ですか?例として、
シタチンを

回答:


204

このコードをチェックアウトできます:

var today = new Date();
var Christmas = new Date("2012-12-25");
var diffMs = (Christmas - today); // milliseconds between now & Christmas
var diffDays = Math.floor(diffMs / 86400000); // days
var diffHrs = Math.floor((diffMs % 86400000) / 3600000); // hours
var diffMins = Math.round(((diffMs % 86400000) % 3600000) / 60000); // minutes
alert(diffDays + " days, " + diffHrs + " hours, " + diffMins + " minutes until Christmas 2009 =)");

var diffMins = Math.floor((...を四捨五入したくない場合は、秒を破棄します。


7
@philk、それが私がStackOverflowをとても大切にしている理由です。多くの掲示板では、答えは単なるハイパーリンクです。ここでそうだったとしたら、この素晴らしい答えはありません。
Andrew Neely、2015

5
この回答のテスト中にエラーが見つかりました。Dateオブジェクトで分を設定すると、DiffHrsが間違っている可能性があります。たとえば、クリスマスが「12-25-2015 03:55」で、今日が「12-25-2015 02:00」の場合、hourDiffは2時間です。1時間にする必要があります。
HoffZ 2015年

29
Math.round(((diffMs % 86400000) % 3600000) / 60000);が60分を超えると、機能しません
kuncevic.dev

3
これが正しく機能しないことを少なくとも数分間繰り返します。たとえば、62分の差があり、丸めが原因で、2分の差であると考えました。
ジョーダン

6
それは質問に正しく答えません、分だけの差を計算するのではなく、差は日、時間、分を組み合わせて計算されます...したがって、差が1日1時間1分であれば、1と表示されます1501分ではなく、1日1時間1分
Akhil Gupta

170

2つのDateオブジェクトを引くと、ミリ秒単位の違いが得られます。例:

var diff = Math.abs(new Date('2011/10/09 12:00') - new Date('2011/10/09 00:00'));

Math.abs絶対差を使用できるようにするために使用されます(したがってnew Date('2011/10/09 00:00') - new Date('2011/10/09 12:00')、同じ結果が得られます)。

結果を1000で割ると、秒数がわかります。これを60で割ると、分数になります。分の全体に丸めるには、Math.floorまたはを使用しますMath.ceil

var minutes = Math.floor((diff/1000)/60);

この例では、結果は720になります


1
イップ。あるいは(Math.floor(seconds/60))+':'+((seconds/60)%60)、残りの秒数も必要な場合
KooiInc

4
私はこれがより良い答えだと思います。差が60分を超えると、受け入れられた答えが差を分に変換できないことに気づきました
sani

これも間違っています。12:00は00:00と同じにすることはできません
。12

1
彼らが同じだと言う@ダバター?彼は単に12時間-0時間は0時間-12時間と同じであると述べています。
Mark Ba​​ijens

古い答えですがnew Date(string)、ISO-8601形式の文字列以外の形式では使用しないでください。Date.parseが誤った結果を返す理由を参照してください、または単に数値を使用します(たとえば、new Date(2011, 9, 9, 12, 0, 0)月は0ベースであることに注意してください)。
異教の猿

52
var startTime = new Date('2012/10/09 12:00'); 
var endTime = new Date('2013/10/09 12:00');
var difference = endTime.getTime() - startTime.getTime(); // This will give difference in milliseconds
var resultInMinutes = Math.round(difference / 60000);

2
これは素晴らしくシンプルで、私にとってはうまくいきました。日付から.getTime()を削除しましたが、2つの日付を比較することが目的なので、より論理的に思えたためです。ありがとう。
Yos

古い答えですがnew Date(string)、ISO-8601形式の文字列以外の形式では使用しないでください。Date.parseが誤った結果を返す理由を参照してください、または単に数値を使用します(たとえば、new Date(2011, 9, 9, 12, 0, 0)月は0ベースであることに注意してください)。
異教の猿

46

この計算を実行する単純な関数:

function getMinutesBetweenDates(startDate, endDate) {
    var diff = endDate.getTime() - startDate.getTime();
    return (diff / 60000);
}

24

2つの日付の違いが分単位で表示されます。ブラウザで試してください:

const currDate = new Date('Tue Feb 13 2018 13:04:58 GMT+0200 (EET)')
const oldDate  = new Date('Tue Feb 13 2018 12:00:58 GMT+0200 (EET)')


(currDate - oldDate) / 60000 // 64

4
TypeScriptは、「算術演算の左辺と右辺はタイプ 'any'、 'number'、または列挙型でなければなりません」というエラーを返します。エラーを回避するには、次のようにしてください(currDate.getTime() - oldDate.getTime()) / 60000
Homer

12

少ない数で作業したい人のために

const today = new Date();
const endDate = new Date(startDate.setDate(startDate.getDate() + 7));
const days = parseInt((endDate - today) / (1000 * 60 * 60 * 24));
const hours = parseInt(Math.abs(endDate - today) / (1000 * 60 * 60) % 24);
const minutes = parseInt(Math.abs(endDate.getTime() - today.getTime()) / (1000 * 60) % 60);
const seconds = parseInt(Math.abs(endDate.getTime() - today.getTime()) / (1000) % 60); 

9

この問題は、次の例のように、moment.jsで簡単に解決できます。

var difference = mostDate.diff(minorDate, "minutes");

2番目のパラメーターは別のパラメーターに変更できます。moment.jsのドキュメントをご覧ください。

例:「日」、「時間」、「分」など

http://momentjs.com/docs/

moment.jsのCDNは次の場所にあります。

https://cdnjs.com/libraries/moment.js

ありがとう。

編集:

mostDateとminorDateはモーメント型である必要があります。


2

これは、nodeで同様の問題を解決したときの楽しみです。

function formatTimeDiff(date1, date2) {
  return Array(3)
    .fill([3600, date1.getTime() - date2.getTime()])
    .map((v, i, a) => {
      a[i+1] = [a[i][0]/60, ((v[1] / (v[0] * 1000)) % 1) * (v[0] * 1000)];
      return `0${Math.floor(v[1] / (v[0] * 1000))}`.slice(-2);
    }).join(':');
}

const millis = 1000;
const utcEnd = new Date(1541424202 * millis);
const utcStart = new Date(1541389579 * millis);
const utcDiff = formatTimeDiff(utcEnd, utcStart);

console.log(`Dates:
  Start   : ${utcStart}
  Stop    : ${utcEnd}
  Elapsed : ${utcDiff}
  `);

/*
Outputs:

Dates:
  Start   : Mon Nov 05 2018 03:46:19 GMT+0000 (UTC)
  Stop    : Mon Nov 05 2018 13:23:22 GMT+0000 (UTC)
  Elapsed : 09:37:02
*/

https://repl.it/@GioCirque/TimeSpan-Formattingで実際の動作を確認できます


0

次のコードは私のために働きました、

function timeDiffCalc(dateNow,dateFuture) {
    var newYear1 = new Date(dateNow);
    var newYear2 = new Date(dateFuture);

        var dif = (newYear2 - newYear1);
        var dif = Math.round((dif/1000)/60);
        console.log(dif);

}

0

次のように実行できます。

  1. Get difference of dates(差はミリ秒単位になります)
  2. 変換millisecondsminutesすなわちms/1000/60

コード:

let dateOne = new Date("2020-07-10");
let dateTwo = new Date("2020-07-11");

let msDifference =  dateTwo - dateOne;
let minutes = Math.floor(msDifference/1000/60);
console.log("Minutes between two dates =",minutes);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.