Проверьте, должно ли повторение события на текущую дату - PullRequest
2 голосов
/ 26 сентября 2019

Давайте предположим, что у меня есть повторяющиеся события, которые соответствуют следующей структуре:

{
    title: "Brunch every saturday morning",
    timestamp: 1569050100 //equals Sat, 21 Sep 2019 09:15:00 in my timezone,
    frequency: "weekly"
}

Как я могу математически определить, наступит ли эта дата сегодня (или в следующую субботу)?Мой подход заключается в следующем:

eventDate = Determine timestamp of date of recurring event without time
currDate = Determine timestamp of date without time

diff = currDate - eventDate
repetitionFrequency = 604800 //one week in seconds

if (diff mod repetitionFrequency == 0) {
    //On the same day
}

Это эффективно?Вы можете придумать лучший способ?

1 Ответ

0 голосов
/ 26 сентября 2019

Если я правильно понял ваш вопрос, это должно вам помочь.

В псевдокоде:

if ( ( currentSystemTime - 86400) >= (eventSystemTime - eventSystemTime mod 86400) ) {
// we are on the day after the event or later, so move the event forward to next week
eventSystemTime += repetitionFrequency
}
else if (currentSystemTime >= (eventSystemTime - eventSystemTime mod 86400) ) {
// we are on the same day as the event... do event stuff
}

РЕДАКТИРОВАТЬ: этот код сообщит вам, находитесь ли вы в тот же день,если вы хотите обработать , когда событие будет происходить иначе, тогда вы будете использовать переменную diff следующим образом:

diff = (eventSystemTime - eventSystemTime mod 86400) - (currentSystemTime - currentSystemTime mod 86400)
diff = diff/86400

// this will produce the difference between now and the event in days

Очевидно, что это будет гораздо более мудрым программированием, если вашДля eventSystemTime и currentSystemTime уже были заданы дни, а не секунды.

EDIT2: в этом уравнении 'mod' есть оператор по модулю, это просто способ установить для eventSystemTime значение полночь в день события

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...