gpt4 book ai didi

Javascript 数组提供两个日期范围之间的所有日期/月份

转载 作者:行者123 更新时间:2023-11-30 11:57:57 26 4
gpt4 key购买 nike

我正在尝试创建一个函数,它将接受三个输入变量(开始日期、结束日期、粒度),并将输出一个包含所有日期的数组。输出将根据输入以每日或每月为粒度。例如,如果我查看 2015 年 1 月 - 2015 年 2 月:

  • 每月为 [2015-01, 2015-02]
  • 每日将是 [2015-01-01、2015-01-02、2015-01-03、....、2015-02-27、2015-02-28]

我已经根据其他一些帖子编写了一些代码,从逻辑上讲,它似乎对我有用,但出于某种原因,当查看每日粒度时,每个月都会返回 31 天。下面的脚本只查看每天的粒度(每月会更容易)——有人可以看看我做错了什么,是否有更有效的方法来做到这一点?

日期的输入格式是“yyyy-mm”

我意识到这可能是菜鸟犯的错误,但至少我会吸取教训:)

谢谢

function dateRange2 (startDate,endDate,granularity) {

var dates = [];
var d0 = startDate.split('-');
var d1 = endDate.split('-');
var months31 = [1,3,5,7,8,10,12];
var months30 = [4,6,9,11];


for (var y = d0[0]; y <= d1[0]; y++) {
for (var m = d0[1]; m <= d1[1]; m++) {
if (m in months31) {
for (var d =1;d <=31; d++) {
dates.push(y+"-"+m+"-"+d);
}
} ///// Issue seems to be here - not switching over to next clause
else if (m in months30) {
for (var d =1; d <=30; d++) {
dates.push(y+"-"+m+"-"+d);
}
} else if (m=2 && y=2016) {
for (var d =1; d <=29; d++) {
dates.push(y+"-"+m+"-"+d);
}
} else if (m=2 && y!=2016) {
for (var d =1; d <=28; d++) {
dates.push(y+"-"+m+"-"+d);
}
}
}
}
return dates;
}

最佳答案

使用 indexOf 代替 in 运算符,如下所示:

if (months31.indexOf(m) >= 0){
}
else if (months30.index(m) >= 0){
}

in 运算符将返回给定值是否为对象的属性: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in

关于Javascript 数组提供两个日期范围之间的所有日期/月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37409701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com