如何使用 javascript 操作三个月支付日期的日期

How to manipulate dates for Tri-monthly payment dates using javascript

如何使这个日期序列为三个月一次。例如。输入是“2022-03-14”输入是动态的它取决于用户输入...我正在尝试添加 + 10 天但不起作用

我想要的输出

 [
      "2022-03-24",
      "2022-04-04",
      "2022-04-14",
      "2022-04-24",
      "2022-05-04",
      "2022-05-14",
      "2022-05-24",
      "2022-06-04",
      "2022-06-14",
      "2022-06-24",
    ]

我的代码输出很糟糕

[
  "2022-03-24",
  "2022-04-14",
  "2022-04-24",
  "2022-05-14",
  "2022-05-24",
  "2022-06-14",
  "2022-06-24",
  "2022-07-14",
  "2022-07-24",
  
]

function createSchedule(date, count){
date = new Date(date); 
let day = date.getDate();// Get day in given date 
let k = 0;
let days = k? [day - 10, day , day + 10] : [day, day + 10, day- 10];
let result = [];

    if(day > 10){
        k = +0
    }else{
        if(day > 20 ){
        k = +1
    }else{
        k= +2
        }
    }


for(let i = 0; i < count; i++){
    k= 1-k; 
    date.setDate(days[k]);
    // When date overflows into next month, take last day of month
    if (date.getDate() !== days[k]) date.setDate(0);        
    if (!k) date.setMonth(date.getMonth() + 1);
    result.push(date.toLocaleDateString("en-SE"));
}
    return  result

}
            
var dateRelease = new Date("03-14-2022");
var result = createSchedule(dateRelease, 9);
console.log(result)

您尝试中的一些问题:

  • let k = 0 之后,k? 上的条件运算符将始终计算 ? 之后的第一个表达式,即 [day - 10, day , day + 10]
  • 该数组的日期可以大于 31 (day + 10)
  • 另一个数组 [day, day + 10, day- 10] 未排序,但应该排序。
  • 常量 +0 和 +1 和 +2 没问题,但是你在这里使用一元加号看起来很奇怪。它可能只是 0、1 和 2。
  • 赋值 k = 1 - k 假定您的 days 数组中只有两个条目,但您有三个,因此请使用模运算:k = (k + 1) % 3

这里更正:

function createSchedule(date, count) {
    date = new Date(date);
    let day = date.getDate();
    let firstDay = 1 + (day - 1) % 10;
    let days = [firstDay, firstDay + 10, firstDay + 20];
    let k = days.indexOf(day);
    let result = [];
    for (let i = 0; i < count; i++) {
        k = (k + 1) % 3;
        date.setDate(days[k]);
        // When date overflows into next month, take last day of month
        if (date.getDate() !== days[k]) date.setDate(0);         
        if (!k) date.setMonth(date.getMonth() + 1);
        result.push(date.toLocaleDateString("en-SE"));
    }
    return result;
}

var dateRelease = new Date("2022-03-14");
var result = createSchedule(dateRelease, 25);
console.log(result);