dayjs使用:
官网地址:Day.js中文网,可查阅文档使用更多api
自定义日期封装:
1.根据给定时间,返回年月日时分秒相应格式
// 根据给定时间,返回年月日时分秒相应格式
function formatDate(date, format = "YYYY-MM-DD") {
const pad = (num) => String(num).padStart(2, "0");
return format
.replace("YYYY", date.getFullYear())
.replace("MM", pad(date.getMonth() + 1)) // getMonth() 返回的月份是从 0 开始的
.replace("DD", pad(date.getDate()))
.replace("HH", pad(date.getHours()))
.replace("mm", pad(date.getMinutes()))
.replace("ss", pad(date.getSeconds()));
}
// 使用示例
const formattedDate = formatDate(new Date(), "YYYY/MM/DD HH:mm:ss");
2.如需要计算几天前,几天后,可传入daysOffset,daysOffset为正负值,代表前几天,后几天,传入0则代表今日
// 如需要计算几天前,几天后,可传入daysOffset
// daysOffset为正负值,代表前几天,后几天,传入0则代表今日
function formatDateDay(date, daysOffset, format = "YYYY-MM-DD") {
const pad = (num) => String(num).padStart(2, "0");
date.setDate(date.getDate() + daysOffset);
return format
.replace("YYYY", date.getFullYear())
.replace("MM", pad(date.getMonth() + 1)) // getMonth() 返回的月份是从 0 开始的
.replace("DD", pad(date.getDate()))
.replace("HH", pad(date.getHours()))
.replace("mm", pad(date.getMinutes()))
.replace("ss", pad(date.getSeconds()));
}
// 使用示例
const formattedDateDay = formatDateDay(new Date(), 1, "YYYY/MM/DD HH:mm:ss");
3. 计算当前周为这一年的第几周
function getWeekNumber(date) {
const jan1 = new Date(date.getFullYear(), 0, 1);
const dayNum = Math.floor((date - jan1) / 86400000); // 距离当年开始的毫秒数转换成天数
const week1 = Math.floor((dayNum + jan1.getDay() - 1) / 7) + 1;
return week1;
}
// 使用示例
const weekNumber = getWeekNumber(new Date());
4.格式化日期为友好的“相对时间”
// 格式化日期为友好的“相对时间”
function formatDateRelative(dateString) {
const now = new Date();
const pastDate = new Date(dateString);
const secondsPerMinute = 60;
const minutesPerHour = 60;
const hoursPerDay = 24;
const millisecondsPerSecond = 1000;
const delta = Math.abs(pastDate - now);
const seconds = Math.floor(delta / millisecondsPerSecond);
const minutes = Math.floor(seconds / secondsPerMinute);
const hours = Math.floor(minutes / minutesPerHour);
const days = Math.floor(hours / hoursPerDay);
if (seconds < 1 * secondsPerMinute) {
return seconds === 0 ? "刚刚" : `${seconds}秒前`;
}
if (seconds < 2 * secondsPerMinute) {
return "1分钟前";
}
if (minutes < 1 * minutesPerHour) {
return `${minutes}分钟前`;
}
if (hours < 1 * hoursPerDay) {
return `${hours}小时前`;
}
if (days < 1) {
return `${hours}小时前`; // 修正:如果小于一天,使用小时计算
}
return `${Math.floor(days)}天前`;
}
// 使用示例
const relativeTime = formatDateRelative("2024-05-22 16:47:00");
5. 该函数需要使用到formatDate方法(本文第一点,日期封装),计算给定时间一周内日期和星期
const nextWeekDates = function (time) {
const nextWeek = [];
// 获取给定日期是星期几
const weekdays = [
"周日",
"周一",
"周二",
"周三",
"周四",
"周五",
"周六",
];
const weekday = weekdays[time.getDay()];
// 计算这一周或上一周的日期和星期
const currentDate = new Date(time.getTime());
currentDate.setDate(currentDate.getDate() - currentDate.getDay() + 1);
if (weekday === "周日") {
currentDate.setDate(currentDate.getDate() - 7);
}
for (let i = 0; i < 7; i++) {
const date = new Date(
currentDate.getTime() + i * 24 * 60 * 60 * 1000
);
const stamp = formatDate(date, "YYYY/MM/DD");
let stampSen = null;
if (i !== 6) {
stampSen = formatDate(date, "YYYY/MM/DD") + " 00:00:00";
} else {
stampSen = formatDate(date, "YYYY/MM/DD") + " 23:59:59";
}
const month = date.getMonth() + 1;
const day = date.getDate();
const dateString = `${month}/${day}`;
const weekday = weekdays[date.getDay()];
const dayDate = date;
nextWeek.push({
stamp: stamp,
date: dateString,
weekday,
dateTime: dayDate,
stampSen: stampSen,
});
}
return nextWeek;
};
返回格式截图,可以拿到给定日期一周内的所有需要的数据
6.工作中可直接复制以下代码使用,为上面所有封装合计代码
// 根据给定时间,返回年月日时分秒相应格式
function formatDate(date, format = "YYYY-MM-DD") {
const pad = (num) => String(num).padStart(2, "0");
return format
.replace("YYYY", date.getFullYear())
.replace("MM", pad(date.getMonth() + 1)) // getMonth() 返回的月份是从 0 开始的
.replace("DD", pad(date.getDate()))
.replace("HH", pad(date.getHours()))
.replace("mm", pad(date.getMinutes()))
.replace("ss", pad(date.getSeconds()));
}
// 使用示例
const formattedDate = formatDate(new Date(), "YYYY/MM/DD HH:mm:ss");
// 如需要计算几天前,几天后,可传入daysOffset
// daysOffset为正负值,代表前几天,后几天,传入0则代表今日
function formatDateDay(date, daysOffset, format = "YYYY-MM-DD") {
const pad = (num) => String(num).padStart(2, "0");
date.setDate(date.getDate() + daysOffset);
return format
.replace("YYYY", date.getFullYear())
.replace("MM", pad(date.getMonth() + 1)) // getMonth() 返回的月份是从 0 开始的
.replace("DD", pad(date.getDate()))
.replace("HH", pad(date.getHours()))
.replace("mm", pad(date.getMinutes()))
.replace("ss", pad(date.getSeconds()));
}
// 使用示例
const formattedDateDay = formatDateDay(new Date(), 1, "YYYY/MM/DD HH:mm:ss");
// 计算当前为这一年的第几周
function getWeekNumber(date) {
const jan1 = new Date(date.getFullYear(), 0, 1);
const dayNum = Math.floor((date - jan1) / 86400000); // 距离当年开始的毫秒数转换成天数
const week1 = Math.floor((dayNum + jan1.getDay() - 1) / 7) + 1;
return week1;
}
// 使用示例
const weekNumber = getWeekNumber(new Date());
// 格式化日期为友好的“相对时间”
function formatDateRelative(dateString) {
const now = new Date();
const pastDate = new Date(dateString);
const secondsPerMinute = 60;
const minutesPerHour = 60;
const hoursPerDay = 24;
const millisecondsPerSecond = 1000;
const delta = Math.abs(pastDate - now);
const seconds = Math.floor(delta / millisecondsPerSecond);
const minutes = Math.floor(seconds / secondsPerMinute);
const hours = Math.floor(minutes / minutesPerHour);
const days = Math.floor(hours / hoursPerDay);
if (seconds < 1 * secondsPerMinute) {
return seconds === 0 ? "刚刚" : `${seconds}秒前`;
}
if (seconds < 2 * secondsPerMinute) {
return "1分钟前";
}
if (minutes < 1 * minutesPerHour) {
return `${minutes}分钟前`;
}
if (hours < 1 * hoursPerDay) {
return `${hours}小时前`;
}
if (days < 1) {
return `${hours}小时前`; // 修正:如果小于一天,使用小时计算
}
return `${Math.floor(days)}天前`;
}
// 使用示例
const relativeTime = formatDateRelative("2024-05-22 16:47:00");
// 计算给定时间一周内日期和星期,工作中常常需要传入一周数据,如周报等
// 这个方法可以拿到给定日期一周内的所有需要的数据
const nextWeekDates = function (time) {
const nextWeek = [];
// 获取给定日期是星期几
const weekdays = [
"周日",
"周一",
"周二",
"周三",
"周四",
"周五",
"周六",
];
const weekday = weekdays[time.getDay()];
// 计算这一周或上一周的日期和星期
const currentDate = new Date(time.getTime());
currentDate.setDate(currentDate.getDate() - currentDate.getDay() + 1);
if (weekday === "周日") {
currentDate.setDate(currentDate.getDate() - 7);
}
for (let i = 0; i < 7; i++) {
const date = new Date(
currentDate.getTime() + i * 24 * 60 * 60 * 1000
);
const stamp = formatDate(date, "YYYY/MM/DD");
let stampSen = null;
if (i !== 6) {
stampSen = formatDate(date, "YYYY/MM/DD") + " 00:00:00";
} else {
stampSen = formatDate(date, "YYYY/MM/DD") + " 23:59:59";
}
const month = date.getMonth() + 1;
const day = date.getDate();
const dateString = `${month}/${day}`;
const weekday = weekdays[date.getDay()];
const dayDate = date;
nextWeek.push({
stamp: stamp,
date: dateString,
weekday,
dateTime: dayDate,
stampSen: stampSen,
});
}
return nextWeek;
};