const moment = require('moment');
const startDate = moment('2016-09-01');
const interval = [15, 15, 20];
const last = (arr) => arr[arr.length - 1];
const sum = (nums) => nums.reduce((acc, num) => acc + num, 0);
function sumSoFar(nums) {
return nums.reduce((sums, num) => {
const prevSum = last(sums) || 0;
return sums.concat(num + prevSum);
}, []);
}
const validDates = [moment('2016-09-16'), moment('2016-10-01'), moment('2016-10-21'), moment('2016-11-05')];
function isValid(startDate, interval, date) {
const days = moment(date).diff(startDate, 'days');
const sums = sumSoFar(interval);
const remainingDays = days % last(sums);
return remainingDays === 0 || sums.indexOf(remainingDays) >= 0;
}
validDates.forEach(d => console.log(isValid(startDate, interval, d)));