Javascript 用于计算两个给定日期之间的天数的函数有时会产生不准确的结果

Javascript 用于计算两个给定日期之间的天数的函数有时会产生不准确的结果,javascript,days,Javascript,Days,我有一个days between函数,它可以准确计算两个日期之间的天数,下面是代码: 功能日之间(str1、str2){ var-date1=str1; var-date2=str2; date1=date1.拆分(“/”); date2=date2.拆分(“/”); var One Day=24*60*60*1e3; date1=新日期(date1[2],date1[0],date1[1]); date2=新日期(date2[2],date2[0],date2[1]); var diffDa

我有一个days between函数,它可以准确计算两个日期之间的天数,下面是代码:

功能日之间(str1、str2){
var-date1=str1;
var-date2=str2;
date1=date1.拆分(“/”);
date2=date2.拆分(“/”);
var One Day=24*60*60*1e3;
date1=新日期(date1[2],date1[0],date1[1]);
date2=新日期(date2[2],date2[0],date2[1]);
var diffDays=Math.round(Math.abs((date1.getTime()-date2.getTime())/oneday));
如果(diffDays==0){
diffDays=1;
}
console.log(diffDays);
返程天数;
}

在JavaScript中,日期(“2019年9月24日”、“2019年10月1日”)
如果不作为日期字符串提供,则月份从0开始

例如,
新日期(2019,0,1)
将返回2019年1月1日,
新日期(2019,1,1)
将返回2019年2月1日

同时,
新日期(“2019/1/1”)
将返回2019年1月1日

console.log(新日期(2019,0,1).toString()

console.log(新日期(2019,1,1).toString())
许多语言中的true Date对象是从某个历元值开始的时间的数字表示。Javascript使用自Unix纪元1970年1月1日午夜以来的毫秒数。因此,要找出两个日期之间的差异,可以通过简单的数学运算:

对于d1='2020-01-01'和d2='2021-01-01'

这将给你两个日期之间的毫秒差。如果需要,您可以检查
d1
是否小于
d2
或任何值,或者您可以设置绝对值以获得差值,而不管哪个值更大。请注意,这并不考虑
时间
元素。如果您想考虑这一点,还有两个步骤

但是现在我们已经有了毫秒的差异,我们需要把它转换成天

一天中有86400000毫秒,所以我们可以用这个值除以天数

(new Date(d2) - new Date(d1))/86400000
但这可能会给我们一个十进制数。所以我们需要摆脱它<代码>数学再次前往救援

Math.floor( Math.abs((new Date(d2) - new Date(d1)))/86400000 )
然后我们把这些都变成一个函数,这样我们就可以重用它了

function getDaysBetween(d1,d2){
  return ( Math.floor( Math.abs((new Date(d2) - new Date(d1)))/86400000 ) ) ;
}
So
console.log(getDaysDiff('2020-01-01','2021-01-01')将为我们提供
366
。Javascript
Date
对象考虑了闰日,但不考虑闰秒。如果这是一个问题,你必须对此负责。还要注意的是,如果您要处理来自不同时区的日期,您可能还必须考虑到这一点。我上面的函数只计算全天差异。因此,如果您有两个时区的两个日期(美国东部时间2019年1月1日0100和太平洋标准时间2019年1月2日0100),您可能需要正确解释时区差异

此外,我不会执行任何错误检查来验证您是否将有效日期传递给函数。如果无效,您将得到一个
NaN
结果

函数getDaysBetween(d1、d2){ 返回(数学楼层(数学abs)(新日期(d2)-新日期(d1))/86400000); } console.log(getDaysBetween('2020-01-01','2021-01-01'); d1=‘2019年9月24日’; d2=2019年9月30日; d3=2019年1月10日; console.log(getDaysBetween(d1,d2))//6.
console.log(getDaysBetween(d1,d3))//7
2020年2月27日和2020年3月1日之间的天数差异如何?这能解释日间照明节省时间之类的事情吗?@tony The last?将没有时间的日期字符串传递到
new date()
时,返回的日期的时间为00:00:00。
function getDaysBetween(d1,d2){
  return ( Math.floor( Math.abs((new Date(d2) - new Date(d1)))/86400000 ) ) ;
}