2010-12-13 11 views

risposta

79

È possibile utilizzare valueOf() o getTime():

a = new Date(1995,11,17); 
b = new Date(1995,11,17); 

a.getTime() === b.getTime() // prints true 
+0

cosa strana è che a> = opere B, ma a == b fallisce! –

+9

Perché in caso di '> =' i valori vengono convertiti in numeri. Nel caso di '==' gli oggetti vengono confrontati da soli (e solo 'a == a' sarebbe vero). –

+3

che significa, un <=b && a> = b può risolvere il problema –

6

Hellnar,

si potrebbe provare (pardon il nome della funzione :) - modificato per valueOf di Felix, piuttosto che getTime)

function isEqual(startDate, endDate) { 
    return endDate.valueOf() == startDate.valueOf(); 
} 

utilizzo:

if(isEqual(date1, date2)){ 
    // do something 
} 

potrebbe ottenere parte del modo lì.

vedi anche:

'http://www.java2s.com/Tutorial/JavaScript/0240__Date/DatevalueOf.htm'

3

sottraili e confronta a zero:

var date1 = new Date(); 
var date2 = new Date(); 

// fare qualcosa con t si risale ...

(date1 - date2) ? alert("not equal") : alert("equal"); 

per metterlo in una variabile:

var datesAreSame = !(date1 - date2); 
27

Ho usato questo codice:

Date.prototype.isSameDateAs = function(pDate) { 
    return (
    this.getFullYear() === pDate.getFullYear() && 
    this.getMonth() === pDate.getMonth() && 
    this.getDate() === pDate.getDate() 
); 
} 

Poi basta chiamare in: if (aDate.isSameDateAs(otherDate)) { ... }

+0

Perché dovresti eseguire una dozzina di funzioni quando puoi usare getTime() solo due volte? Oh, stavi pensando di ignorare le differenze in ora, mese e anno? In tal caso, forse le considerazioni sul fuso orario iniziano a essere importanti? – ErikE

+7

Poiché la domanda era "due diversi oggetti data hanno le stesse informazioni di data", e questo codice fa proprio questo: confronta le date indipendentemente dal tempo – Incidently

+2

er, volevo dire "ignorando le differenze in ore, minuti e secondi" – ErikE

6

Digitare convertire in numeri interi:

a = new Date(1995,11,17); 
b = new Date(1995,11,17); 
+a === +b; //true 
+2

uso fantastico di Operatore unario – KingOfHypocrites

16

Se si desidera verificare solo se le date si verificano nello stesso giorno indipendentemente dall'ora, è possibile utilizzare lo toDateString()method da confrontare. Questo metodo restituisce solo la data senza tempo:

var start = new Date('2015-01-28T10:00:00Z'); 
var end = new Date('2015-01-28T18:00:00Z'); 

if (start.toDateString() === end.toDateString()) { 
    // Same day - maybe different times 
} else { 
    // Different day 
} 
+0

@ iosDev82 terminato. – cyberwombat

0

Una semplice linea alternativa singolo per determinare se sono uguali due date, ignorando la parziale:

function isSameDate(a, b) { 
    return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay(); 
} 

Si determina se date A e B non differiscono più di un giorno e condividere lo stesso giorno della settimana.

function isSameDate(a, b) { 
 
    return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay(); 
 
} 
 

 
console.log(isSameDate(new Date(2017, 7, 21), new Date(2017, 7, 21))); //exact same date => true 
 
console.log(isSameDate(new Date(2017, 7, 21, 23, 59, 59), new Date(2017, 7, 21))); //furthest same dates => true 
 
console.log(isSameDate(new Date(2017, 7, 20, 23, 59, 59), new Date(2017, 7, 21))); //nearest different dates => false 
 
console.log(isSameDate(new Date(2016, 7, 21), new Date(2017, 7, 21))); //different year => false 
 
console.log(isSameDate(new Date(2017, 8, 21), new Date(2017, 7, 21))); //different month => false

0

Per un migliore utilizzo di supporto data momento.js e isSame metodo

var starDate = moment('2018-03-06').startOf('day'); 
var endDate = moment('2018-04-06').startOf('day'); 

console.log(starDate.isSame(endDate)); // false (month is different) 

var starDate = moment('2018-03-06').startOf('day'); 
var endDate = moment('2018-03-06').startOf('day'); 

console.log(starDate.isSame(endDate)); // true (year, month and day are the same) 
Problemi correlati