2009-09-11 86 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,差额将以天为单位。