2024-12-01 11:56:54 +00:00
|
|
|
|
import { __spreadArray } from "tslib";
|
|
|
|
|
import dayjs from 'dayjs';
|
|
|
|
|
function getArray(start, end, format) {
|
2024-11-10 07:01:22 +00:00
|
|
|
|
var res = [];
|
|
|
|
|
for (var i = 0; i < end - start + 1; i++) {
|
2024-12-01 11:56:54 +00:00
|
|
|
|
res.push({ label: format(start + i), value: start + i });
|
2024-11-10 07:01:22 +00:00
|
|
|
|
}
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
var precisionLengthRecord = {
|
|
|
|
|
year: 1,
|
|
|
|
|
month: 2,
|
|
|
|
|
day: 3,
|
|
|
|
|
hour: 4,
|
|
|
|
|
minute: 5,
|
|
|
|
|
second: 6,
|
|
|
|
|
};
|
2024-12-01 11:56:54 +00:00
|
|
|
|
function getYears(min, max, format) {
|
|
|
|
|
return getArray(min.year(), max.year(), format.bind(this, 'year'));
|
2024-11-10 07:01:22 +00:00
|
|
|
|
}
|
2024-12-01 11:56:54 +00:00
|
|
|
|
function getMonths(min, max, currentPicker, format) {
|
2024-11-10 07:01:22 +00:00
|
|
|
|
var start = 1;
|
|
|
|
|
var end = 12;
|
|
|
|
|
if (currentPicker
|
|
|
|
|
.clone()
|
|
|
|
|
.set('month', start - 1)
|
|
|
|
|
.isBefore(min)) {
|
|
|
|
|
start = min.month() + 1;
|
|
|
|
|
}
|
|
|
|
|
if (currentPicker
|
|
|
|
|
.clone()
|
|
|
|
|
.set('month', end - 1)
|
|
|
|
|
.isAfter(max)) {
|
|
|
|
|
end = max.month() + 1;
|
|
|
|
|
}
|
2024-12-01 11:56:54 +00:00
|
|
|
|
return getArray(start, end, format.bind(this, 'month'));
|
2024-11-10 07:01:22 +00:00
|
|
|
|
}
|
2024-12-01 11:56:54 +00:00
|
|
|
|
function getDates(min, max, currentPicker, format) {
|
2024-11-10 07:01:22 +00:00
|
|
|
|
var start = 1;
|
|
|
|
|
var end = currentPicker.daysInMonth();
|
|
|
|
|
if (currentPicker.clone().set('date', start).isBefore(min)) {
|
|
|
|
|
start = min.date();
|
|
|
|
|
}
|
|
|
|
|
if (currentPicker.clone().set('date', end).isAfter(max)) {
|
|
|
|
|
end = max.date();
|
|
|
|
|
}
|
2024-12-01 11:56:54 +00:00
|
|
|
|
return getArray(start, end, format.bind(this, 'day'));
|
2024-11-10 07:01:22 +00:00
|
|
|
|
}
|
2024-12-01 11:56:54 +00:00
|
|
|
|
function getHours(min, max, currentPicker, format) {
|
2024-11-10 07:01:22 +00:00
|
|
|
|
var start = 0;
|
|
|
|
|
var end = 23;
|
|
|
|
|
if (currentPicker.clone().set('hour', start).isBefore(min)) {
|
|
|
|
|
start = min.hour();
|
|
|
|
|
}
|
|
|
|
|
if (currentPicker.clone().set('hour', end).isAfter(max)) {
|
|
|
|
|
end = max.hour();
|
|
|
|
|
}
|
2024-12-01 11:56:54 +00:00
|
|
|
|
return getArray(start, end, format.bind(this, 'hour'));
|
2024-11-10 07:01:22 +00:00
|
|
|
|
}
|
2024-12-01 11:56:54 +00:00
|
|
|
|
function getMinutes(min, max, currentPicker, format) {
|
2024-11-10 07:01:22 +00:00
|
|
|
|
var start = 0;
|
|
|
|
|
var end = 59;
|
|
|
|
|
if (currentPicker.clone().set('minute', start).isBefore(min)) {
|
|
|
|
|
start = min.minute();
|
|
|
|
|
}
|
|
|
|
|
if (currentPicker.clone().set('minute', end).isAfter(max)) {
|
|
|
|
|
end = max.minute();
|
|
|
|
|
}
|
2024-12-01 11:56:54 +00:00
|
|
|
|
return getArray(start, end, format.bind(this, 'minute'));
|
2024-11-10 07:01:22 +00:00
|
|
|
|
}
|
2024-12-01 11:56:54 +00:00
|
|
|
|
function getSeconds(min, max, currentPicker, format) {
|
2024-11-10 07:01:22 +00:00
|
|
|
|
var start = 0;
|
|
|
|
|
var end = 59;
|
|
|
|
|
if (currentPicker.clone().set('second', start).isBefore(min)) {
|
|
|
|
|
start = min.second();
|
|
|
|
|
}
|
|
|
|
|
if (currentPicker.clone().set('second', end).isAfter(max)) {
|
|
|
|
|
end = max.second();
|
|
|
|
|
}
|
2024-12-01 11:56:54 +00:00
|
|
|
|
return getArray(start, end, format.bind(this, 'second'));
|
2024-11-10 07:01:22 +00:00
|
|
|
|
}
|
2024-12-01 11:56:54 +00:00
|
|
|
|
export function getRangeData(precision, min, max, currentPickerDay, format) {
|
2024-11-10 07:01:22 +00:00
|
|
|
|
var data = [];
|
|
|
|
|
var len = precisionLengthRecord[precision];
|
|
|
|
|
if (!len)
|
|
|
|
|
return [];
|
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
|
|
|
switch (i) {
|
|
|
|
|
case 0:
|
2024-12-01 11:56:54 +00:00
|
|
|
|
data.push(getYears(min, max, format));
|
2024-11-10 07:01:22 +00:00
|
|
|
|
break;
|
|
|
|
|
case 1:
|
2024-12-01 11:56:54 +00:00
|
|
|
|
data.push(getMonths(min, max, currentPickerDay, format));
|
2024-11-10 07:01:22 +00:00
|
|
|
|
break;
|
|
|
|
|
case 2:
|
2024-12-01 11:56:54 +00:00
|
|
|
|
data.push(getDates(min, max, currentPickerDay, format));
|
2024-11-10 07:01:22 +00:00
|
|
|
|
break;
|
|
|
|
|
case 3:
|
2024-12-01 11:56:54 +00:00
|
|
|
|
data.push(getHours(min, max, currentPickerDay, format));
|
2024-11-10 07:01:22 +00:00
|
|
|
|
break;
|
|
|
|
|
case 4:
|
2024-12-01 11:56:54 +00:00
|
|
|
|
data.push(getMinutes(min, max, currentPickerDay, format));
|
2024-11-10 07:01:22 +00:00
|
|
|
|
break;
|
|
|
|
|
case 5:
|
2024-12-01 11:56:54 +00:00
|
|
|
|
data.push(getSeconds(min, max, currentPickerDay, format));
|
2024-11-10 07:01:22 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return data;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 选中的值转换为时间类型,主要处理month从0开始的情况
|
|
|
|
|
* @param value
|
|
|
|
|
* @returns
|
|
|
|
|
*/
|
2024-12-01 11:56:54 +00:00
|
|
|
|
export function getDateByValue(value) {
|
2024-11-10 07:01:22 +00:00
|
|
|
|
//@ts-ignore
|
2024-12-01 11:56:54 +00:00
|
|
|
|
return new (Date.bind.apply(Date, __spreadArray([void 0], value.map(function (v, i) { return String(i === 1 ? v - 1 : v); }), false)))();
|
2024-11-10 07:01:22 +00:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* date转换为value数组
|
|
|
|
|
* @param value
|
|
|
|
|
* @returns
|
|
|
|
|
*/
|
2024-12-01 11:56:54 +00:00
|
|
|
|
export function getValueByDate(date, precision) {
|
2024-11-10 07:01:22 +00:00
|
|
|
|
var fields = [
|
|
|
|
|
'getFullYear',
|
|
|
|
|
'getMonth',
|
|
|
|
|
'getDate',
|
|
|
|
|
'getHours',
|
|
|
|
|
'getMinutes',
|
|
|
|
|
'getSeconds',
|
|
|
|
|
];
|
|
|
|
|
var value = [];
|
2024-12-01 11:56:54 +00:00
|
|
|
|
if (!date)
|
|
|
|
|
return value;
|
2024-11-10 07:01:22 +00:00
|
|
|
|
for (var i = 0; i < precisionLengthRecord[precision]; i++) {
|
|
|
|
|
value.push(date[fields[i]]());
|
|
|
|
|
if (i === 1) {
|
|
|
|
|
value[1] = value[1] + 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 是否有效日期,主要处理月份对应可选日期,避免当前时间日期超出当月最后一天
|
|
|
|
|
* @param value
|
|
|
|
|
*/
|
2024-12-01 11:56:54 +00:00
|
|
|
|
export function getValidValue(value) {
|
2024-11-10 07:01:22 +00:00
|
|
|
|
if (value.length > 2) {
|
|
|
|
|
var maxDate = new Date(value[0], value[1], 0).getDate();
|
|
|
|
|
if (value[2] > maxDate) {
|
|
|
|
|
value = value.slice();
|
|
|
|
|
value[2] = maxDate;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 比较两个date是否是同一时间
|
|
|
|
|
* @param date1
|
|
|
|
|
* @param date2
|
|
|
|
|
*/
|
2024-12-01 11:56:54 +00:00
|
|
|
|
export function isEqualDate(date1, date2) {
|
2024-11-10 07:01:22 +00:00
|
|
|
|
if (date1 instanceof Date && date2 instanceof Date) {
|
2024-12-01 11:56:54 +00:00
|
|
|
|
return dayjs(date1).isSame(date2);
|
2024-11-10 07:01:22 +00:00
|
|
|
|
}
|
|
|
|
|
return date1 === date2;
|
|
|
|
|
}
|