Javascriptに2つのDateオブジェクトがあるとします。
var d1 = new Date('...');
var d2 = new Date('...');
比較を行います:
d1 < d2;
この比較では、常に時間、分、秒が考慮されます。
比較のために、年、月、日付のみを考慮に入れてほしい。
これを行う最も簡単な方法は何ですか?
jQueryも許可されます。
Javascriptに2つのDateオブジェクトがあるとします。
var d1 = new Date('...');
var d2 = new Date('...');
比較を行います:
d1 < d2;
この比較では、常に時間、分、秒が考慮されます。
比較のために、年、月、日付のみを考慮に入れてほしい。
これを行う最も簡単な方法は何ですか?
jQueryも許可されます。
、、、、およびをhours
リセットします。minutes
seconds
milliseconds
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()
代数的解法として、あなたはほんの少しの数学を実行することができます:
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;
}
日付ごとに、時間、分、秒を手動で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);
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