2010-06-09 14 views
35

Tengo dos campos de cadena que representan Fechas en mi página y me gustaría comparar estos dos campos para saber si mi primera fecha es < segunda fecha. ¿Cómo puedo hacer esto?Cómo comparar dos valores de fecha con jQuery

<tr> 
    <td align="right">First Date: </td> 
    <td align="left"> <html:text name="addPublicationForm" styleId="firstDate" property="firstDate" maxlength="10"/></td> 
</tr> 
<tr> 
    <td align="right">Second Date: </td> 
    <td align="left"> <html:text name="addPublicationForm" styleId="secondDate" property="secondDate" maxlength="10"/></td> 
</tr> 

Respuesta

2

vez que son capaces de analizar esas cadenas en un objeto Date comparándolos es fácil (Usando el operador <). El análisis de las fechas dependerá del formato. Puede echar un vistazo al Datejs que podría simplificar esta tarea.

+0

quiero usar el validador de jquery – Mercer

+0

+1 para una respuesta correcta del 100%. @downvote, por favor, ilumínanos por lo que está mal aquí. – jAndy

+0

@Mercer, ¿de qué estás hablando? ¿Te refieres a algún complemento? –

23

Si también está utilizando jQuery UI, en particular, datepicker, puede utilizar $.datepicker.parseDate(format, string) para convertir sus cadenas de fecha en un objeto JavaScript Date, que luego se puede comparar con el patrón de control < y >

+1

No debería convertirse el objeto 'Fecha' devuelto por el código en milisegundos usando' Date.parse' (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/ parse? redirectlocale = en-US & redirectslug = JavaScript% 2FReference% 2FGlobal_Objects% 2FDate% 2Fparse) antes de hacer la comparación? –

+0

El análisis de las cadenas de fecha con el constructor Fecha (y Date.parse, son equivalentes) no se recomienda debido a las diferencias e incoherencias del navegador: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date # Two_digit_years_map_to_1900 _-_ 1999 –

48
var startDt=document.getElementById("startDateId").value; 
var endDt=document.getElementById("endDateId").value; 

if((new Date(startDt).getTime() > new Date(endDt).getTime())) 
{ 
    ---------------------------------- 
} 
6
var startDate = $('#start_date').val().replace('-','/'); 
var endDate = $('#end_date').val().replace('-','/'); 

if(startDate > endDate){ 
    // do your stuff here... 
} 
+0

¿Sabes por qué el mío está fallando? http://stackoverflow.com/questions/32015131/why-does-the-each-function-in-jquery-not-iterate – Si8

+1

el segundo "-" no se reemplaza, pruebe/-/g. – Bhimbim

+0

hola, esta función funcionará, pero como se indicó anteriormente, solo se reemplazará una de hypen para que pueda usar var startDate = $ ('# start_date'). Val(). Replace ('-', '/'). reemplazar('-','/'); var endDate = $ ('# end_date'). Val(). Replace ('-', '/'). Replace ('-', '/'); if (startDate> endDate) { // haga sus cosas aquí ... } –