如何将日期数组转为多维数组并计算总间隔天数?
将日期数组改为多维数组并计算间隔天数总和
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
相关产品推荐
相关产品推荐

