计算两个日期之间的差异

IT技术 javascript date
2021-02-27 19:32:44

我试过这样

<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:事实上这也不起作用

<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 = new Date (1970, 01, 01); // var diff3 = diff2.getDate(); 警报(差异2);

</script>
6个回答

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

date2 = 02/09/2009 不被视为日期。它是这样工作的。首先它除以 02/09,它返回 0.2222222222222222 并除以 2009 (0.22222222222222222/2009)。最后你得到一个结果 date2 = 0.0001106133510314695。以同样的方式计算 date1 的结果。

这不是有效的操作。如果你想定义日期。确保您以正确的日期格式放置数据。

使用 new 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 天

它似乎对我有用..但在我的时区,2009 年 3 月 12 日是 2009 年第 3 个月第 11 天

(24*60*60*1000) = 每天的毫秒数

不,它像这样显示 01 /02 /1970 .. 我只想要没有天差
2021-05-03 19:32:44

getDateDate对象的方法正如任何文档明确指出的那样,它返回 0 到 31 范围内的月份中的第几天。如果它不是同一个月份,那么尝试从另一个中减去一个是没有意义的。

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");
您不认为将时差设置为另一个日期对象有点多余吗?date1.getTime() - date2.getTime() 无论如何都会以毫秒为单位返回差异。
2021-04-26 19:32:44

使用 Date.parse(date1) - Date.parse(date2)

确保 date1 和 date2 是字符串
2021-04-22 19:32:44