2009-09-11 17 views
5

me han tratado como éstecalcular la diferencia entre dos fechas

<script type="text/javascript"> 
    var date2=02/09/2009; 
    var date1=03/12/2009; 
    var diff = date1.getDate()-date2.getDate(); 
    alert (diff); 

</script> 

pero no está funcionando, es que la razón getDate funcionará sólo para Date?

¿Cómo encontrar la diferencia entre estas dos fechas? ¿No puedo usar esta función porque estoy agregando javascript en las páginas apex de Salesforce CRM?

Edición 1: de hecho esto también no trabajar

<script type="text/javascript"> 
    var date2= new Date ("02/09/2009"); 
    var date1= new Date ("04/09/2009"); 
    var diff = date1.getDate()-date2.getDate(); 
    alert (diff); 

</script> 

Edición 2: no su trabajo también ...

<script type="text/javascript"> 
    var date2= "02/09/2009"; 
    var date1= "04/09/2009"; 
    var diff2 = new Date(Date.parse("03/12/2009")- 
         Date.parse("02/09/2009")).toLocaleDateString(); 

// var NEW_DATE = new Date (1970, 01, 01); // var diff3 = diff2.getDate(); alerta (diff2);

</script> 
+0

Gracias a todos, solo respondo la respuesta porque si el usuario está ingresando como esta formación, ¿cómo puedo encontrar la diferencia? – joe

+2

¿alguien aquí sugirió usar 'nueva Fecha ('02/09/2009 ')'? ¿Por qué esperas que funcione? – SilentGhost

+0

Pero nuestro cliente requiere y da así ... Entonces necesito la solución para eso :-( – joe

Respuesta

17

<script language="JavaScript"> 
<!-- 
function dstrToUTC(ds) { 
var dsarr = ds.split("/"); 
var mm = parseInt(dsarr[0],10); 
var dd = parseInt(dsarr[1],10); 
var yy = parseInt(dsarr[2],10); 
return Date.UTC(yy,mm-1,dd,0,0,0); 
} 

function datediff(ds1,ds2) { 
var d1 = dstrToUTC(ds1); 
var d2 = dstrToUTC(ds2); 
var oneday = 86400000; 
return (d2-d1)/oneday; 
} 

// test cases are below 

var a; var b; 

a = "01/09/1999"; 
b = "01/10/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "01/12/1999"; 
b = "01/19/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "01/19/1999"; 
b = "01/12/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "01/03/1999"; 
b = "01/13/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "04/30/1999"; 
b = "05/01/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "05/30/1999"; 
b = "06/01/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "02/28/1999"; 
b = "03/01/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "02/28/2000"; 
b = "03/01/2000"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "01/01/1999"; 
b = "12/31/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "01/01/2000"; 
b = "12/31/2000"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "12/15/1999"; 
b = "01/15/2001"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

// --> 
</script> 
0

Here se explica cómo encontrar la diferencia entre dos fechas en javascript

1
diff.setTime(Math.abs(date1.getTime() - date2.getTime())); 

timediff = diff.getTime(); 

weeks = Math.floor(timediff/(1000 * 60 * 60 * 24 * 7)); 
timediff -= weeks * (1000 * 60 * 60 * 24 * 7); 

days = Math.floor(timediff/(1000 * 60 * 60 * 24)); 
timediff -= days * (1000 * 60 * 60 * 24); 

hours = Math.floor(timediff/(1000 * 60 * 60)); 
timediff -= hours * (1000 * 60 * 60); 

mins = Math.floor(timediff/(1000 * 60)); 
timediff -= mins * (1000 * 60); 

secs = Math.floor(timediff/1000); 
timediff -= secs * 1000; 

alert(weeks + " weeks, " + days + " days, " + hours + " hours, " + mins + " minutes, and " + secs + " seconds"); 
+0

¿No crees que es un poco redundante que establezcas la diferencia horaria en otro objeto de fecha? date1.getTime() - date2.getTime() devolvería la diferencia en milisegundos de todos modos. –

1
  1. getDate() Devuelve el día del mes , en su caso: 9 y 12.
  2. Debe definir explícitamente objetos de fecha a través de lo siguiente. Meses son 0-basan, por lo tanto, 0 = Enero, 1 = Febrero ...

    var la fecha 2 = new Date (2009, 1, 9);

  3. Estos son números, no una cadena. Cuando desee utilizar una cadena para la fecha, necesita exactamente ese formato, nada es opcional:

    var newDate = new Date ("mes día, año horas: minutos: segundos"); var date2 = new Date ("9 de febrero de 2009 00:00:00");

[Editar] Solución completa, si las fechas están en formato mm/dd/aaaa, y la diferencia debe estar en días:

<script type="text/javascript"> 
    function daysFromString(dateString) 
    { 
     // split strings at/and return array 
     var splittedString = dateString.split("/"); 
     // make a new date. Caveat: Months are 0-based in JS 
     var newDate = new Date(parseInt(splittedString[2], 10), parseInt(splittedString[0], 10)-1, parseInt(splittedString[1], 10)); 
     // returns days since jan 1 1970 
     return Math.round(newDate.getTime()/(24*3600*1000)); 
    } 

    var dateString2 = "02/09/2009"; 
    var dateString1= "03/12/2009"; 
    var dateDays1 = daysFromString(dateString1); 
    var dateDays2 = daysFromString(dateString2); 
    var diff = dateDays1 - dateDays2; 
    alert (diff); 
</script> 
+0

Deberá especificar la base 10 con parseInt. Si no lo hace, no maneja adecuadamente cosas como "08" y "09". –

+0

Y olvidaste el horario de verano. –

+0

@Robert L: Gracias por ambas sugerencias, edité mi respuesta en consecuencia. – Residuum

2

getDate es un método de Date objeto. como cualquier documento indica claramente que devuelve el día del mes en el rango de 0 a 31. no tendría sentido tratar de restar uno de otro si no es el mismo mes.

1

uso Date.parse (fecha1) - Date.parse (la fecha 2)

+0

me devuelve "nan" – joe

+0

asegúrate de que date1 y date2 sean cadenas – Khodor

4

la fecha 2 = 02/09/2009 no se considera que sea una fecha. funciona de esta manera. Primero entrega 02/09, devuelve 0.2222222222222222 y ha sido dividido por 2009 (0.2222222222222222/2009). finalmente obtienes un resultado date2 = 0.0001106133510314695. De la misma manera calcula el resultado de la fecha1.

esto no es una operación válida. Si quisiera definir la fecha. asegúrese de que haya colocado los datos en un formato de fecha correcto.

uso ya sea new Date() o Date.parse ("02/09/2009")

Editar:

new Date(Date.parse("03/12/2009")-Date.parse("02/09/2009")).toLocaleDateString() Or 
    new Date(date1- date2).toLocaleDateString() 

isnt que el trabajo .. ??

Editar:

puede ser esto va a funcionar .. u puede probar este ..

Date.parse("03/12/2009")-Date.parse("02/09/2009")/(24*60*60*1000) 

y se devuelve 31 días

parece trabajar para mí .. pero en mi zona horaria tomó 03/12/2009 como 3er mes 11er día y año 2009

(24 * 60 * 60 * 1000) = Número de milisegundos nds por día

+0

no se muestra 01/02/1970 de esta manera ... solo quiero diferencia de días – joe

-1
<script type="text/javascript"> 
function GetD() 
{ 
    var date1 = new Date (2009 , 09 , 02); 
    var date2 = new Date (2009 , 12 , 03);   

    var diff = days_between (date1,date2); 
    alert (diff); 
} 
function days_between(date1, date2) { 

    // The number of milliseconds in one day 
    var ONE_DAY = 1000 * 60 * 60 * 24; 

    // Convert both dates to milliseconds 
    var date1_ms = date1.getTime(); 
    var date2_ms = date2.getTime(); 

    // Calculate the difference in milliseconds 
    var difference_ms = Math.abs(date1_ms - date2_ms); 

    // Convert back to days and return 

    return Math.round(difference_ms/ONE_DAY); 
} 
</script> 
+0

Olvidaste: la numeración de los meses de JavaScript está desactivada por 1. –

0

sí. Debe utilizar Fecha objeto, como esto

var d = new Date(2009,9,19); //19th october, months are 0-based 
var d2 = new Date(2009,10,12); 
var diff = (d2 - d)/60000; //diff in minutes 
alert(diff/24); //difference in hours 
0

Trate

var diff2 = Date.parse("03/12/2009") - Date.parse("02/09/2009"); 

que le dará la diferencia entre la fecha en milisegundos. Divida este número por 86,400,000 y la diferencia será en días.

Cuestiones relacionadas