如何每周日更新日期?
Posted
技术标签:
【中文标题】如何每周日更新日期?【英文标题】:How can I update date every Sunday? 【发布时间】:2020-05-08 18:09:33 【问题描述】:所以我正在对一些 javascript 日期进行故障排除。我正在使用 NodeJS Mongoose 和 React。我想更新数据库中的所有日期,但我想每个周末都这样做并保持时间,根本不要更改它们。
假设我有 2020 年 1 月 22 日这样的日子,在周末日期会自动更新为 1 月 29 日,然后是 2 月 5 日。数据库中的所有内容都保存为ISODate("2020-01-16T16:27:15.003Z")
,我有一个代码可以随时更新这些日期。我很难弄清楚setDate()
的正文应该如何自动更改月份和日期,同时每次都保持相同的时间 - 所以周末的 22/01/2020 下午 4:00 将更改为 29/01/2020 4:00 PM。
我已经尝试使用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))
);
这是负责更改日期的代码,现在它每秒将所有内容更改为当前日期(故意,出于验证目的)
【问题讨论】:
这能回答你的问题吗? How to run crontab job every week on Sunday 感谢重播。不,它没有。我知道如何使用 cron 在所需的日期/小时进行更新,但我不知道如何在setDate()
方法中更改日期和月份以保持年份和小时相同。我不知道setDate()
的正文应该是什么样子
你在js中使用过Moment库吗?
@User123456 是的,我试过了。下面的解决方案解决了问题
【参考方案1】:
这将使每个星期日的所有日期增加 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));
);
);
【讨论】:
嗨@Brahma-Dev 感谢您的回答。我该如何管理这些月份和时间?我的意思是非常感谢你改变天,但是当我到月底的时候情况呢?我如何检测,如果那一天是本月的最后一个“星期二”,而下星期二将在下个月?我正在尝试弄清楚如何自动更改月份。 由于 OP 将值存储为 UTC,这应该使用 UTC 方法来获取和设置日期。否则主机系统的夏令时设置可能会影响时间。 @Marcin 它将跨月工作。它增加了 7 天,它会相应地改变月份和年份。 @RobG ISODate 是 MongoDB 的一部分。 Mongoose 管理 Javascript 的 Date 和 Mongo 的 ISODate 之间的转换。以上是关于如何每周日更新日期?的主要内容,如果未能解决你的问题,请参考以下文章