Javascript 如何在每个星期天更新日期?
因此,我正在对一些JavaScript日期进行故障排除。我在和NodeJS Mongoose合作并做出反应。我想更新数据库中的所有日期,但我希望每个周末都这样做,并保留时间,根本不更改它们 假设我有一天,比如2020年1月22日,在周末,日期将更新为1月29日,然后是2月5日。数据库中的所有内容都像ISODate(“2020-01-16T16:27:15.003Z”)一样保存,我有一个代码可以随时更新这些日期。我很难弄清楚Javascript 如何在每个星期天更新日期?,javascript,node.js,date,mongoose,Javascript,Node.js,Date,Mongoose,因此,我正在对一些JavaScript日期进行故障排除。我在和NodeJS Mongoose合作并做出反应。我想更新数据库中的所有日期,但我希望每个周末都这样做,并保留时间,根本不更改它们 假设我有一天,比如2020年1月22日,在周末,日期将更新为1月29日,然后是2月5日。数据库中的所有内容都像ISODate(“2020-01-16T16:27:15.003Z”)一样保存,我有一个代码可以随时更新这些日期。我很难弄清楚setDate()的主体应该如何自动更改月份和日期,同时每次都保持相同的时
setDate()
的主体应该如何自动更改月份和日期,同时每次都保持相同的时间-因此,2020年1月22日的周末下午4:00将更改为2020年1月29日的下午4:00
我已经尝试过使用momentjs
来处理日期,但它不适用于我的数据库
cron.schedule("* * * * * *",async function() {
const courses = await Course.find({});
courses.forEach(course => {
const newDate = () => {
let date = new Date();
return date.toISOString();
};
Course.updateMany({
"nextClasses": course.nextClasses === course.startingDate ? course.startingDate :
course.nextClasses
},{$set: {"nextClasses": newDate()}},(err) => console.log(err))
});
}
这是负责更改日期的代码,因为现在它每秒钟将所有内容更改为当前日期(出于验证目的)这将在每个星期天的所有日期中增加7天
const addDays = (date, days) => {
const result = new Date(date);
result.setDate(result.getDate() + days);
return result;
};
cron.schedule("0 0 * * 0", async function() {
const courses = await Course.find({});
courses.forEach(async (course) => {
await course.update(
{
$set: {
nextClasses: addDays(course.nextClasses, 7)
}
},
(err) => console.log(err)
);
});
});
替代方法
cron.schedule("0 0 * * 0", async function() {
const courses = await Course.find({});
courses.forEach(async (course) => {
course.nextClasses.setDate(course.nextClasses.getDate() + 7);
course.markModified("nextClasses"); /* Mongoose does not track changes made by built-in Date methods */
await course.save((err) => console.log(err));
});
});
这将使每个周日的所有日期增加7天
const addDays = (date, days) => {
const result = new Date(date);
result.setDate(result.getDate() + days);
return result;
};
cron.schedule("0 0 * * 0", async function() {
const courses = await Course.find({});
courses.forEach(async (course) => {
await course.update(
{
$set: {
nextClasses: addDays(course.nextClasses, 7)
}
},
(err) => console.log(err)
);
});
});
替代方法
cron.schedule("0 0 * * 0", async function() {
const courses = await Course.find({});
courses.forEach(async (course) => {
course.nextClasses.setDate(course.nextClasses.getDate() + 7);
course.markModified("nextClasses"); /* Mongoose does not track changes made by built-in Date methods */
await course.save((err) => console.log(err));
});
});
这回答了你的问题吗?谢谢重播。不,没有。我知道如何使用cron在所需的日期/小时内进行更新,但我不知道如何在
setDate()
方法中更改日期和月份,使年和小时保持不变。我不知道setDate()
的主体应该如何使用js中的矩库?@User123456是的,我已经尝试过了。通过下面的解决方案解决的问题这是否回答了您的问题?谢谢重播。不,没有。我知道如何使用cron在所需的日期/小时内进行更新,但我不知道如何在setDate()
方法中更改日期和月份,使年和小时保持不变。我不知道setDate()
的主体应该如何使用js中的矩库?@User123456是的,我已经尝试过了。通过解决方案belowHi@Brahma Dev解决了问题,感谢您的回答。我如何管理这些月和小时?我的意思是非常感谢你们换了一天,但当我快到月底的时候情况又如何呢?如果那天是本月的最后一个“星期二”,而下个星期二又是下个月,我该如何检测?我正试图弄清楚如何自动更改月份。由于OP将值存储为UTC,因此应使用UTC方法获取和设置日期。否则,主机系统的夏令时设置可能会影响时间,因为它将跨月工作。它将增加7天,它将相应地改变月份和年份。@RobG ISODate是MongoDB的一部分。Mongoose管理Javascript的日期和Mongo的ISODate之间的转换。我如何管理这些月和小时?我的意思是非常感谢你们换了一天,但当我快到月底的时候情况又如何呢?如果那天是本月的最后一个“星期二”,而下个星期二又是下个月,我该如何检测?我正试图弄清楚如何自动更改月份。由于OP将值存储为UTC,因此应使用UTC方法获取和设置日期。否则,主机系统的夏令时设置可能会影响时间,因为它将跨月工作。它将增加7天,它将相应地改变月份和年份。@RobG ISODate是MongoDB的一部分。Mongoose管理Javascript的日期和Mongo的ISODate之间的转换。