首页 > 解决方案 > 计算两个给定日期之间天数的函数有时会产生不准确的结果

问题描述

我在函数之间有一个天数,它应该准确计算两个日期之间的天数,这里是代码:

function DaysBetween(str1, str2) {
  var date1 = str1;
  var date2 = str2;
  date1 = date1.split("/");
  date2 = date2.split("/");
  var oneday = 24 * 60 * 60 * 1e3;
  date1 = new Date(date1[2], date1[0], date1[1]);
  date2 = new Date(date2[2], date2[0], date2[1]);
  var diffDays = Math.round(Math.abs((date1.getTime() - date2.getTime()) / oneday));
  if (diffDays == 0) {
    diffDays = 1;
  }

  console.log(diffDays);
  return diffDays;
}
DaysBetween("9/24/2019","10/1/2019")

这有时可以正常工作,但有时会给出不准确的天数。

例如,如果date1 = 09/24/2019date2 = 09/25/2019返回“1”的正确答案,或者date1 = 09/24/2019date2 = 09/30/2019返回 6 天的正确答案,但是如果我输入日期date1 = 09/24/2019并且date2 = 10/01/2019它返回“8 天”,它应该是 7。什么给出?

标签: javascriptdays

解决方案


在 JavaScript 中,如果未作为日期字符串提供,则月份从 0 开始。

例如,new Date(2019,0,1)将返回2019 年 1 月 1 日并将返回 2019 年2new Date(2019,1,1)1 日

同时,new Date("2019/1/1")将于2019 年 1 月 1 日返回

console.log(new Date(2019,0,1).toString())
console.log(new Date(2019,1,1).toString())

在您的代码中,它计算Oct 24, 2019Nov 1, 2019之间的差异。10 月有 31 天,因此 8 是正确答案。要获得2019 年 9 月 24 日和 2019 年10月 1 日的差异,您需要从月份的值中减去 1。

您需要将代码更正为以下内容

date1 = new Date(date1[2], parseInt(date1[0])-1, date1[1]);
date2 = new Date(date2[2], parseInt(date2[0])-1, date2[1]);

function DaysBetween(str1, str2) {
  var date1 = str1;
  var date2 = str2;
  date1 = date1.split("/");
  date2 = date2.split("/");
  var oneday = 24 * 60 * 60 * 1e3;
  date1 = new Date(date1[2], parseInt(date1[0]) - 1, date1[1]);
  date2 = new Date(date2[2], parseInt(date2[0]) - 1, date2[1]);
  var diffDays = Math.round(Math.abs((date1.getTime() - date2.getTime()) / oneday));
  if (diffDays == 0) {
    diffDays = 1;
  }

  console.log(diffDays);
  return diffDays;
}
DaysBetween("9/24/2019", "10/1/2019");

这是一个建议。你不需要所有这些行。这可以通过以下代码轻松完成

function dateDiff(d1,d2){
  return (new Date(d2).getTime() - new Date(d1).getTime())/(1000 * 60 * 60 * 24);
}

它将获取 unix 时间戳中的时间,找出差异,然后将其除以1000 * 60 * 60 * 24以查找天数。

function dateDiff(d1,d2){
  return (new Date(d2).getTime() - new Date(d1).getTime())/(1000 * 60 * 60 * 24);
}

console.log(dateDiff("2019/9/24","2019/10/1"));


推荐阅读