2009-09-11 26 views
5

ho provato come questocalcolando la differenza tra due date

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

</script> 

ma non funziona, è che la ragione getDate funziona solo per Date?

Come trovare la differenza tra queste due date? Non sono in grado di utilizzare questa funzione, perché sto aggiungendo javascript nelle pagine apex di salesforce CRM?

Edit 1: infatti anche questo non funziona

<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> 

Edit 2: non il suo lavoro troppo ...

<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(); Avviso (diff2);

</script> 
+0

Grazie a tutti, rispondo alla risposta solo se l'utente sta entrando come questa formazione, come posso trovare la differenza? – joe

+2

qualcuno qui suggerì di usare 'new Date ('02/09/2009 ')'? perché ti aspetti che funzioni? – SilentGhost

+0

Ma il nostro cliente ha richiesto e dato così ... Quindi ho bisogno della soluzione per questo :-( – joe

risposta

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 è spiegato come trovare la differenza tra due date in 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

Non pensi che sia un po 'ridondante che stai impostando la differenza di fuso orario con un altro oggetto data? date1.getTime() - date2.getTime() restituirebbe comunque la differenza in millisecondi. –

1
  1. getDate() restituisce il giorno del mese , nel tuo caso: 9 e 12.
  2. È necessario definire in modo esplicito gli oggetti data tramite quanto segue. Mesi sono 0-based, quindi 0 = gennaio, 1 = febbraio ...

    var date2 = new Date (2009, 1, 9);

  3. Questi sono numeri, non una stringa. Quando si desidera utilizzare una stringa per la data, è necessario esattamente quel formato, nulla è facoltativo:

    var newDate = new Date ("mese giorno, anno ore: minuti: secondi"); var date2 = new Date ("9 febbraio 2009 00:00:00");

[Edit] Soluzione completa, se le date sono in formato gg/mm/aaaa, e la differenza dovrebbe essere in giorni:

<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

Si vorrà specificare la base 10 con parseInt. Se non lo fai allora non gestisce correttamente cose come "08" e "09". –

+0

E hai dimenticato l'ora legale. –

+0

@Robert L: Grazie per entrambi i suggerimenti, ho modificato la mia risposta di conseguenza. – Residuum

2

getDate è un metodo di Date oggetto. come ogni documento afferma chiaramente che restituisce il giorno del mese compreso tra 0 e 31. non avrebbe senso cercare di sottrarre l'uno dall'altro se non è lo stesso mese.

1

uso Date.parse (date1) - Date.parse (data2)

+0

mi restituisce "nan" – joe

+0

assicurati che data1 e data2 siano stringhe – Khodor

4

date2 = 02/09/2009 non è considerato come una data. funziona in questo modo. Dapprima lo divide il 02/09, restituisce lo 0.2222222222222222 ed è stato diviso per il 2009 (0.2222222222222222/2009). finalmente hai ottenuto un risultato date2 = 0.0001106133510314695. allo stesso modo calcola il risultato per data1.

questa non è un'operazione valida. Se si desidera definire la data. assicurati di aver inserito i dati in un formato data corretto.

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

Edit:

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

isnt che il lavoro .. ??

Edit:

può essere questo funzionerà .. u può provare questo ..

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

e restituisce 31 giorni

sembra lavorare per me .. ma in il mio fuso orario ci sono voluti 03/12/2009 come 3 ° mese 11 ° giorno e anno 2009

(24 * 60 * 60 * 1000) = Numero di milliseco nds al giorno

+0

no visualizza 01/02/1970 in questo modo .. voglio solo no di giorni di differenza – 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

Hai dimenticato: la numerazione del mese di JavaScript è disattivata di 1. –

0

sì. È necessario utilizzare Data oggetto, come questo

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

Prova

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

vi darà la differenza tra le date in millisecondi. Dividi questo numero per 86.400.000 e la differenza sarà in giorni.