2011-11-21 38 views
45

Tengo una entrada de formulario con una identificación de 'date_trans'. El formato para que la entrada de la fecha (que se validó lado del servidor) puede ser cualquiera de:¿Cómo verificar si la fecha de entrada es igual a la fecha de hoy?

  • dd/mm/aaaa
  • dd-mm-aaaa
  • aaaa-mm-dd
  • aaaa/mm/dd

Sin embargo, antes de publicar el formulario, me gustaría verificar si el campo date_trans tiene una fecha igual a la de hoy. Está bien si la fecha tomada es la fecha del cliente (es decir, usa js), ya que también ejecuto una verificación doble en el servidor.

Estoy totalmente perdido en cómo hacer la comparación de fechas en jQuery o simplemente viejo javascript. Si ayuda, estoy usando el jquery datepicker

+0

Por cierto, esos son algunos formatos de fecha tontas que va a aceptar. Si tiene algún control sobre la decisión de aceptarlos, le sugiero que reconsidere la utilidad/necesidad de todos ellos. – Phrogz

+0

¿Qué tiene de tonto? Operamos en varios países, y son formatos aceptados. Supongo que piensas que todos trabajan en el (ridículo) formato de EE. UU. – JonoB

+0

¡Dios mío, no! El formato de EE. UU. Es espantoso, pero no está presente en su lista y, sin embargo, se confundiría fácilmente con su primer caso. Si está seguro de que los cuatro son necesarios, utilícelos. Para mí, parece que has elegido ser tanto arbitrariamente permisivo como arbitrariamente restrictivo al mismo tiempo. * encogerse de hombros * – Phrogz

Respuesta

-4

¿Has mirado datejs? (utilizando el paquete de globalización apropiado para analizar dd/mm/aaaa correctamente)

Simplemente pase la fecha en su método parse() y compárelo con la fecha de hoy.

7
function sameDay(d1, d2){ 
    return d1.getUTCFullYear() == d2.getUTCFullYear() && 
     d1.getUTCMonth() == d2.getUTCMonth() && 
     d1.getUTCDate() == d2.getUTCDate(); 
} 

if (sameDay(new Date(userString), new Date)){ 
    // ... 
} 

Utilizando los métodos UTC * asegura que dos días equivalentes en diferentes zonas horarias que coinciden con el mismo día mundial son los mismos. (No es necesario si está analizando ambas fechas directamente, pero es algo bueno para pensar).

+0

Debe mencionar que este es realmente el índice del mes y no el número del mes en sí, así que uno necesita agregar 1 –

+0

¿No sería más rápido en la mayoría de los casos verificar primero días iguales, luego mes y año? –

+0

@ xcy7e 웃 Depende de los datos de entrada, pero posiblemente. Sin embargo, si puedes crear un caso de prueba donde esto realmente haga una diferencia mensurable, estaré muy impresionado. – Phrogz

0

Date.js es una práctica biblioteca para manipular y formatear fechas. Puede ayudar en esta situación.

+1

¿Es necesario usar Date.js solo para la comparación de fechas? – Exception

+0

No, no es así. Pero si las fechas están en diferentes formatos, Date.js es útil para normalizarlas. –

136

Una comparación simple cita en JS puro debe ser suficiente:

// Create date from input value 
var inputDate = new Date("11/21/2011"); 

// Get today's date 
var todaysDate = new Date(); 

// call setHours to take the time out of the comparison 
if(inputDate.setHours(0,0,0,0) == todaysDate.setHours(0,0,0,0)) { 
    // Date equals today's date 
} 

Aquí es a working JSFiddle.

+1

+1 para usar la versión horas/minutos/segundos/ms de 'setHours'. – Phrogz

+3

No funciona si el formato de fecha es "21-11-2011" o "21/11/2011" – JonoB

+4

No olvide clonar la fecha de entrada si desea volver a utilizarla. ==> Usar newDate (date.valueOf()). SetHours (0,0,0,0) –

4

Sólo tiene que utilizar el siguiente código en su javascript:

if(new Date(hireDate).getTime() > new Date().getTime()) 
{ 
//Date greater than today's date 
} 

cambiar la condición de acuerdo a su requirement.Here es un eslabón de comparación compare in java script

18

trate de usar moment.js

moment('dd/mm/yyyy').isSame(Date.now(), 'day'); 

Puede reemplazar la cadena 'día' por 'año, mes, minuto' si lo desea.

55

esté completo, tomado de this solution:

usted podría utilizar toDateString:

var today = new Date(); 
var isToday = (today.toDateString() == otherDate.toDateString()); 

sin dependencias de la biblioteca, y mirando más limpio que los 'setHours()' enfoque se muestra en una respuesta anterior, en mi humilde opinión

+0

Esto es complicado. En el caso de un reloj angular tengo newDates [i] = 1476252000000 y oldDates [i] === 1476252000000. Sin embargo, no son iguales. Date.parse (newDates [1]) === Date.parse (oldDates [1]) devuelve falso. – Winnemucca

+0

@Winnemucca Devuelve 'true' para mí para los valores dados. No tiene que usar 'Date.parse' para comprobar la igualdad – User528491

-1
TodayDate = new Date(); 
if (TodayDate > AnotherDate) {} else{} 

< = también funciona, aunque con =, podría tener que coincidir con los milisegundos.

+0

Esto no funciona si la fecha también tiene un tiempo. –

0

La siguiente solución compara el número entero de la marca de tiempo dividido por los valores de horas, minutos, segundos, milis.

var reducedToDay = function(date){return ~~(date.getTime()/(1000*60*60*24));}; 
return reducedToDay(date1) == reducedToDay(date2) 

Los truncs tilde el resultado de la división (ver this article about integer division)

Cuestiones relacionadas