¿Alguien puede sugerir una forma de comparar los valores de dos fechas mayores que, menores que y no en el pasado usando JavaScript? Los valores vendrán de cuadros de texto.
javascript
date
datetime
compare
Alex
fuente
fuente
Respuestas:
El objeto Date hará lo que usted quiere - una para cada constructo fecha, luego compararlas con el
>
,<
,<=
o>=
.El
==
,!=
,===
, y!==
los operadores requieren el usodate.getTime()
como enpara ser claros, solo verificar la igualdad directamente con los objetos de fecha no funcionará
Sin embargo, le sugiero que use menús desplegables o alguna forma restringida similar de entrada de fecha en lugar de cuadros de texto, para no encontrarse en el infierno de la validación de entrada.
fuente
setHours(0,0,0,0)
esta manera. Elimina la necesidad de llamar,setMinutes()
etc. Además, se ejecuta más rápido.toString()
método en ambas fechas y luego compararlo con el==
operador? Parece mucho más fácil que restablecer el tiempo y comparar después, ¿hay algún inconveniente para esto?La forma más fácil de comparar fechas en javascript es convertirlo primero en un objeto Fecha y luego comparar estos objetos fecha.
A continuación encontrará un objeto con tres funciones:
date.compare (a, b)
Devuelve un número:
date.inRange (d, inicio, fin)
Devuelve un booleano o NaN:
convertir fechas
Utilizado por las otras funciones para convertir su entrada en un objeto de fecha. La entrada puede ser
.
fuente
(a > b) - (a < b)
es útil para ordenar la matriz de fechasArray.prototype.sort
siempre que todos los valores sean fechas válidas. Si puede haber fechas no válidas, recomiendo usar algo comofunction ( a, b ) { a = a === undefined || a === null : NaN : a.valueOf( a ); b = a === undefined || b === null : NaN : a.valueOf( b ); return isFinite( a ) && isFinite( b ) ? ( a > b ) - ( a < b ) : NaN; }
return a - b
es más simple y reemplaza toda la declaración de devolución.Compare
<
y>
como de costumbre, pero cualquier cosa que implique=
debe usar un+
prefijo. Al igual que:¡Espero que esto ayude!
fuente
x.getTime() === y.getTime()
método, tanto legible como extremadamente rápido ver jsperf+
operador intenta convertir la expresión en un Número.Date.valueOf()
se usa para la conversión (que devuelve lo mismo queDate.getTime()
.<
,<=
,>
Y>=
utilizar el mismo algoritmo ( abstracta algoritmo de comparación relacional ) detrás de las escenas.Los operadores relacionales
<
<=
>
>=
se pueden usar para comparar fechas de JavaScript:Sin embargo, los operadores de igualdad
==
!=
===
!==
no se pueden usar para comparar (el valor de) las fechas porque :Puede comparar el valor de las fechas para la igualdad utilizando cualquiera de estos métodos:
Ambos
Date.getTime()
yDate.valueOf()
devuelven el número de milisegundos desde el 1 de enero de 1970 a las 00:00 UTC. Tanto laNumber
función como el+
operador unario llaman a losvalueOf()
métodos detrás de escena.fuente
Thursday, 10 Aug 2017
es un formato no estándar y diferentes navegadores pueden analizarlo de manera diferente o no analizarlo en absoluto. Ver notas enDate.parse
.Con mucho, el método más fácil es restar una fecha de la otra y comparar el resultado.
fuente
Comparar fechas en JavaScript es bastante fácil ... JavaScript tiene un sistema de comparación incorporado para las fechas, lo que facilita la comparación ...
Simplemente siga estos pasos para comparar el valor de 2 fechas, por ejemplo, tiene 2 entradas en las que cada una tiene un valor de Fecha
String
y puede compararlas ...1. tiene 2 valores de cadena que obtiene de una entrada y desea compararlos, son los siguientes:
2. Deben
Date Object
compararse como valores de fecha, así que simplemente conviértalos a fecha, usandonew Date()
, simplemente los reasigno por simplicidad de explicación, pero puede hacerlo de la manera que desee:3. Ahora simplemente compárelos, usando el
>
<
>=
<=
fuente
<
,>
,<=
,>=
) se utiliza, los objetos de fecha se convierten primero en Unix Epoch (segundos), y funciona bien. Sin embargo, esto podría llevar al error común de hacerdate1 == date2
donde efectivamente se introduce un error, ya que no se verifica el valor sino la igualdad de instancia. Para evitar esto y verificar la igualdad del valor de la fecha, esto funcionaría:date1.valueOf() == date2.valueOf()
o más cortodate1+0 == date2+0
Note: Parsing of strings with Date.parse is strongly discouraged due to browser differences and inconsistencies.
yNote: Parsing of date strings with the Date constructor (and Date.parse, they are equivalent) is strongly discouraged due to browser differences and inconsistencies.
Comparar solo día (ignorando el componente de tiempo):
Uso:
fuente
que formato
Si construye un objeto Fecha de Javascript , solo puede restarlos para obtener una diferencia de milisegundos (editar: o simplemente compararlos):
fuente
==
problema de comparación mencionado anteriormente.usas este código,
Y también revise este enlace http://www.w3schools.com/js/js_obj_date.asp
fuente
RESPUESTA CORTA
Aquí hay una función que devuelve {boolean} si from from DateTime> to dateTime Demo en acción
Explicación
jsFiddle
dado que ahora tiene ambos datetime en tipo de número, puede compararlos con cualquier operación de comparación
(>, <, =,! =, ==,! ==,> = AND <=)
Entonces
si está familiarizado con
C#
la cadena de formato de fecha y hora personalizada, esta biblioteca debe hacer exactamente lo mismo y ayudarlo a formatear su fecha y hora dtmFRM, ya sea que pase la cadena de fecha o el formato unixUso
MANIFESTACIÓN
todo lo que tiene que hacer es pasar cualquiera de estos formatos pacificados en el
js
archivo de la bibliotecafuente
La manera simple es,
fuente
Nota: Comparar solo la fecha Fecha:
Cuando comparamos dos fechas en javascript. También se necesitan horas, minutos y segundos. Entonces, si solo necesitamos comparar la fecha, este es el enfoque:
Ahora:
if date1.valueOf()> date2.valueOf()
funcionará como un encanto.fuente
fuente
a
yb
siendoDate
objetos que también puedes usarreturn a*1 == b*1;
+a == +b
fuente
Solo para agregar otra posibilidad a las muchas opciones existentes, podría intentar:
... lo que parece funcionar para mí. Por supuesto, debe asegurarse de que ambas fechas no estén indefinidas ...
De esta manera podemos asegurarnos de que se haga una comparación positiva si ambos están indefinidos también, o ...
... si prefieres que no sean iguales.
fuente
Via Moment.js
Jsfiddle: http://jsfiddle.net/guhokemk/1/
El método devuelve 1 si
dateTimeA
es mayor quedateTimeB
El método devuelve 0 si
dateTimeA
es igualdateTimeB
El método devuelve -1 si
dateTimeA
es menor quedateTimeB
fuente
Date
objetos.<
o>
los operadores cuando momento ya viene con los métodos de comparación útiles como.isBefore
y.isAfter
, que todo está en los documentosCUIDADO CON LA TIMEZONA
Una fecha de JavaScript no tiene noción de zona horaria . Es un momento en el tiempo (tics desde la época) con prácticas funciones para traducir hacia y desde cadenas en la zona horaria "local". Si desea trabajar con fechas utilizando objetos de fecha, como todos los que están aquí, quiere que sus fechas representen la medianoche UTC al comienzo de la fecha en cuestión. Esta es una convención común y necesaria que le permite trabajar con fechas independientemente de la temporada o zona horaria de su creación. Por lo tanto, debe estar muy atento para administrar la noción de zona horaria, especialmente cuando crea su objeto UTC Date de medianoche.
La mayoría de las veces, querrá que su fecha refleje la zona horaria del usuario. Haz clic si hoy es tu cumpleaños . Los usuarios de NZ y EE. UU. Hacen clic al mismo tiempo y obtienen fechas diferentes. En ese caso, haz esto ...
A veces, la comparabilidad internacional supera la precisión local. En ese caso, haz esto ...
Ahora puede comparar directamente sus objetos de fecha como sugieren las otras respuestas.
Habiendo tenido cuidado de administrar la zona horaria cuando crea, también debe asegurarse de mantener la zona horaria fuera cuando convierta nuevamente a una representación de cadena. Para que pueda usar con seguridad ...
toISOString()
getUTCxxx()
getTime() //returns a number with no time or timezone.
.toLocaleDateString("fr",{timezone:"UTC"}) // whatever locale you want, but ALWAYS UTC.
Y evita totalmente todo lo demás, especialmente ...
getYear()
`getMonth()
`getDate()
fuente
Digamos que obtuvo los objetos de fecha A y B, obtenga su valor de tiempo EPOC, luego reste para obtener la diferencia en milisegundos.
Eso es todo.
fuente
Para comparar dos fechas, podemos usar la biblioteca de JavaScript date.js que se puede encontrar en: https://code.google.com/archive/p/datejs/downloads
y usa el
Date.compare( Date date1, Date date2 )
método y devuelve un número que significa el siguiente resultado:-1 = fecha1 es menor que fecha2.
0 = los valores son iguales.
1 = date1 es mayor que date2.
fuente
Resta dos fechas y obtén la diferencia en milisegundos, si la obtienes
0
es la misma fechafuente
Para crear fechas a partir de texto libre en Javascript, debe analizarlo en el objeto Date ().
Puede usar Date.parse (), que toma texto libre para convertirlo en una nueva fecha, pero si tiene control sobre la página, recomendaría usar cuadros de selección HTML o un selector de fecha como el control de calendario YUI o la interfaz de usuario jQuery Selector de fechas .
Una vez que tenga una fecha como han señalado otras personas, puede usar aritmética simple para restar las fechas y convertirla nuevamente en una cantidad de días dividiendo la cantidad (en segundos) por la cantidad de segundos en un día (60 * 60 * 24 = 86400).
fuente
fuente
Una versión mejorada del código publicado por "algunos"
uso:
fuente
Si el siguiente es su formato de fecha, puede usar este código:
Verificará si el
20121121
número es mayor20121103
o no.fuente
first == second
ofirst < second
ofirst > second
. Esa es una de las muchas bellezas con ISO8601 en comparación con MM / DD / AA, DD / MM / AA, AA / DD / MM, DD / AA / MM o MM / AA / DD.Usualmente almaceno
Dates
comotimestamps(Number)
en bases de datos.Cuando necesito comparar, simplemente comparo entre esas marcas de tiempo o
conviértalo a Date Object y luego compárelo
> <
si es necesario.Tenga en cuenta que == o === no funciona correctamente a menos que sus variables sean referencias del mismo Objeto de fecha.
Convierta esos objetos de Fecha en marca de tiempo (número) primero y luego compare la igualdad de ellos.
Fecha a la marca de tiempo
Marca de tiempo hasta la fecha
fuente
Antes de comparar el
Dates
objeto, intente configurar ambos milisegundos como ceroDate.setMilliseconds(0);
.En algunos casos donde el
Date
objeto se crea dinámicamente en javascript, si sigue imprimiendoDate.getTime()
, verá que cambian los milisegundos, lo que evitará la igualdad de ambas fechas.fuente
Actuación
Hoy 2020.02.27 realizo pruebas de las soluciones elegidas en Chrome v80.0, Safari v13.0.5 y Firefox 73.0.1 en MacOs High Sierra v10.13.6
Conclusiones
d1==d2
(D) yd1===d2
(E) son más rápidas para todos los navegadoresgetTime
(A) es más rápida quevalueOf
(B) (ambas son medianamente rápidas)Detalles
A continuación se presentan las soluciones de fragmentos utilizadas en las pruebas de rendimiento. Puede realizar la prueba en su máquina AQUÍ
Mostrar fragmento de código
Resultados para el cromo
fuente
d1==d2
od1===d2
es inútil en el contexto de la pregunta.Use este código para comparar la fecha usando javascript.
Gracias D.Jeeva
fuente
fuente
Esto es lo que hice en uno de mis proyectos,
llamando a esto en el formulario de envío. espero que esto ayude.
fuente