UNPKG

@onesy/date

Version:

Time and date utils library

54 lines (42 loc) 1.68 kB
import OnesyDate, { units } from './OnesyDate'; export default function is() { let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : OnesyDate.onesyDate; let query = arguments.length > 1 ? arguments[1] : undefined; let value1 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : OnesyDate.onesyDate; let unit = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'milliseconds'; let value2 = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : OnesyDate.onesyDate; if (value && value.valid) { if (value1 && value1.valid) { const diffs = {}; units.forEach(unit_ => diffs[unit_] = Math.floor(value[unit_] - value1[unit_])); const queryValue = diffs[unit]; switch (query) { case 'before': return queryValue < 0; case 'after': return queryValue > 0; case 'same': return queryValue === 0; case 'between': if (value2 && value2.valid) { return is(value2, 'after or same', value) && is(value2, 'before or same', value1) || is(value2, 'after or same', value1) && is(value2, 'before or same', value); } return false; case 'before or same': return queryValue <= 0; case 'after or same': return queryValue >= 0; default: break; } } switch (query) { case 'leap-year': return value.year % 4 === 0 && value.year % 100 !== 0 || value.year % 400 === 0; case 'leap-month': return value.month === 2 && value.daysInMonth === 29; default: return false; } } }