3

Javascriptに2つのDateオブジェクトがあるとします。

var d1 = new Date('...');
var d2 = new Date('...');

比較を行います:

d1 < d2;

この比較では、常に時間、分、秒が考慮されます。

比較のために、年、月、日付のみを考慮に入れてほしい。

これを行う最も簡単な方法は何ですか?

jQueryも許可されます。

4

4 に答える 4

9

、、、、およびをhoursリセットします。minutessecondsmilliseconds

var d1 = new Date();
d1.setHours(0);
d1.setMinutes(0);
d1.setSeconds(0);
d1.setMilliseconds(0);

またはsetHours、冗長性の少ないを使用します。

var d1= new Date();
d1.setHours(0, 0, 0, 0);

そして最後に、結果Dateのが同じ使用であるかどうかを比較するにはgetTime()

d1.getTime() == d2.getTime()
于 2012-09-20T17:25:31.813 に答える
2

代数的解法として、あなたはほんの少しの数学を実行することができます:

function sameDay(d1, d2) {
    return d1 - d1 % 86400000 == d2 - d2 % 86400000
}

方程式は実際には次のように分解されます。

function sameDay(d1, d2) {
    var d1HMS, //hours, minutes, seconds & milliseconds
        d2HMS,
        d1Day,
        d2Day,
        result;
    //d1 and d2 will be implicitly cast to Number objects
    //this is to be explicit
    d1 = +d1;
    d2 = +d2;
    //1000 milliseconds in a second
    //60 seconds in a minute
    //60 minutes in an hour
    //24 hours in a day
    //modulus used to find remainder of hours, minutes, seconds, and milliseconds
    //after being divided into days
    d1HMS = d1 % (1000 * 60 * 60 * 24);
    d2HMS = d2 % (1000 * 60 * 60 * 24);
    //remove the remainder to find the timestamp for midnight of that day
    d1Day = d1 - d1HMS;
    d2Day = d2 - d2HMS;
    //compare the results
    result = d1Day == d2Day;
    return result;
}

Dateこれには、元のオブジェクトのデータが失われないという利点があります。これsetHoursは、参照されるオブジェクトなどが変更されるためです。

または、を使用した安全なsameDay関数は次のsetHoursように記述できます。

function sameDay(d1, d2) {
    var a,
        b;
    a = new Date(+d1);
    b = new Date(+d2);
    a.setHours(0, 0, 0, 0);
    b.setHours(0, 0, 0, 0);
    return +a == +b;
}
于 2012-09-20T17:52:07.827 に答える
1

日付ごとに、時間、分、秒を手動で0に設定できます。

var d1 = new Date('...');
d1.setHours(0);
d1.setMinutes(0);
d1.setSeconds(0);

var d2 = new Date('...');
d2.setHours(0);
d2.setMinutes(0);
d2.setSeconds(0);
于 2012-09-20T17:25:42.330 に答える
1

DateオブジェクトをISO日付形式("2012-09-20")に変換します。これは、辞書式順序で文字列として比較できます。

function compareDates(d1, d2) {
  var isoDate1 = d1.toISOString().substr(0, 10)
  var isoDate2 = d2.toISOString().substr(0, 10)
  return isoDate1.localeCompare(isoDate2)
}
compareDates(new Date("2010-01-01"), new Date("2010-01-01")) // => 0
compareDates(new Date("2010-01-01"), new Date("2012-01-01")) // => -1
compareDates(new Date("2012-01-01"), new Date("2010-01-01")) // => 1
于 2012-09-20T17:26:26.810 に答える