123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- import dayjs from 'dayjs'
- import calendar from 'dayjs/plugin/calendar'
- import quarterOfYear from 'dayjs/plugin/quarterOfYear'
- import relativeTime from 'dayjs/plugin/relativeTime'
- import updateLocale from 'dayjs/plugin/updateLocale'
- import utc from 'dayjs/plugin/utc'
- import weekday from 'dayjs/plugin/weekday'
- import 'dayjs/locale/zh-cn'
- dayjs.extend(calendar)
- dayjs.extend(quarterOfYear)
- dayjs.extend(relativeTime)
- dayjs.extend(updateLocale)
- dayjs.extend(utc)
- dayjs.extend(weekday)
- dayjs.locale('zh-cn')
- dayjs.updateLocale('zh-cn', {
- calendar: {
- sameDay: 'HH:mm',
- nextDay: '[明天]',
- nextWeek: 'dddd',
- lastDay: '[昨天] HH:mm',
- lastWeek: 'dddd HH:mm',
- sameElse: 'YYYY年M月D日 HH:mm',
- },
- relativeTime: {
- future: '%s后',
- past: '%s前',
- s: '几秒',
- m: '1分钟',
- mm: '%d分钟',
- h: '1小时',
- hh: '%d小时',
- d: '1天',
- dd: '%d天',
- M: '1个月',
- MM: '%d个月',
- y: '1年',
- yy: '%d年',
- },
- })
- /** 时间工具 */
- export const dateUtil = dayjs
- export const DATETIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'
- export const DATE_FORMAT = 'YYYY-MM-DD'
- export const TIME_FORMAT = 'HH:mm'
- /**
- * 格式化日期
- * @param _date 日期对象、时间戳或字符串
- * @param format 格式字符串
- * @returns 格式化后的日期字符串
- */
- function _format(_date: dayjs.ConfigType, format: string): string {
- if (!_date) {
- return _date as any
- }
- const date = dateUtil(_date)
- return date.isValid() ? date.format(format) : (_date as string)
- }
- /**
- * 格式化为日期时间字符串
- * @param date 日期对象、时间戳或字符串
- * @param format 格式字符串,默认为 DATETIME_FORMAT
- * @returns 格式化后的日期时间字符串
- */
- export function formatToDatetime(date: dayjs.ConfigType = undefined, format: string = DATETIME_FORMAT): string {
- return _format(date, format)
- }
- /**
- * 格式化为日期字符串
- * @param date 日期对象、时间戳或字符串
- * @param format 格式字符串,默认为 DATE_FORMAT
- * @returns 格式化后的日期字符串
- */
- export function formatToDate(date: dayjs.ConfigType = undefined, format: string = DATE_FORMAT): string {
- return _format(date, format)
- }
- /**
- * 格式化为日期字符串
- * @param date 日期对象、时间戳或字符串
- * @param format 格式字符串,默认为 TIME_FORMAT
- * @returns 格式化后的日期字符串
- */
- export function formatToTime(date: dayjs.ConfigType = undefined, format: string = TIME_FORMAT): string {
- return _format(date, format)
- }
- /**
- * 时间人性化显示
- * @param date 要格式化的日期
- * @param oppositeDate 参考日期,默认为当前时间
- * @returns 人性化的时间字符串
- */
- export function humanizedDate(date: dayjs.ConfigType, oppositeDate: dayjs.ConfigType = undefined): string {
- if (!date || !dateUtil(date).isValid()) {
- return ''
- }
- const now = oppositeDate ? dateUtil(oppositeDate) : dateUtil()
- const diffSeconds = now.diff(date, 'second')
- const diffMinutes = now.diff(date, 'minute')
- const diffHours = now.diff(date, 'hour')
- const diffDays = now.diff(date, 'day')
- if (diffSeconds < 60) {
- return `${diffSeconds}秒前`
- }
- else if (diffMinutes < 60) {
- return `${diffMinutes}分钟前`
- }
- else if (diffHours < 24) {
- return `${diffHours}小时前`
- }
- else if (diffDays < 7) {
- return `${diffDays}天前`
- }
- else {
- return formatToDatetime(date)
- }
- }
- /**
- * 获取时辰问候语
- * @returns 根据当前时间返回相应的问候语
- */
- export function getGreeting(): string {
- const currentHour = dateUtil().hour()
- if (currentHour >= 5 && currentHour < 12) {
- return '早上好'
- }
- else if (currentHour >= 12 && currentHour < 14) {
- return '中午好'
- }
- else if (currentHour >= 14 && currentHour < 18) {
- return '下午好'
- }
- else if (currentHour >= 18 && currentHour < 24) {
- return '晚上好'
- }
- else {
- return '深夜了'
- }
- }
|