2009-09-11 83 views
5

之間的區別我已經試過這樣計算兩個日期

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

</script> 

,但它不工作,就是這個原因getDate將工作只爲Date

如何找到這兩個日期之間的區別?我無法使用此功能,因爲我在salesforce CRM apex頁面中添加了JavaScript?

編輯1:INFACT這也太不工作

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

編輯2:它不是工作壓力太大...

<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 =新的日期(1970年, 01,01); // var diff3 = diff2.getDate(); alert(diff2);

</script> 
+0

感謝每一位,我只是回答如果用戶像這樣形成進入的答案,我怎麼能找到差異? – joe 2009-09-11 11:35:23

+2

在這裏有人建議使用'新日期('02/09/2009')'?你爲什麼期望它能起作用? – SilentGhost 2009-09-11 11:39:48

+0

但我們的客戶需要和給這樣的...所以我需要的解決方案:-( – joe 2009-09-11 12:37:53

回答

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解釋如何找到兩個日期在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

你不覺得有點多餘,你設置時差到另一個日期對象? date1.getTime() - date2.getTime()將返回以毫秒爲單位的差異。 – 2009-09-17 08:30:12

1
  1. GETDATE()返回 月的某一天,你的情況之間的差異:9和12
  2. 您應該通過以下內容明確定義日期對象。月份爲0,因此0 = 1月,1 = 2月...

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

  3. 這些是數字,而不是字符串。當你想使用一個字符串的日期,那麼你需要的格式,沒有什麼是可選的:

    var newDate = new Date(「month day,year hours:minutes:seconds」); var date2 = new Date(「Feb 9,2009 00:00:00」);

[編輯] 完整的解決方案,如果日期是在格式mm/dd/yyyy的,和差應在天:

<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

您將要使用parseInt指定base 10。如果你不這樣做,它不會正確處理「08」和「09」之類的東西。 – 2009-09-17 18:26:28

+0

你忘了夏令時。 – 2009-09-17 18:28:01

+0

@Robert L:謝謝你的兩個建議,我相應地編輯了我的答案。 – Residuum 2009-09-18 08:25:08

2

getDateDate對象的方法。因爲任何文檔都明確聲明它返回範圍爲0到31的月份的日期。如果它不是同一個月,則嘗試從另一箇中減去另一個是沒有意義的。

1

使用Date.parse(DATE1) - Date.parse(DATE2)

+0

它返回我「南」 – joe 2009-09-11 11:23:29

+0

確保date1和date2是字符串 – Khodor 2009-09-11 11:40:12

4

DATE2 = 02/09/2009不被認爲是一個日期。它以這種方式工作。首先它分爲02/09,它返回0.2222222222222222,其已被2009年除(0.2222222222222222/2009)。最後你得到了一個結果date2 = 0.0001106133510314695。它以相同的方式計算date1的結果。

這不是一個有效的操作。如果你想定義日期。請確保您將數據放在正確的日期格式中。

使用任何新的Date()或Date.parse( 「02/09/2009」)

編輯:

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

心不是這項工作..?

編輯:

可能,這將工作..ü可以試試這個..

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

,並返回31天

似乎爲我工作..但在我的時區花了03/12/2009作爲第3個月第11天和2009年

(24 * 60 * 60 * 1000)=毫秒數nds每天

+0

沒有它顯示01/02/1970像這樣..我只是想沒有天差 – joe 2009-09-11 12:50:55

-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

你忘了:JavaScript的月份編號是關閉1。 – 2009-09-17 19:44:33

0

是的。 您必須使用日期對象,這樣

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

嘗試

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

它會給你以毫秒爲單位的日期之間的差值。將此數字除以86,400,000,差額將以天爲單位。