2010-12-13 9 views

Respuesta

79

Puede utilizar valueOf() o getTime():

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

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

cuál es extraño es que a> = b funciona, pero a == b falla! –

+9

Porque en el caso de '> =' los valores se convierten en números. En el caso de '==', los objetos se comparan entre sí (y solo 'a == a' sería verdadero). –

+3

lo que significa que <=b && a> = b puede resolver el problema –

6

Hellnar,

podría intentar (perdón por el nombre de la función :) - modificado por valordel de Félix, en lugar de getTime)

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

uso:

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

podría conseguir que parte del camino allí.

ver también:

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

3

reste y compare con cero:

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

// hacer algo con t que data ...

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

Para ponerlo en una variable:

var datesAreSame = !(date1 - date2); 
27

He utilizado este código:

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

A continuación, sólo llamar así: if (aDate.isSameDateAs(otherDate)) { ... }

+0

¿Por qué ejecutarías una docena de funciones cuando puedes usar getTime() solo dos veces? Oh, ¿estabas pensando en ignorar las diferencias en hora, mes y año? En ese caso, ¿quizás las consideraciones de zona horaria comienzan a importar? – ErikE

+7

Porque la pregunta era "dos objetos de fecha diferentes tienen la misma información de fecha", y este código hace exactamente eso: compara fechas independientemente del tiempo – Incidently

+2

er, quise decir "ignorar las diferencias en hora, minuto y segundo" – ErikE

6

Escriba convertir a enteros:

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

uso increíble de Operador unario – KingOfHypocrites

16

Si solo está interesado en verificar si las fechas se producen el mismo día, independientemente de la hora, puede usar el toDateString()method para comparar. Este método devuelve sólo la fecha sin tiempo:

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 hecho. – cyberwombat

0

Un simple alternativa de una sola línea para determinar si dos fechas son iguales, haciendo caso omiso de la pieza del tiempo:

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

Determina si las fechas A y B difieren no más de un día y comparta el mismo día de la semana.

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

Para un mejor uso de apoyo fecha momento.js y isSame método

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) 
Cuestiones relacionadas