mobile-more
Version:
基于 antd-mobile v5 扩展移动端 UI 组件
94 lines (91 loc) • 3.14 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import { isArray } from 'ut2';
import { dayjs, formatQuarter, isInvalidDateString } from "../../utils/dayjsUtil";
/**日期格式映射 */
export var DateFieldFormat = {
date: 'YYYY-MM-DD',
dateRange: 'YYYY-MM-DD',
dateWeek: 'YYYY-wo',
dateMonth: 'YYYY-MM',
dateQuarter: 'YYYY-\\QQ',
dateYear: 'YYYY',
dateTime: 'YYYY-MM-DD HH:mm:ss',
dateTimeRange: 'YYYY-MM-DD HH:mm:ss',
time: 'HH:mm:ss',
timeRange: 'HH:mm:ss'
};
var DateFieldValueType = Object.keys(DateFieldFormat).concat(['fromNow']);
/**
* 判断是否为日期字段值类型
* @param fieldValueType 字段类型字符串
* @returns
*/
export function isDateFieldType(fieldValueType) {
return !!fieldValueType && DateFieldValueType.includes(fieldValueType);
}
/**
* 格式化日期字符串
*
* @param value 日期值
* @param format 日期格式
* @returns 格式化后的日期字符串
* @example
* _formatDate('2023-03-01', 'YYYY-MM-DD') // '2023-03-01'
* _formatDate('invalid date', 'YYYY-MM-DD') // 'invalid date'
* _formatDate('23:00:00', 'HH:mm:ss') // '23:00:00'
* _formatDate('23:00', 'HH:mm:ss') // 'Invalid Date'
* _formatDate(dayjs('2023-03-01 23:00:00'), 'HH:mm:ss') // '23:00:00'
*/
function _formatDate(value, format) {
var str = dayjs(value).format(format);
if (isInvalidDateString(str)) {
str = dayjs(value, format).format(format);
}
return str;
}
/**
* 获取格式化后的日期字符串
* @param value 日期值
* @param type 日期字段类型
* @param format 日期格式
* @returns 格式化后的日期字符串
* @example
* transformDateFieldValue('2023-03-01', 'date') // '2023-03-01'
* transformDateFieldValue('abc', 'date') // 'Invalid Date'
* transformDateFieldValue('23:00:00', 'time') // '23:00:00'
* transformDateFieldValue('23:00', 'time') // 'Invalid Date'
* transformDateFieldValue(dayjs('2023-03-01 23:00:00'), 'time') // '23:00:00'
* transformDateFieldValue(['2023-03-01', '2025-03-01'], 'dateRange') // '2023-03-01 ~ 2025-03-01'
* transformDateFieldValue('2023-03-01', 'fromNow') // '10个月前'
*/
export function transformDateFieldValue(value) {
var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'date';
var format = arguments.length > 2 ? arguments[2] : undefined;
if (!value) {
return '';
}
if (isArray(value)) {
// @ts-ignore
if (value.length === 0) {
return '';
}
if (type === 'dateRange' || type === 'dateTimeRange' || type === 'timeRange') {
var _fmt = format || DateFieldFormat[type];
var _value = _slicedToArray(value, 2),
startDate = _value[0],
endDate = _value[1];
var startText = startDate ? _formatDate(startDate, _fmt) : '-';
var endText = endDate ? _formatDate(endDate, _fmt) : '-';
return "".concat(startText, " ~ ").concat(endText);
}
return '';
}
if (type === 'fromNow') {
return dayjs(value).fromNow();
}
if (type === 'dateQuarter') {
return formatQuarter(value);
}
var fmt = format || DateFieldFormat[type];
return _formatDate(value, fmt);
}