53 lines
1.5 KiB
JavaScript
53 lines
1.5 KiB
JavaScript
/**
|
|
* Get Date info from user input
|
|
*
|
|
* 从用户输入获取日期信息
|
|
*
|
|
* @param input - The input to parse / 要解析的输入
|
|
*
|
|
* @returns Date object or null if input is invalid / 日期对象,如果输入无效则返回 null
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* getDate('2023-01-01') // Date object
|
|
* getDate(1640995200000) // Date object
|
|
* getDate('invalid') // null
|
|
* ```
|
|
*/
|
|
export const getDate = (input) => {
|
|
if (input) {
|
|
if (typeof input === 'number')
|
|
return new Date(input);
|
|
// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
const date = Date.parse(input.toString());
|
|
if (!Number.isNaN(date))
|
|
return new Date(date);
|
|
}
|
|
return null;
|
|
};
|
|
/**
|
|
* Date sorter from latest to oldest
|
|
*
|
|
* 从最新到最旧的日期排序器
|
|
*
|
|
* @param valueA - First date value / 第一个日期值
|
|
* @param valueB - Second date value / 第二个日期值
|
|
*
|
|
* @returns Comparison result / 比较结果
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* const dates = ['2023-01-01', '2023-12-31', '2023-06-15']
|
|
* dates.sort(dateSorter) // ['2023-12-31', '2023-06-15', '2023-01-01']
|
|
* ```
|
|
*/
|
|
export const dateSorter = (valueA, valueB) => {
|
|
const dateA = getDate(typeof valueA === 'number' ? new Date(valueA) : valueA);
|
|
const dateB = getDate(typeof valueB === 'number' ? new Date(valueB) : valueB);
|
|
if (!dateA)
|
|
return dateB ? 1 : 0;
|
|
if (!dateB)
|
|
return -1;
|
|
return dateB.getTime() - dateA.getTime();
|
|
};
|