2009-09-11 13 views
5

Próbowałem jak tenobliczenie różnicy między dwiema datami

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

</script> 

ale to nie działa, jest to, że powodem getDate będzie działać tylko dla Date?

Jak znaleźć różnicę między tymi dwoma datami? Czy nie mogę korzystać z tej funkcji, ponieważ ja dodam javascript na stronach apm aplikacji Salesforce CRM?

Edit 1: rzeczywiście to też nie działa

<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: jej nie działa zbyt ...

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

</script> 
+0

Dziękuję wszystkim, po prostu odpowiadam na odpowiedź, jeśli użytkownik wchodzi w ten sposób, jak mogę znaleźć różnicę? – joe

+2

czy ktoś tutaj zasugerował użycie 'nowej daty ('02/09/2009 ')'? dlaczego miałbyś oczekiwać, że to zadziała? – SilentGhost

+0

Ale nasz klient tego wymagał i dawał ... Potrzebuję więc rozwiązania :-( – joe

Odpowiedz

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 wyjaśniono, jak znaleźć różnicę pomiędzy dwoma datami w 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

Nie uważasz, że to trochę zbędne, że ustawiasz różnicę czasu na inny obiekt daty? date1.getTime() - date2.getTime() i tak zwróci różnicę w milisekundach. –

1
  1. getDate() zwraca dzień miesiąca, w przypadku: 9 i 12.
  2. Powinieneś zdecydowanie zdefiniować obiekty daty, wykonując następujące czynności. Miesiące dotyczą 0, dlatego 0 = styczeń, 1 = luty ...

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

  3. Są to liczby, a nie ciąg. Jeśli chcesz użyć ciągu znaków dla daty, potrzebujesz dokładnie tego formatu, nic nie jest opcjonalne:

    var newDate = new Data ("miesiąc dzień, rok godziny: minuty: sekundy"); var date2 = new Data ("luty 9, 2009 00:00:00");

[Edycja] całkowitego rozpuszczenia, jeśli terminy są MM/dd/rr, a różnica powinna być w dniach:

<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

Będziesz chciał określić podstawę 10 z parseInt. Jeśli nie, to nie obsługuje poprawnie rzeczy typu "08" i "09". –

+0

I zapomniałeś czas letni. –

+0

@Robert L: Dzięki za oba sugestie, odpowiednio zredagowałem swoją odpowiedź. – Residuum

2

getDate jest sposób Date obiektu. jak każdy dokument wyraźnie stwierdza, że ​​zwraca dzień miesiąca w zakresie od 0 do 31. nie ma sensu próbować odjąć jeden od drugiego, jeśli nie jest to ten sam miesiąc.

1

użycie Date.parse (date1) - Date.parse (date2)

+0

to zwraca mi "nan" – joe

+0

upewnij się, że date1 i date2 są ciągami – Khodor

4

date2 = 02/09/2009 nie jest uznawana za datę. działa w ten sposób. Najpierw zajmuje się 02/09, zwraca 0.2222222222222222 i został podzielony przez 2009 (0.2222222222222222/2009). wreszcie masz datę date2 = 0.0001106133510314695. w ten sam sposób oblicza wynik dla date1.

To nie jest poprawna operacja. Jeśli chcesz zdefiniować datę. upewnij się, że umieściłeś dane we właściwym formacie daty.

użycie albo new Date() lub 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() 

existing tej pracy .. ??

Edit:

może być to będzie działać .. u można spróbować ..

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

i wraca 31 dni

wydaje się pracować dla mnie .. ale w Moja strefa czasowa zajęła 03/12/2009 jako 3. miesiąc 11-ty dzień i rok 2009

(24 * 60 * 60 * 1000) = Liczba milliseco nds na dzień

+0

nie wyświetla 01/02/1970 jak to .. ja po prostu nie ma różnicy dni – 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

Zapomniałeś: numeracja miesięcy JavaScript jest wyłączona o 1. –

0

tak. Musisz użyć Data obiektu, jak to

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

Spróbuj

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

To daje różnicę między datami w milisekundach. Podziel tę liczbę przez 86 400 000, a różnica będzie w dniach.

Powiązane problemy