'2012-12-12' < '2013-11-12' // true
new Date('2012-12-12') < new Date('2013-11-12') // true
Ambos producen el mismo resultado. Pero cuando busco un código de ejemplo que compara la fecha del formato de cadena, todos lo convierten al tipo de fecha. Entonces, el primer ejemplo puede ser un problema, pero no estoy seguro de cuándo puede ser un problema. Déjame saber más detalles. ¡por favor!
'2012-12-12' < '2013-11-12' // verdadero
Compara las fechas como cadenas. Una ventaja del formato ISO 8601 es que las marcas de tiempo se comparan correctamente como cadenas siempre que el desplazamiento (si lo hay) sea el mismo. P.ej
'2022-01-06T09:00:00+10:00' < '2022-01-06T00:00:00Z'debería ser true , pero devuelve false , mientras que:
new Date('2022-01-06T09:00:00+10:00') < new Date('2022-01-06T00:00:00Z')devuelve verdadero (ver más abajo por qué). Pero comparar otros formatos de fecha como cadenas seguramente no funcionará, por ejemplo, usando el formato d/m/y:
01/03/2020 < 01/02/2021devuelve falso porque el "3" en "03" es mayor que el "2" en "02" y hasta ahí llega la comparación.
Entonces hay:
nueva fecha ('2012-12-12') < nueva fecha ('2013-11-12') // verdadero
que funciona porque ambas marcas de tiempo se analizan como UTC para producir un valor de tiempo (un valor numérico que es el desplazamiento de la fecha desde el 1 de enero de 1970 en milisegundos). El operador < obliga a los objetos Date a usar primitivas que, en este caso, llaman efectivamente a valueOf , que devuelve el valor de tiempo, por lo que la comparación se reduce a:
1355270400000 < 1384214400000Es por eso que las cadenas a menudo se analizan en objetos de fecha para comparar. Sin embargo, tenga en cuenta que mientras:
'2022-01-06' == '2022-01-06' // trueCuando se convierte a Fechas:
new Date('2022-01-06') == new Date('2022-01-06') // false porque dos objetos (Fecha u otro) nunca son == o === entre sí, entonces:
new Date(/* anything */) == new Date(/* anything */)siempre es falso, incluso si ambos objetos Date representan fechas no válidas. Si quieres ver si son iguales, compara los valores de tiempo:
new Date('2022-01-06').getTime() == new Date('2022-01-06').getTime()Pero tenga cuidado al analizar cadenas, consulte ¿Por qué Date.parse da resultados incorrectos?
¡Nunca use cadenas literales para fechas (especialmente en JavaScript donde todo es un pato) para comparar!
Dates y DateTimes son raros y extraños y en realidad no se pueden usar en la programación, pero como necesitamos hacer algo con ellos, "saltamos por completo, esto es una locura, parte".
Solo por diversión, es posible que desee leer la publicación de blog de Jon Skeet al respecto:https://codeblog.jonskeet.uk/2012/05/02/more-fun-with-datetime/
Pero solo por el bien del argumento, compare una fecha con una fecha literal que se resolverá en '2021-02-23' < 'AA' que también es verdadero o falso (no lo probé), pero para JavaScript la comparación es similar , no hay comparación de tipos, son solo valores.