@kubit-ui-web/react-components
Version:
Kubit React Components is a customizable, accessible library of React web components, designed to enhance your application's user experience
61 lines • 2.54 kB
JavaScript
import { formatValueDate, verifyFormat } from './verifyFormat';
const monthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
const checkLeapYear = (year) => {
if (year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0)) {
monthDays[1] = 29;
}
};
export const splitDate = (date, format, today, isRange, dateSeparator) => {
const formatRegex = /[^\p{L}]+/gu;
const dateRegex = /[^\d]+/g;
const formattedDate = formatValueDate(date, today, format);
// we want always this YYYY-MM-DD format
const formatToOrderDate = 'YYYY-MM-DD';
const correctOrder = formatToOrderDate.split('-');
const formatSplit = format.split(formatRegex);
let dateToCheck = '';
// Transform date into YYYY-MM-DD format
const orderDate = date => {
return correctOrder.map((element) => {
if (element.includes('Y')) {
return date[formatSplit.findIndex((x) => x.includes('Y'))];
}
else if (element.includes('M')) {
return date[formatSplit.findIndex((x) => x.includes('M'))];
}
else if (element.includes('D')) {
return date[formatSplit.findIndex((x) => x.includes('D'))];
}
});
};
if (formattedDate.length === format.length) {
const dateSplit = formattedDate.split(dateRegex);
dateToCheck = orderDate(dateSplit).join('-');
}
else if (isRange && date.length > format.length) {
const dateRangeSplit = date.split(dateRegex);
const firstDate = orderDate(dateRangeSplit.slice(0, 3));
const secondDate = orderDate(dateRangeSplit.slice(3, 7));
dateToCheck = `${firstDate.join('-')} ${dateSeparator} ${secondDate.join('-')}`;
}
return {
dateToCheck,
};
};
export const verifyDate = (format, date, minDate, maxDate, dateSeparator, isRange, today = '') => {
const { dateToCheck } = splitDate(date, format, today, isRange, dateSeparator);
const { hasError } = verifyFormat(format, dateToCheck, minDate, maxDate, today, dateSeparator, isRange);
if (hasError) {
return false;
}
const dateString = dateToCheck.replace(/\D/g, '');
const year = Number(dateString.substring(0, 4));
const month = Number(dateString.substring(4, 6));
const day = Number(dateString.substring(6, 8));
checkLeapYear(year);
if (month < 1 || month > 12 || day < 1 || day > monthDays[month - 1]) {
return false;
}
return true;
};
//# sourceMappingURL=verifyDate.js.map