Как я могу обновлять дату каждое воскресенье? - PullRequest
0 голосов
/ 22 января 2020

Итак, я решаю проблемы с некоторыми JavaScript датами. Я работаю с NodeJS Mon goose и React. Я хотел бы обновить все даты в базе данных, но я хотел бы делать это каждые выходные и сохранять часы, не меняя их вообще.

Допустим, у меня есть день, как 22 января 2020 года, и в выходные дни дата обновится до 29 января, а затем до 5 февраля. Все в базе данных сохранено как ISODate("2020-01-16T16:27:15.003Z"), и у меня есть код для обновления этих дат, когда я захочу. У меня возникли проблемы с определением того, как тело setDate() должно выглядеть так, чтобы автоматически менять месяцы и дни, сохраняя при этом один и тот же час каждый раз, поэтому 22.01.2020 в 16:00 в выходные дни изменится на 29.01.2020 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))
                });
            }

Это код, отвечающий за изменение дат, сейчас он каждую секунду меняет все до текущей даты (специально, для проверки)

1 Ответ

2 голосов
/ 22 января 2020

Это добавит 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));
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...