123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- const weekdays = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
- // 格式化日期为 YYYY-MM-DD
- export function formatToMonthDay(date) {
- const month = String(date.getMonth() + 1).padStart(2, '0')
- const day = String(date.getDate()).padStart(2, '0')
- return `${month}月${day}日`
- }
- /**
- * 根据传入时间获取星期几
- * @param {Date} date
- */
- export function getWeekday(date) {
- return weekdays[date.getDay()]
- }
- /**
- * 判断两个时间是否是同一天
- * @param {Object} date1
- * @param {Object} date2
- */
- export function isSameDay(date1, date2) {
- // 检查两个日期是否为同一天
- return date1.getFullYear() === date2.getFullYear() &&
- date1.getMonth() === date2.getMonth() &&
- date1.getDate() === date2.getDate()
- }
- // 格式化日期为 YYYY-MM-DD
- const formatDate = (date) => {
- const year = date.getFullYear()
- const month = String(date.getMonth() + 1).padStart(2, '0')
- const day = String(date.getDate()).padStart(2, '0')
- return `${year}-${month}-${day}`
- }
- /**
- * 根据传入时间, 获取传入时间的本周的起止日期(结束日期为昨天)
- * @param {Date} inputDate 传入的时间
- */
- export function getCurrentWeekDates(inputDate) {
- const dayOfWeek = inputDate.getDay() // 0 (周日) 到 6 (周六)
-
- // 计算到本周一的日期差
- // 如果今天是周一(1),则 diffToMonday = 0
- // 如果今天是周日(0),则 diffToMonday = 6
- const diffToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1
-
- // 获取本周一(本周的第一天)
- const monday = new Date(inputDate)
- monday.setDate(inputDate.getDate() - diffToMonday)
-
- // 获取昨天的日期
- const yesterday = new Date(inputDate)
- // yesterday.setDate(inputDate.getDate() - 1)
-
- return {
- start: formatDate(monday),
- end: formatDate(yesterday)
- }
- }
- /**
- * 根据传入时间, 获取传入时间的上一周的起止日期
- * @param {Date} inputDate 传入的时间
- */
- export function getLastWeekDates(inputDate) {
- const dayOfWeek = inputDate.getDay() // 0 (周日) 到 6 (周六)
- // 计算到上周一的日期差
- // 如果今天是周一(1),则diffToLastWeek = 1 + 7 = 8(回到上周一)
- // 如果今天是周日(0),则diffToLastWeek = 0 + 7 + 1 = 8(回到上周一)
- const diffToLastWeek = dayOfWeek === 0 ? 7 : dayOfWeek - 1 + 7
-
- // 获取上周一(上周的第一天)
- const lastMonday = new Date(inputDate)
- lastMonday.setDate(inputDate.getDate() - diffToLastWeek)
-
- // 获取上周日(上周的最后一天)
- const lastSunday = new Date(lastMonday)
- lastSunday.setDate(lastMonday.getDate() + 6)
-
- return {
- start: formatDate(lastMonday),
- end: formatDate(lastSunday)
- }
- }
- /**
- * 根据传入时间, 获取传入时间的下一周的起止日期, 结束日期不能超过今天, 如果超过今天, 则结束日期是今天
- * @param {Date} inputDate 传入的时间
- */
- export function getNextWeekDates(inputDate) {
- const dayOfWeek = inputDate.getDay() // 0 (周日) 到 6 (周六)
-
- // 计算到下周一的日期差
- // 如果今天是周一(1),则 diffToNextMonday = 7
- // 如果今天是周日(0),则 diffToNextMonday = 1
- const diffToNextMonday = dayOfWeek === 0 ? 1 : 7 - dayOfWeek + 1
-
- // 获取下周一(下一周的第一天)
- const nextMonday = new Date(inputDate)
- nextMonday.setDate(inputDate.getDate() + diffToNextMonday)
-
- // 获取下一周的结束日期(下周一加6天)
- const nextSunday = new Date(nextMonday)
- nextSunday.setDate(nextMonday.getDate() + 6)
-
- // 确保结束日期不超过今天
- const today = new Date()
- today.setHours(0, 0, 0, 0) // 设置为今天的午夜,以便比较
-
- if (nextSunday > today) {
- nextSunday.setTime(today.getTime()) // 如果超过今天,则设置为今天
- }
-
- return {
- start: formatDate(nextMonday),
- end: formatDate(nextSunday)
- }
- }
- /**
- * 根据传入时间, 获取传入时间的当月的起止日期(结束时间为当前日期)
- * @param {Date} inputDate 传入的时间
- */
- export function getMonthlyDates(inputDate) {
- // 获取传入日期所在月份的第一天
- const firstDayOfMonth = new Date(inputDate.getFullYear(), inputDate.getMonth(), 1)
-
- // 获取昨天的日期
- const yesterday = new Date(inputDate)
- // yesterday.setDate(inputDate.getDate() - 1)
-
- return {
- start: formatDate(firstDayOfMonth),
- end: formatDate(yesterday)
- }
- }
- /**
- * 根据传入时间, 获取当前时间的上月的起止日期
- * @param {Date} inputDate 传入的时间
- */
- export function getLastMonthDates(inputDate) {
- // 获取传入日期所在月份的第一天
- const firstDayOfCurrentMonth = new Date(inputDate.getFullYear(), inputDate.getMonth(), 1)
-
- // 获取上个月的最后一天
- const lastDayOfLastMonth = new Date(firstDayOfCurrentMonth - 1)
-
- // 获取上个月的第一天
- const firstDayOfLastMonth = new Date(lastDayOfLastMonth.getFullYear(), lastDayOfLastMonth.getMonth(), 1)
-
- return {
- start: formatDate(firstDayOfLastMonth),
- end: formatDate(lastDayOfLastMonth)
- }
- }
- /**
- * 根据传入时间, 获取传入时间的下一月的起止日期, 结束日期不能超过今天, 如果超过今天, 则结束日期是今天
- * @param {Date} inputDate 传入的时间
- */
- export function getNextMonthDates(inputDate) {
- // 获取下一月的第一天
- const nextMonthFirstDay = new Date(inputDate.getFullYear(), inputDate.getMonth() + 1, 1)
- // 获取下一月的最后一天
- const nextMonthLastDay = new Date(nextMonthFirstDay.getFullYear(), nextMonthFirstDay.getMonth() + 1, 0)
- // 确保结束日期不超过今天
- const today = new Date()
- today.setHours(0, 0, 0, 0) // 设置为今天的午夜,以便比较
- if (nextMonthLastDay > today) {
- nextMonthLastDay.setTime(today.getTime()) // 如果超过今天,则设置为今天
- }
- return {
- start: formatDate(nextMonthFirstDay),
- end: formatDate(nextMonthLastDay)
- }
- }
|