cellsysArt/utils/date.js

174 lines
4.2 KiB
JavaScript
Raw Permalink Normal View History

2024-12-26 10:28:43 +08:00
/**
* @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();
}
/*毫秒时间戳转换为 “xxxx年xx月xx日” 格式的代码:*/
export function formatMillisecondsToChineseDateString(milliseconds) {
// 创建一个新的Date对象使用传入的毫秒时间戳
const date = new Date(milliseconds);
// 获取年、月、日
const year = date.getFullYear();
const month = date.getMonth() + 1; // getMonth() 返回的月份是从0开始的所以需要加1
const day = date.getDate();
// 返回格式化的日期字符串
return `${year}${month}${day}`;
}