2008-12-03 10 views

Respuesta

200
if (date1.getTime() > date2.getTime()) { 
    alert("The first date is after the second date!"); 
} 

Reference to Date object

+2

tuve esa sugerencia, pero la función getTime devuelve un valor indefinido. No creo haber entendido el getTime(). ¿Se supone que es una función predefinida? –

+1

Espero que esto ayude http://www.comptechdoc.org/independent/web/cgi/javamanual/javadate.html – IsmailS

+3

Parece que Chrome y Firefox son compatibles con 'date1> date2', es decir, sin la parte getTime(). Alguien sabe sobre los otros navegadores? –

4

Usted puede utilizar el método getTime() en un objeto Date para obtener la marca de tiempo (en milisegundos) con relación a 1 de enero de 1970. Si convierte sus dos fechas en número entero marcas de tiempo, puede comparar la diferencia restando. El resultado será en milisegundos, por lo que solo se divide entre 1000 por segundos, luego 60 por minutos, etc.

6

Las fechas de JavaScript se pueden comparar utilizando los mismos operadores de comparación que utilizan los demás tipos de datos:>, <, < = ,> =, ==,! =, ===,! ==.

Si tiene dos fechas A y B, entonces A < B si A es aún más atrás en el pasado que B.

Pero parece que lo tienes problemas con es convertir una cadena en una fecha . Se hace eso simplemente pasando la cadena como un argumento para una nueva fecha:

var someDate = new Date("12/03/2008"); 

o, si la cadena que desea es el valor de un campo de formulario, ya que parece que podría ser:

var someDate = new Date(document.form1.Textbox2.value); 

En caso de que esa cadena no sea algo que JavaScript reconozca como una fecha, igual recibirá un objeto Date, pero será "inválido". Cualquier comparación con otra fecha devolverá falso. Cuando se convierte en una cadena, se convertirá en "Fecha no válida". Su función getTime() devolverá NaN, y la invocación de isNaN() en la fecha misma devolverá verdadero; esa es la manera fácil de verificar si una cadena es una fecha válida.

+1

¿Qué ocurre si la cadena no se puede analizar en una fecha? –

+0

Entonces todavía obtienes un objeto Date, pero no es válido. Cualquier comparación con otra fecha devolverá falso. Su función getTime() devolverá NaN, y la invocación de isNaN() en la fecha misma devolverá verdadero. Cuando se convierte en una cadena, se convertirá en "Fecha no válida". –

+21

Esto no funciona con == (al menos en Firefox). Comparando dos fechas directamente siempre devuelve falso, tienes que usar getTime() como se mencionó anteriormente. –

1

Prefiero usar el método valueOf Fecha en lugar de o ===! ==

parece que está comparando === referencias y nada acerca de la fecha del objeto interno.

0

Usted podría intentar agregar el siguiente código de script para implementar esta:

if(CompareDates(smallDate,largeDate,'-') == 0) { 
    alert('Selected date must be current date or previous date!'); 
return false; 
} 

function CompareDates(smallDate,largeDate,separator) { 
    var smallDateArr = Array(); 
    var largeDateArr = Array(); 
    smallDateArr = smallDate.split(separator); 
    largeDateArr = largeDate.split(separator); 
    var smallDt = smallDateArr[0]; 
    var smallMt = smallDateArr[1]; 
    var smallYr = smallDateArr[2]; 
    var largeDt = largeDateArr[0]; 
    var largeMt = largeDateArr[1]; 
    var largeYr = largeDateArr[2]; 

    if(smallYr>largeYr) 
     return 0; 
else if(smallYr<=largeYr && smallMt>largeMt) 
    return 0; 
else if(smallYr<=largeYr && smallMt==largeMt && smallDt>largeDt) 
    return 0; 
else 
    return 1; 
} 
10
new Date('1945/05/09').valueOf() < new Date('2011/05/09').valueOf() 
+0

hola usa este formato entonces es var dt = new Fecha ("2016-01-01") entonces el tiempo no es cero, se muestra incorrectamente – Paresh3489227

+0

perdón ¿qué hay de malo en el formato o lo que le preocupa? –

+0

funciona bien gracias – Paresh3489227

0

Puede probar el código de verificación que valor de fecha es la más alta de dos fechas con un formato MM/DD/AAAA :

function d_check() { 
    var dl_sdt=document.getElementIdBy("date_input_Id1").value; //date one 
    var dl_endt=document.getElementIdBy("date_input_Id2").value; //date two 

    if((dl_sdt.substr(6,4)) > (dl_endt.substr(6,4))) { 
     alert("first date is greater"); 
     return false; 
    } 

    else if((((dl_sdt.substr(0,2)) > (dl_endt. 
     substr(0,2)))&&(frdt(dl_sdt.substr(3,2)) > (dl_endt.substr(3,2))))|| 
     (((dl_sdt.substr(0,2)) > (dl_endt.substr(0,2)))&& 
     ((dl_sdt.substr(3,2)) < (dl_endt.substr(3,2))))|| 
     (((dl_sdt.substr(0,2)) == (dl_endt.substr(0,2)))&&((dl_sdt.substr(3,2)) > 
     (dl_endt.substr(3,2))))) { 
      alert("first date is greater"); 
     return false; 
    } 

    alert("second date is digher"); 
    return true; 
} 

/* para comprobar esto .... crear un formulario y darle formato de fecha de a dos inputs.The fecha debe ser Identificación del dd/mm/aaaa o dd-mm-aaaa o mm: dd: aaaa o mm.dd.aaaa así.*/

+0

Muy buena función, excepto por una pequeña cosa. Se asume que la entrada del usuario siempre seguirá un patrón de fecha dado (el uso de subcadenas). Creo que podría usar esto, aunque con alguna validación de entrada, gracias. – Kingsolmn

+0

Esto hace algunas suposiciones grandes sobre el formato de fecha y no utiliza estándares internacionales de fecha. – Hennaz

1
function fn_DateCompare(DateA, DateB) {  // this function is good for dates > 01/01/1970 

    var a = new Date(DateA); 
    var b = new Date(DateB); 

    var msDateA = Date.UTC(a.getFullYear(), a.getMonth()+1, a.getDate()); 
    var msDateB = Date.UTC(b.getFullYear(), b.getMonth()+1, b.getDate()); 

    if (parseFloat(msDateA) < parseFloat(msDateB)) 
     return -1; // lt 
    else if (parseFloat(msDateA) == parseFloat(msDateB)) 
     return 0; // eq 
    else if (parseFloat(msDateA) > parseFloat(msDateB)) 
     return 1; // gt 
    else 
     return null; // error 
} 
+1

Agregar uno a 'a/b.getMonth()' hace que January, que es '0', se convierta en' 1', lo que se traduce como febrero en el método Date.UTC. Vea el artículo de mdn: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC. La sección de valores aceptables para el parámetro 'mes'. Intenta comparar, por ejemplo, las fechas '2/1/2017' y '1/31/2017' usando tu función. – papiro

0
function validateform() 
    { 
    if (trimAll(document.getElementById("<%=txtFromDate.ClientID %>").value) != "") { 
    if (!isDate(trimAll(document.getElementById("<%=txtFromDate.ClientID %>").value))) 
     msg = msg + "<li>Please enter valid From Date in mm/dd/yyyy format\n"; 
    else { 
     var toDate = new Date(); 
     var txtdate = document.getElementById("<%=txtFromDate.ClientID %>").value; 
     var d1 = new Date(txtdate) 
    if (Date.parse(txtdate) > Date.parse(toDate)) {     
     msg = msg + "<li>From date must be less than or equal to today's date\n"; 
    } 
    } 
} 

    if (trimAll(document.getElementById("<%=txtToDate.ClientID %>").value) != "") { 
      if (!isDate(trimAll(document.getElementById("<%=txtToDate.ClientID %>").value))) 
       msg = msg + "<li>Please enter valid To Date in mm/dd/yyyy format\n"; 
      else { 
       var toDate = new Date(); 
       var txtdate = document.getElementById("<%=txtToDate.ClientID %>").value; 
       var d1 = new Date(txtdate) 

       if (Date.parse(txtdate) > Date.parse(toDate)) { 
        msg = msg + "<li>To date must be less than or equal to today's date\n"; 
        } 
       } 
       } 
Cuestiones relacionadas