JS time - 为两个日期之间的每年创建一个数组

Web*_*ine 3 javascript arrays time

我有两个变量:开始和结束,基本上我需要为这两个日期之间的每个完整年份创建一个数组。

我需要在数组中记录每年提取的总金额,但不确定如何开始为每个保单年度创建数组。

任何帮助,将不胜感激。

Pot*_*rca 9

对于简单的场景(使用库会太过分),我会使用这个:

const rangeOfYears = (start, end) => Array(end - start + 1)
  .fill(start)
  .map((year, index) => year + index)
Run Code Online (Sandbox Code Playgroud)

如果您的输入不是整数而是Date对象,请使用.getFullYear()


例如,如果我们想要2014 年2020 年(含)之间的年份,则为:

// Using integers for years
rangeOfYears(2014, 2020)

// Using `Date` objects for years
rangeOfYears(new Date("Jun 26 2014").getFullYear(), new Date().getFullYear())

// For both the result would be:
// [2014, 2015, 2016, 2017, 2018, 2019, 2020]
Run Code Online (Sandbox Code Playgroud)

尽管标题没有说明这一点,但问题作者提到“这两个日期之间的每个完整年份”。没有提到什么构成“完整”年份的确切定义,但这可能是:

  1. 具有完整 12 个月的年份
    在这种情况下,应始终删除第一项和最后一项:

    // Using integers for years
    rangeOfYears(2014, 2020)
    
    // Using `Date` objects for years
    rangeOfYears(new Date("Jun 26 2014").getFullYear(), new Date().getFullYear())
    
    // For both the result would be:
    // [2014, 2015, 2016, 2017, 2018, 2019, 2020]
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从开始日期起每 12 个月一次
    在这种情况下,需要一个过滤器来查看去年是否在范围内:(
    这需要Date使用对象)

    .slice(1, -1)
    // Which gives: [2015, 2016, 2017, 2018, 2019]
    
    
    Run Code Online (Sandbox Code Playgroud)

代码示例

将所有这些放在一起可以得出:

没有“完整年份”过滤器

.filter((year, index) => 
    // 31536000000 = 60 * 60 * 24 * 365 * 1000 = one year in milliseconds
    index < (end.getTime() - start.getTime()) / 31536000000)
    // Which gives: [2014, 2015, 2016, 2017, 2018, 2019]

Run Code Online (Sandbox Code Playgroud)

使用“完整年份 = 12 个完整月份”过滤器

/* Example without "complete year" filter */
const rangeOfYears = (start, end) => Array(end - start + 1)
  .fill(start)
  .map((year, index) => year + index)

let a = rangeOfYears(2014, 2020)
let b = rangeOfYears(new Date("Jun 26 2014").getFullYear(), new Date().getFullYear())

console.log(a)
console.log(b)
Run Code Online (Sandbox Code Playgroud)

使用“全年 = 每 12 个月”过滤器

/* Example with "complete year = 12 full months" filter */
const rangeOfYears = (start, end) => Array(end - start + 1)
  .fill(start)
  .map((year, index) => year + index)
  .slice(1, -1)

let c = rangeOfYears(2014, 2020)
let d = rangeOfYears(new Date("Jun 26 2014").getFullYear(), new Date().getFullYear())

console.log(c)
console.log(d)
Run Code Online (Sandbox Code Playgroud)