Optimize parseEvery & nextEvent
tshemsedinov opened this issue · 1 comments
tshemsedinov commented
I don't like how this functions are implemented now:
- parseEvery:
Lines 234 to 274 in a0bc899
const parseEvery = (s = '') => { let YY = -1; let MM = -1; let DD = -1; let wd = -1; let hh = -1; let mm = -1; let ms = 0; const parts = s.split(' '); for (const part of parts) { if (part.includes(':')) { const [h, m] = split(part, ':'); if (h !== '') hh = parseInt(h); mm = m === '' ? 0 : parseInt(m); continue; } if (isOrdinal(part)) { DD = parseInt(part); continue; } if (part.length === YEAR_LEN) { YY = parseInt(part); continue; } if (MM === -1) { MM = parseMonth(part); if (MM > -1) continue; } if (wd === -1) { wd = parseDay(part); if (wd > -1) continue; } const unit = part.slice(-1); const mult = DURATION_UNITS[unit]; if (typeof mult === 'number') { const value = parseInt(part); if (!isNaN(value)) ms += value * mult; } } return { YY, MM, DD, wd, hh, mm, ms: ms > 0 ? ms * 1000 : -1 }; }; - nextEvent:
Lines 276 to 310 in a0bc899
const nextEvent = (every, date = new Date()) => { let ms = 0; const YY = date.getUTCFullYear(); const MM = date.getUTCMonth() + 1; const DD = date.getUTCDate(); const wd = date.getUTCDay() + 1; const hh = date.getUTCHours(); const mm = date.getUTCMinutes(); if (every.YY > -1) { if (every.YY < YY) return -1; if (every.YY > YY) return 0; if (every.MM > -1) { if (every.MM < MM) return -1; if (every.MM > MM) return 0; if (every.DD > -1) { if (every.DD < DD) return -1; if (every.DD > DD) return 0; if (every.hh > -1) { if (every.hh < hh) return -1; if (every.hh === hh) { if (every.mm > -1 && every.mm < mm) return -1; } } } } } if (every.MM > -1 && every.MM !== MM) return 0; if (every.DD > -1 && every.DD !== DD) return 0; if (every.wd > -1 && every.wd !== wd) return 0; if (every.hh > -1) ms += (every.hh - hh) * DURATION_UNITS.h; if (every.mm > -1) ms += (every.mm - mm) * DURATION_UNITS.m; ms *= 1000; if (every.ms > -1) ms += every.ms; return ms; };
But we need tests before optimization: #122
AlexBelch commented
@tshemsedinov
I want try to refactor this funcs