Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在每个星期天更新日期?_Javascript_Node.js_Date_Mongoose - Fatal编程技术网

Javascript 如何在每个星期天更新日期?

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()的主体应该如何自动更改月份和日期,同时每次都保持相同的时

因此,我正在对一些JavaScript日期进行故障排除。我在和NodeJS Mongoose合作并做出反应。我想更新数据库中的所有日期,但我希望每个周末都这样做,并保留时间,根本不更改它们

假设我有一天,比如2020年1月22日,在周末,日期将更新为1月29日,然后是2月5日。数据库中的所有内容都像ISODate(“2020-01-16T16:27:15.003Z”)一样保存,我有一个代码可以随时更新这些日期。我很难弄清楚
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之间的转换。