| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /**
- * 日期和时间相关
- *
- * 更复杂的日期操作建议直接使用 dayjs https://dayjs.gitee.io/docs/zh-CN/installation/installation
- */
- import dayjs from 'dayjs';
- import customParseFormat from 'dayjs/plugin/customParseFormat';
- dayjs.extend(customParseFormat);
- export { dayjs };
- /**
- * @group 日期格式
- * @groupOrder 4
- */
- export const DATE_FORMAT = 'YYYY-MM-DD';
- /**
- * @group 日期格式
- * @groupOrder 4
- */
- export const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';
- export const SECOND = 1000; // 毫秒
- export const MINUTE = 60 * SECOND;
- export const HOUR = 60 * MINUTE;
- export const DAY = 24 * HOUR;
- /**
- * 日期解析
- *
- * @group 日期
- * @groupOrder 5
- *
- * @remarks
- * 如果传入数字,我们假定为`毫秒` <br/>
- *` parseDate`会先尝试常见的日期格式(例如 YYYY/MM/DD HH:mm:ss、YYYY-MM-DD HH:mm:ss、YYYY-MM-DD),如果`parse`失败就会使用`format`
- *
- * @param dateString - 要转换成日期的数字和字符串.
- * @param format - 用于指定日期的格式。如果你的日期格式不是常见的格式,可以显式指定
- * @link https://dayjs.gitee.io/docs/zh-CN/parse/string-format
- *
- * @example
- * 例子:
- * ```typescript
- * parseDate(3600)
- * // => 1970-01-01T00:00:03.600Z
- *
- * parseDate('2012/12/10 12:12:12')
- * // => 2012-02-10T04:12:12.000Z
- * ```
- * @public
- */
- export function parseDate(dateString, format) {
- if (typeof dateString === 'number') {
- return new Date(dateString);
- }
- else if (dateString instanceof Date) {
- return dateString;
- }
- const day = dayjs(dateString, format);
- if (day.isValid()) {
- return day.toDate();
- }
- else {
- if (!format) {
- // 兼容 ios
- dateString = dateString.replace(/-/g, '/');
- dateString = dateString.replace(/T/g, ' ');
- }
- const retry = dayjs(dateString);
- if (retry.isValid()) {
- return retry.toDate();
- }
- return null;
- }
- }
- /**
- * 格式化日期
- *
- * @group 日期
- * @groupOrder 5
- *
- * @remarks
- * 如果传入数字,我们假定为`毫秒`
- *
- * @param date - 日期.
- * @param format - 详见 {@link https://dayjs.gitee.io/docs/zh-CN/parse/string-format}.
- *
- * @example
- * 例子:
- * ```
- * const day = new Date('2012/12/12 12:12:12');
- *
- * const target = formatDate(day);
- * // => target = "2012-02-10"
- *
- * const target2 = formatDate(day, 'YYYY-MM-DD HH:mm:ss');
- * // => target2 = "2012-02-10 12:12:12"
- * ```
- * @public
- */
- export function formatDate(date, format = DATE_FORMAT, parseFormat) {
- const parsed = parseDate(date, parseFormat);
- return dayjs(parsed).format(format);
- }
|