first commit
This commit is contained in:
commit
eb2f504652
32490 changed files with 5731109 additions and 0 deletions
134
node_modules/@vuepic/vue-datepicker/src/VueDatePicker/utils/date-utils.ts
generated
vendored
Normal file
134
node_modules/@vuepic/vue-datepicker/src/VueDatePicker/utils/date-utils.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
import {
|
||||
parse,
|
||||
isDate,
|
||||
isValid,
|
||||
setHours,
|
||||
setMinutes,
|
||||
setSeconds,
|
||||
setMilliseconds,
|
||||
isBefore,
|
||||
isEqual,
|
||||
isAfter,
|
||||
} from 'date-fns';
|
||||
import type { DateTimeSetter, DateValue } from '@/interfaces';
|
||||
|
||||
const parseTextToDate = (value: string, pattern: string): Date | null => {
|
||||
const parsedDate = parse(value, pattern.slice(0, value.length), new Date());
|
||||
if (isValid(parsedDate) && isDate(parsedDate)) {
|
||||
return parsedDate;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
export const parseFreeInput = (
|
||||
value: string,
|
||||
pattern: string | string[] | ((value: string) => Date | null),
|
||||
): Date | null => {
|
||||
if (typeof pattern === 'string') {
|
||||
return parseTextToDate(value, pattern);
|
||||
}
|
||||
|
||||
if (Array.isArray(pattern)) {
|
||||
let parsedDate = null;
|
||||
for (const textVal of pattern) {
|
||||
parsedDate = parseTextToDate(value, textVal);
|
||||
if (parsedDate) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return parsedDate;
|
||||
}
|
||||
|
||||
if (typeof pattern === 'function') {
|
||||
return pattern(value);
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
export const getDate = (value?: Date | string | number) => (value ? new Date(value) : new Date());
|
||||
|
||||
export const dateToUtc = (date: Date, preserve: boolean) => {
|
||||
if (preserve) {
|
||||
const month = (date.getMonth() + 1).toString().padStart(2, '0');
|
||||
const day = date.getDate().toString().padStart(2, '0');
|
||||
const hours = date.getHours().toString().padStart(2, '0');
|
||||
const minutes = date.getMinutes().toString().padStart(2, '0');
|
||||
|
||||
return `${date.getFullYear()}-${month}-${day}T${hours}:${minutes}:00.000Z`;
|
||||
}
|
||||
const utcDate = Date.UTC(
|
||||
date.getUTCFullYear(),
|
||||
date.getUTCMonth(),
|
||||
date.getUTCDate(),
|
||||
date.getUTCHours(),
|
||||
date.getUTCMinutes(),
|
||||
date.getUTCSeconds(),
|
||||
);
|
||||
|
||||
return new Date(utcDate).toISOString();
|
||||
};
|
||||
|
||||
// Reset date time
|
||||
export const resetDateTime = (value: Date | string): Date => {
|
||||
let dateParse = getDate(JSON.parse(JSON.stringify(value)));
|
||||
dateParse = setHours(dateParse, 0);
|
||||
dateParse = setMinutes(dateParse, 0);
|
||||
dateParse = setSeconds(dateParse, 0);
|
||||
dateParse = setMilliseconds(dateParse, 0);
|
||||
|
||||
return dateParse;
|
||||
};
|
||||
|
||||
export const setDateTime = (
|
||||
date: Date | null,
|
||||
hours?: DateTimeSetter,
|
||||
minutes?: DateTimeSetter,
|
||||
seconds?: DateTimeSetter,
|
||||
): Date => {
|
||||
let dateCopy = date ? getDate(date) : getDate();
|
||||
if (hours || hours === 0) {
|
||||
dateCopy = setHours(dateCopy, +hours);
|
||||
}
|
||||
if (minutes || minutes === 0) {
|
||||
dateCopy = setMinutes(dateCopy, +minutes);
|
||||
}
|
||||
if (seconds || seconds === 0) {
|
||||
dateCopy = setSeconds(dateCopy, +seconds);
|
||||
}
|
||||
return setMilliseconds(dateCopy, 0);
|
||||
};
|
||||
|
||||
export const isDateBefore = (date: DateValue, dateToCompare: DateValue): boolean => {
|
||||
if (!date || !dateToCompare) {
|
||||
return false;
|
||||
}
|
||||
return isBefore(resetDateTime(date), resetDateTime(dateToCompare));
|
||||
};
|
||||
|
||||
export const isDateEqual = (date: DateValue, dateToCompare: DateValue): boolean => {
|
||||
if (!date || !dateToCompare) {
|
||||
return false;
|
||||
}
|
||||
return isEqual(resetDateTime(date), resetDateTime(dateToCompare));
|
||||
};
|
||||
|
||||
export const isDateAfter = (date: DateValue, dateToCompare: DateValue): boolean => {
|
||||
if (!date || !dateToCompare) {
|
||||
return false;
|
||||
}
|
||||
return isAfter(resetDateTime(date), resetDateTime(dateToCompare));
|
||||
};
|
||||
|
||||
export const isDateBetween = (range: Date[], hoverDate: Date | null, dateToCheck: Date): boolean => {
|
||||
if (range && range[0] && range[1]) {
|
||||
return isDateAfter(dateToCheck, range[0]) && isDateBefore(dateToCheck, range[1]);
|
||||
}
|
||||
if (range && range[0] && hoverDate) {
|
||||
return (
|
||||
(isDateAfter(dateToCheck, range[0]) && isDateBefore(dateToCheck, hoverDate)) ||
|
||||
(isDateBefore(dateToCheck, range[0]) && isDateAfter(dateToCheck, hoverDate))
|
||||
);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue