Существует ряд проблем с вашим кодом.Дано:
var dObject = {"ceDate":"2018-09-10","ceTime":"18:30:00"}
, тогда
var startDate = cEvent.ceDate+ ", " +cEvent.ceTime ;
создаст строку наподобие «2018-09-10, 18:30:00», которая не поддерживается форматом ECMAScript, поэтому, когдавы делаете:
var ceDate = new Date(startDate);
результат зависит от реализации и может привести к неверной дате.
Далее:
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)) ;
, кажется, пытается получитьразница в днях между двумя датами, однако она не учитывает временную составляющую, поэтому 3 ноября с 09:00 до 3 ноября 09:01 будет 1 день, хотя в тот же день и только через 1 минуту.
В любом случае, принимая во внимание ваше требование определения следующего события еженедельного события, вы можете получить событие на текущую неделю и, если оно прошло, добавить 7 дней, например,
var dObject = {
"ceDate": "2018-09-10", // Mon, 9 Sep 2018
"ceTime": "18:30:00",
"recurrenceUnit": "day",
"recurrenceLength": 7
}
// Helper to parse ISO date as local
function parseISOLocal(s) {
var b = s.split(/\D/);
return new Date(b[0],b[1]-1,b[2]);
}
function nextEvent(obj) {
// Get today's details
var now = new Date();
var day = now.getDay();
// Get event details
var evtDate = parseISOLocal(obj.ceDate);
var evtDay = evtDate.getDay();
// Set nextEvt to event for this week
var nextEvt = new Date(+now);
nextEvt.setHours(0,0,0,0);
nextEvt.setDate(nextEvt.getDate() - day + evtDay);
nextEvt.setHours(...obj.ceTime.split(/\D/));
// If the nextEvent has passed, add 7 days
// Should use the recurrenceUnit and recurrenceLength
if (nextEvt < now) {
nextEvt.setDate(nextEvt.getDate() + 7)
}
return nextEvt;
}
console.log(nextEvent(dObject).toString());
Исходный объект должен иметь повторяющуюся единицу периода и кратный.Я добавил их, но не использовал их, вы должны увидеть, куда они идут.Вам также нужно иметь функции для сложения и вычитания часов, дней, месяцев и т. Д., Чтобы использовать их.Здесь уже есть множество вопросов и ответов по этим темам.
Если бы я проектировал повторяющийся объект события, он имел бы намного больше информации, чем выше, с методами обработки различных сценариев.