You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将日期数组转为多维数组并计算总间隔天数?

将日期数组改为多维数组并计算间隔天数总和

1. 重构为多维数组

把原来的两个平行数组StartDate和EndDate合并为一个二维数组,每个子数组存储一组[开始日期, 结束日期],避免索引错位问题,结构更直观:

const datePairs = [
  ["08 Feb 1954", "26 Aug 1955"],
  ["16 Sep 1955", "28 Oct 1955"],
  ["25 Nov 1955", "07 Sep 1956"],
  ["19 Oct 1956", "23 Nov 1956"],
  ["13 Jun 1958", "25 Jul 1958"],
  ["08 Aug 1958", "22 Aug 1958"],
  ["05 Sep 1958", "07 Nov 1958"],
  ["02 Jan 1959", "17 Apr 1959"],
  ["19 Jun 1959", "31 Jul 1959"],
  ["07 Aug 1959", "02 Oct 1959"],
  ["03 Nov 1959", "04 Dec 1959"],
  ["11 Dec 1959", "25 Dec 1959"],
  ["15 Apr 1960", "13 May 1960"],
  ["20 May 1960", "10 Jun 1960"],
  ["21 Oct 1960", "04 Nov 1960"],
  ["11 Nov 1960", "18 Nov 1960"],
  ["20 Dec 1960", "14 Feb 1961"]
];

2. 修复日期差计算函数

原date_diff_indays函数存在语法缺失和全局变量污染问题,修正后如下:

const date_diff_indays = function(date1, date2) {
  const dt1 = new Date(date1);
  const dt2 = new Date(date2);
  return Math.floor((Date.UTC(dt2.getFullYear(), dt2.getMonth(), dt2.getDate()) - 
                     Date.UTC(dt1.getFullYear(), dt1.getMonth(), dt1.getDate())) / (1000 * 60 * 60 * 24));
};

3. 循环计算总间隔天数

方法一:普通for循环

let totalDays = 0;
for (let i = 0; i < datePairs.length; i++) {
  const [start, end] = datePairs[i];
  totalDays += date_diff_indays(start, end);
}
console.log("总间隔天数:", totalDays);

方法二:forEach遍历

let totalDays = 0;
datePairs.forEach(pair => {
  totalDays += date_diff_indays(pair[0], pair[1]);
});
console.log("总间隔天数:", totalDays);

方法三:reduce累加(更简洁)

const totalDays = datePairs.reduce((sum, [start, end]) => {
  return sum + date_diff_indays(start, end);
}, 0);
console.log("总间隔天数:", totalDays);

完整代码示例

// 多维日期数组
const datePairs = [
  ["08 Feb 1954", "26 Aug 1955"],
  ["16 Sep 1955", "28 Oct 1955"],
  ["25 Nov 1955", "07 Sep 1956"],
  ["19 Oct 1956", "23 Nov 1956"],
  ["13 Jun 1958", "25 Jul 1958"],
  ["08 Aug 1958", "22 Aug 1958"],
  ["05 Sep 1958", "07 Nov 1958"],
  ["02 Jan 1959", "17 Apr 1959"],
  ["19 Jun 1959", "31 Jul 1959"],
  ["07 Aug 1959", "02 Oct 1959"],
  ["03 Nov 1959", "04 Dec 1959"],
  ["11 Dec 1959", "25 Dec 1959"],
  ["15 Apr 1960", "13 May 1960"],
  ["20 May 1960", "10 Jun 1960"],
  ["21 Oct 1960", "04 Nov 1960"],
  ["11 Nov 1960", "18 Nov 1960"],
  ["20 Dec 1960", "14 Feb 1961"]
];

// 修正后的日期差计算函数
const date_diff_indays = function(date1, date2) {
  const dt1 = new Date(date1);
  const dt2 = new Date(date2);
  return Math.floor((Date.UTC(dt2.getFullYear(), dt2.getMonth(), dt2.getDate()) - 
                     Date.UTC(dt1.getFullYear(), dt1.getMonth(), dt1.getDate())) / (1000 * 60 * 60 * 24));
};

// 计算总天数
const totalDays = datePairs.reduce((sum, [start, end]) => sum + date_diff_indays(start, end), 0);
console.log("总间隔天数:", totalDays);

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 04:15:08