@onesy/date
Version:
Time and date utils library
54 lines (42 loc) • 1.68 kB
JavaScript
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;
}
}
}