175 lines
4.8 KiB
JavaScript
175 lines
4.8 KiB
JavaScript
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.isEqualDate = exports.getValidValue = exports.getValueByDate = exports.getDateByValue = exports.getRangeData = void 0;
|
||
var tslib_1 = require("tslib");
|
||
var dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
||
function getArray(start, end, suffix) {
|
||
var res = [];
|
||
for (var i = 0; i < end - start + 1; i++) {
|
||
res.push({ label: start + i + suffix, value: start + i });
|
||
}
|
||
return res;
|
||
}
|
||
var precisionLengthRecord = {
|
||
year: 1,
|
||
month: 2,
|
||
day: 3,
|
||
hour: 4,
|
||
minute: 5,
|
||
second: 6,
|
||
};
|
||
function getYears(min, max) {
|
||
return getArray(min.year(), max.year(), '年');
|
||
}
|
||
function getMonths(min, max, currentPicker) {
|
||
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;
|
||
}
|
||
return getArray(start, end, '月');
|
||
}
|
||
function getDates(min, max, currentPicker) {
|
||
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();
|
||
}
|
||
return getArray(start, end, '日');
|
||
}
|
||
function getHours(min, max, currentPicker) {
|
||
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();
|
||
}
|
||
return getArray(start, end, '时');
|
||
}
|
||
function getMinutes(min, max, currentPicker) {
|
||
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();
|
||
}
|
||
return getArray(start, end, '分');
|
||
}
|
||
function getSeconds(min, max, currentPicker) {
|
||
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();
|
||
}
|
||
return getArray(start, end, '秒');
|
||
}
|
||
function getRangeData(precision, min, max, currentPickerDay) {
|
||
var data = [];
|
||
var len = precisionLengthRecord[precision];
|
||
if (!len)
|
||
return [];
|
||
for (var i = 0; i < len; i++) {
|
||
switch (i) {
|
||
case 0:
|
||
data.push(getYears(min, max));
|
||
break;
|
||
case 1:
|
||
data.push(getMonths(min, max, currentPickerDay));
|
||
break;
|
||
case 2:
|
||
data.push(getDates(min, max, currentPickerDay));
|
||
break;
|
||
case 3:
|
||
data.push(getHours(min, max, currentPickerDay));
|
||
break;
|
||
case 4:
|
||
data.push(getMinutes(min, max, currentPickerDay));
|
||
break;
|
||
case 5:
|
||
data.push(getSeconds(min, max, currentPickerDay));
|
||
break;
|
||
}
|
||
}
|
||
return data;
|
||
}
|
||
exports.getRangeData = getRangeData;
|
||
/**
|
||
* 选中的值转换为时间类型,主要处理month从0开始的情况
|
||
* @param value
|
||
* @returns
|
||
*/
|
||
function getDateByValue(value) {
|
||
//@ts-ignore
|
||
return new (Date.bind.apply(Date, tslib_1.__spreadArray([void 0], value.map(function (v, i) { return String(i === 1 ? v - 1 : v); }), false)))();
|
||
}
|
||
exports.getDateByValue = getDateByValue;
|
||
/**
|
||
* date转换为value数组
|
||
* @param value
|
||
* @returns
|
||
*/
|
||
function getValueByDate(date, precision) {
|
||
var fields = [
|
||
'getFullYear',
|
||
'getMonth',
|
||
'getDate',
|
||
'getHours',
|
||
'getMinutes',
|
||
'getSeconds',
|
||
];
|
||
var value = [];
|
||
for (var i = 0; i < precisionLengthRecord[precision]; i++) {
|
||
value.push(date[fields[i]]());
|
||
if (i === 1) {
|
||
value[1] = value[1] + 1;
|
||
}
|
||
}
|
||
return value;
|
||
}
|
||
exports.getValueByDate = getValueByDate;
|
||
/**
|
||
* 是否有效日期,主要处理月份对应可选日期,避免当前时间日期超出当月最后一天
|
||
* @param value
|
||
*/
|
||
function getValidValue(value) {
|
||
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;
|
||
}
|
||
exports.getValidValue = getValidValue;
|
||
/**
|
||
* 比较两个date是否是同一时间
|
||
* @param date1
|
||
* @param date2
|
||
*/
|
||
function isEqualDate(date1, date2) {
|
||
if (date1 instanceof Date && date2 instanceof Date) {
|
||
return (0, dayjs_1.default)(date1).isSame(date2);
|
||
}
|
||
return date1 === date2;
|
||
}
|
||
exports.isEqualDate = isEqualDate; |