/** * @Author YuanWei * @Date 2021/01/13 17:39:28 * @FileName date.js * @Description: 时间工具类 */ import dayjs from 'dayjs' import 'dayjs/locale/zh-cn' // import localeData from 'dayjs/plugin/localeData' import isSameOrAfterPlugin from 'dayjs/plugin/isSameOrAfter' import isSameOrBeforePlugin from 'dayjs/plugin/isSameOrBefore' dayjs.locale('zh-cn') // dayjs.extend(localeData) dayjs.extend(isSameOrAfterPlugin) dayjs.extend(isSameOrBeforePlugin) const dateFormat = { DATE_PATTERN_FLAT: 'YYYY-MM-DD HH:mm:ss' } /** * 检查时间字段,字符串则转换为日期对象 * @param param * @returns {Date} */ const transformParam = function (param) { return typeof param === 'string' ? new Date(param) : param } /** * 获取当天开始时间 * @returns {Date} */ export const getToDayDate = function () { return dayjs().startOf('day').toDate() } /** * 获取指定日期的开始日期部分时间 * @param date */ export const getDayDate = function (date) { return dayjs(transformParam(date)).startOf('day').toDate() } /** * 格式化时间 * @param date 需要格式化的时间(string|Date) * @param format 时间格式 * @returns {string} 返回字符串时间 */ export function formatterDate(date, format = dateFormat.DATE_PATTERN_FLAT) { return dayjs(transformParam(date)).format(format) } /** * 格式化秒 * @param second * @param format * @returns {string} */ export function formatterSecond(second, format = dateFormat.DATE_PATTERN_FLAT) { return dayjs(new Date(second * 1000)).format(format) } /** * 格式化毫秒 * @param millisecond * @param format * @returns {string} */ export function formatterMillisecond(millisecond, format = dateFormat.DATE_PATTERN_FLAT) { return dayjs(new Date(millisecond)).format(format) } /** * 格式化秒或毫秒 * @param time * @param format */ export function formatterSecondOrMillisecond(time, format = dateFormat.DATE_PATTERN_FLAT) { let length = String(time).length let temp try { temp = parseInt(time) } catch (e) { return null } //判断时间是否为负数(小于1970) if (temp > 0) { if (length === 13) { //毫秒级 return formatterMillisecond(temp, format) } else if (length === 10) { //秒级 return formatterSecond(temp, format) } else { return null } } else { //因为多了负号所以长度加1 if (length === 14) { //毫秒级 return formatterMillisecond(temp, format) } else if (length === 11) { //秒级 return formatterSecond(temp, format) } else { return null } } // throw new Error('time not is second or millisecond') } /** * 判断时间是否是今天 * @param date * @returns {boolean} */ export function isToDay(date) { return dayjs(new Date()).isSame(transformParam(date), 'day') } /** * 是否在今天之前 * @param date */ export function isToDayOrBefore(date) { return dayjs(new Date()).isSameOrBefore(transformParam(date), 'day') } /** * 是否在今天之后 * @param date */ export function isToDayOrAfter(date) { return dayjs(new Date()).isSameOrAfter(transformParam(date), 'day') } /** * 解析日期,返回一个date对象 * @param date * @param format * @returns {Date} */ export function parseDate(date, format = dateFormat.DATE_PATTERN_FLAT) { return dayjs(date, format).toDate() } /** * 获取指定日期所在的周一时间 * @param date * @returns {Date} */ export function getWeekMonday(date) { return dayjs(transformParam(date)).startOf('week').toDate() }