如何每周日更新日期?

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 之间的转换。

以上是关于如何每周日更新日期?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PL/SQL 中设置特定日期对表的操作执行?

如何自动更新最近 12 周的数据?

1月28日周日,更新ruby到2.5.0版,rvm更新。

动态日期变量

PPT中如何自动更新日期?

不用每周等更新,一次订阅看到爽,51CTO博客专栏更新完毕专栏合集