如何使用 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);
如何使这个日期序列为三个月一次。例如。输入是“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);