Web*_*ine 3 javascript arrays time
我有两个变量:开始和结束,基本上我需要为这两个日期之间的每个完整年份创建一个数组。
我需要在数组中记录每年提取的总金额,但不确定如何开始为每个保单年度创建数组。
任何帮助,将不胜感激。
对于简单的场景(使用库会太过分),我会使用这个:
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)
尽管标题没有说明这一点,但问题作者提到“这两个日期之间的每个完整年份”。没有提到什么构成“完整”年份的确切定义,但这可能是:
具有完整 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)从开始日期起每 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)
/* 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)
/* 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)