/** * Independent time operation tool to facilitate subsequent switch to dayjs */ import dayjs from 'dayjs'; import WeekOfYear from 'dayjs/plugin/WeekOfYear'; import RelativeTime from 'dayjs/plugin/relativeTime'; import solarLunar from 'solarLunar'; dayjs.extend(WeekOfYear); dayjs.extend(RelativeTime); dayjs.locale('zh-cn'); const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'; const DATE_FORMAT = 'YYYY-MM-DD'; type dayisInput = string | number | Date | dayjs.Dayjs | null | undefined; export type ManipulateType = | 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year' | 'd' | 'D' | 'M' | 'y'; export function formatToDateTime(date?: dayisInput, format = DATE_TIME_FORMAT): string { return dayjs(date).format(format); } export function formatToDate(date?: dayisInput, format = DATE_FORMAT): string { return dayjs(date).format(format); } export function toTimeStamp(date?: dayisInput) { return dayjs(date).unix(); } export function today() { return formatToDate(); } export function yearsAgo(year: number, dateStr?: dayisInput) { return dayjs(dateStr).subtract(year, 'year').format(DATE_FORMAT); } export function monthsAgo(month: number, dateStr?: dayisInput) { return dayjs(dateStr).subtract(month, 'month').format(DATE_FORMAT); } export function daysAgo(day: number, dateStr?: dayisInput) { return dayjs(dateStr).subtract(day, 'day').format(DATE_FORMAT); } export function getYear(dateStr?: dayisInput) { return dayjs(dateStr).year(); } export function getMonth(dateStr?: dayisInput) { return dayjs(dateStr).month(); } export function relativeTime(time: dayisInput, from?: dayisInput) { return dayjs(time).from(from); } export function solarLunarConvert( dateStr?: dayisInput, lunar: 'lunar' | 'solar' = 'solar', ): { monthCn: string; dayCn: string; yearCn: string; } { const { monthCn, dayCn, yearCn } = solarLunar[lunar === 'lunar' ? 'lunar2solar' : 'solar2lunar']( dayjs(dateStr).year(), dayjs(dateStr).month() + 1, dayjs(dateStr).date(), ); return { monthCn, dayCn, yearCn, }; } export const solarLunarFullMonths = [ '正月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '冬月', '腊月', ]; export const solarLunarFullYearDays = [ '正月初一', '正月初二', '正月初三', '正月初四', '正月初五', '正月初六', '正月初七', '正月初八', '正月初九', '正月初十', '正月十一', '正月十二', '正月十三', '正月十四', '正月十五', '正月十六', '正月十七', '正月十八', '正月十九', '正月廿十', '正月廿一', '正月廿二', '正月廿三', '正月廿四', '正月廿五', '正月廿六', '正月廿七', '正月廿八', '正月廿九', '正月卅十', '正月卅一', '二月初一', '二月初二', '二月初三', '二月初四', '二月初五', '二月初六', '二月初七', '二月初八', '二月初九', '二月初十', '二月十一', '二月十二', '二月十三', '二月十四', '二月十五', '二月十六', '二月十七', '二月十八', '二月十九', '二月廿十', '二月廿一', '二月廿二', '二月廿三', '二月廿四', '二月廿五', '二月廿六', '二月廿七', '二月廿八', '二月廿九', '二月卅十', '二月卅一', '三月初一', '三月初二', '三月初三', '三月初四', '三月初五', '三月初六', '三月初七', '三月初八', '三月初九', '三月初十', '三月十一', '三月十二', '三月十三', '三月十四', '三月十五', '三月十六', '三月十七', '三月十八', '三月十九', '三月廿十', '三月廿一', '三月廿二', '三月廿三', '三月廿四', '三月廿五', '三月廿六', '三月廿七', '三月廿八', '三月廿九', '三月卅十', '三月卅一', '四月初一', '四月初二', '四月初三', '四月初四', '四月初五', '四月初六', '四月初七', '四月初八', '四月初九', '四月初十', '四月十一', '四月十二', '四月十三', '四月十四', '四月十五', '四月十六', '四月十七', '四月十八', '四月十九', '四月廿十', '四月廿一', '四月廿二', '四月廿三', '四月廿四', '四月廿五', '四月廿六', '四月廿七', '四月廿八', '四月廿九', '四月卅十', '四月卅一', '五月初一', '五月初二', '五月初三', '五月初四', '五月初五', '五月初六', '五月初七', '五月初八', '五月初九', '五月初十', '五月十一', '五月十二', '五月十三', '五月十四', '五月十五', '五月十六', '五月十七', '五月十八', '五月十九', '五月廿十', '五月廿一', '五月廿二', '五月廿三', '五月廿四', '五月廿五', '五月廿六', '五月廿七', '五月廿八', '五月廿九', '五月卅十', '五月卅一', '六月初一', '六月初二', '六月初三', '六月初四', '六月初五', '六月初六', '六月初七', '六月初八', '六月初九', '六月初十', '六月十一', '六月十二', '六月十三', '六月十四', '六月十五', '六月十六', '六月十七', '六月十八', '六月十九', '六月廿十', '六月廿一', '六月廿二', '六月廿三', '六月廿四', '六月廿五', '六月廿六', '六月廿七', '六月廿八', '六月廿九', '六月卅十', '六月卅一', '七月初一', '七月初二', '七月初三', '七月初四', '七月初五', '七月初六', '七月初七', '七月初八', '七月初九', '七月初十', '七月十一', '七月十二', '七月十三', '七月十四', '七月十五', '七月十六', '七月十七', '七月十八', '七月十九', '七月廿十', '七月廿一', '七月廿二', '七月廿三', '七月廿四', '七月廿五', '七月廿六', '七月廿七', '七月廿八', '七月廿九', '七月卅十', '七月卅一', '八月初一', '八月初二', '八月初三', '八月初四', '八月初五', '八月初六', '八月初七', '八月初八', '八月初九', '八月初十', '八月十一', '八月十二', '八月十三', '八月十四', '八月十五', '八月十六', '八月十七', '八月十八', '八月十九', '八月廿十', '八月廿一', '八月廿二', '八月廿三', '八月廿四', '八月廿五', '八月廿六', '八月廿七', '八月廿八', '八月廿九', '八月卅十', '八月卅一', '九月初一', '九月初二', '九月初三', '九月初四', '九月初五', '九月初六', '九月初七', '九月初八', '九月初九', '九月初十', '九月十一', '九月十二', '九月十三', '九月十四', '九月十五', '九月十六', '九月十七', '九月十八', '九月十九', '九月廿十', '九月廿一', '九月廿二', '九月廿三', '九月廿四', '九月廿五', '九月廿六', '九月廿七', '九月廿八', '九月廿九', '九月卅十', '九月卅一', '十月初一', '十月初二', '十月初三', '十月初四', '十月初五', '十月初六', '十月初七', '十月初八', '十月初九', '十月初十', '十月十一', '十月十二', '十月十三', '十月十四', '十月十五', '十月十六', '十月十七', '十月十八', '十月十九', '十月廿十', '十月廿一', '十月廿二', '十月廿三', '十月廿四', '十月廿五', '十月廿六', '十月廿七', '十月廿八', '十月廿九', '十月卅十', '十月卅一', '冬月初一', '冬月初二', '冬月初三', '冬月初四', '冬月初五', '冬月初六', '冬月初七', '冬月初八', '冬月初九', '冬月初十', '冬月十一', '冬月十二', '冬月十三', '冬月十四', '冬月十五', '冬月十六', '冬月十七', '冬月十八', '冬月十九', '冬月廿十', '冬月廿一', '冬月廿二', '冬月廿三', '冬月廿四', '冬月廿五', '冬月廿六', '冬月廿七', '冬月廿八', '冬月廿九', '冬月卅十', '冬月卅一', '腊月初一', '腊月初二', '腊月初三', '腊月初四', '腊月初五', '腊月初六', '腊月初七', '腊月初八', '腊月初九', '腊月初十', '腊月十一', '腊月十二', '腊月十三', '腊月十四', '腊月十五', '腊月十六', '腊月十七', '腊月十八', '腊月十九', '腊月廿十', '腊月廿一', '腊月廿二', '腊月廿三', '腊月廿四', '腊月廿五', '腊月廿六', '腊月廿七', '腊月廿八', '腊月廿九', '腊月卅十', '腊月卅一', ]; export const dateUtil = dayjs; export type DateUtil = dayjs.Dayjs;