У меня есть карта часовых поясов с часом публикации в локальной зоне с новостями, которые должны определить, когда они должны быть опубликованы в дату с использованием средства выбора даты.
Это новая новость article
, которая инициализирована со следующим:
{ timeZoneId: 'Europe/Paris, releaseHour: 9, publishingDateTime: undefined }
// 9 - это время по Гринвичу + 1
Я хочу знать, как я могу с const now = new Date()
, проверить, если эта статья должны быть опубликованы сегодня или на следующий день, критерии:
- Является ли
now
до releaseHour
? (9:00 по Гринвичу + 1 в Париже уже прошло или нет) - Если да, то мы должны предложить следующий релиз в 9:00 по Гринвичу + 1 + 1 день
- Если нет, тогда мы должны используйте слот для релиза в 9 утра в тот же день
Как это возможно?
Вот как я пытался:
import { isBefore, isEqual } from 'date-fns';
import { utcToZonedTime } from 'date-fns-tz';
export const getNextPublishingDateTime = (now, timeZoneId, releaseHour) => {
const zoned = utcToZonedTime(now, timeZoneId);
const releaseTime = new Date(zoned.toISOString());
releaseTime.setHours(releaseHour, 0, 0, 0);
if (isBefore(zoned, releaseTime) || isEqual(zoned, releaseTime)) {
console.log('before');
return releaseTime;
}
releaseTime.setDate(releaseTime.getDate() + 1);
console.log('after');
return releaseTime;
};
Но час вернулся utcToZonedTime
- это не смещение +01: 00, а дата с моим смещением.
Я попробовал некоторые другие идеи, используя moment-tz
и vanilla Date
, я нашел эту задачу немного сложной и надеемся найти помощь в сообществе JS, так как это выглядит как обычное сравнение дат.