@zhouhua5982/date-utils
Version:
日期处理工具:主要功能为获取起止日期
355 lines (327 loc) • 9.54 kB
JavaScript
const getCurrentDate = () => {
return new Date()
}
/**
* 获得本周起止时间
*/
const getCurrentWeek = () => {
//起止日期数组
let startStop = new Array()
//获取当前时间
let currentDate = getCurrentDate()
//返回date是一周中的某一天
let week = currentDate.getDay()
//返回date是一个月中的某一天
// let month = currentDate.getDate()
//一天的毫秒数
let millisecond = 1000 * 60 * 60 * 24
//减去的天数
let minusDay = week != 0 ? week - 1 : 6
//本周 周一
let monday = new Date(currentDate.getTime() - (minusDay * millisecond))
//本周 周日
let sunday = new Date(monday.getTime() + (6 * millisecond))
//添加本周时间
startStop.push(monday) //本周起始时间
//添加本周最后一天时间
startStop.push(sunday) //本周终止时间
//返回
return startStop
}
/**
* 获取本月起止时间
*/
const getCurrentMonth = () => {
//起止日期数组
let startStop = new Array()
//获取当前时间
let currentDate = getCurrentDate()
//获得当前月份0-11
let currentMonth = currentDate.getMonth()
//获得当前年份4位年
let currentYear = currentDate.getFullYear()
//求出本月第一天
let firstDay = new Date(currentYear, currentMonth, 1)
//当为12月的时候年份需要加1
//月份需要更新为0 也就是下一年的第一个月
if (currentMonth == 11) {
currentYear++
currentMonth = 0 //就为
} else {
//否则只是月份增加,以便求的下一月的第一天
currentMonth++
}
//一天的毫秒数
let millisecond = 1000 * 60 * 60 * 24
//下月的第一天
let nextMonthDayOne = new Date(currentYear, currentMonth, 1)
//求出上月的最后一天
let lastDay = new Date(nextMonthDayOne.getTime() - millisecond)
//添加至数组中返回
startStop.push(firstDay)
startStop.push(lastDay)
//返回
return startStop
}
/**
* 得到本季度开始的月份
* @param {*} month 月份(月份从0-11)
*/
const getQuarterSeasonStartMonth = (month) => {
// let quarterMonthStart = 0
let spring = 0 // 春
let summer = 3 // 夏
let fall = 6 // 秋
let winter = 9 // 冬
// 月份从0-11
if (month < 3) {
return spring
}
if (month < 6) {
return summer
}
if (month < 9) {
return fall
}
return winter
}
/**
* 获得指定月份的天数
* @param {*} year 年份
* @param {*} month 月份
*/
const getMonthDays = (year, month) => {
//本月第一天 1-31
let relativeDate = new Date(year, month, 1)
//获得当前月份0-11
let relativeMonth = relativeDate.getMonth()
//获得当前年份4位年
let relativeYear = relativeDate.getFullYear()
//当为12月的时候年份需要加1
//月份需要更新为0 也就是下一年的第一个月
if (relativeMonth == 11) {
relativeYear++
relativeMonth = 0
} else {
//否则只是月份增加,以便求的下一月的第一天
relativeMonth++
}
//一天的毫秒数
let millisecond = 1000 * 60 * 60 * 24
//下月的第一天
let nextMonthDayOne = new Date(relativeYear, relativeMonth, 1)
//返回得到上月的最后一天,也就是本月总天数
return new Date(nextMonthDayOne.getTime() - millisecond).getDate()
}
/**
* 获得本季度的起止日期
*/
const getCurrentSeason = () => {
//起止日期数组
let startStop = new Array()
//获取当前时间
let currentDate = getCurrentDate()
//获得当前月份0-11
let currentMonth = currentDate.getMonth()
//获得当前年份4位年
let currentYear = currentDate.getFullYear()
//获得本季度开始月份
let quarterSeasonStartMonth = getQuarterSeasonStartMonth(currentMonth)
//获得本季度结束月份
let quarterSeasonEndMonth = quarterSeasonStartMonth + 2
//获得本季度开始的日期
let quarterSeasonStartDate = new Date(currentYear, quarterSeasonStartMonth, 1)
//获得本季度结束的日期
let quarterSeasonEndDate = new Date(currentYear, quarterSeasonEndMonth, getMonthDays(currentYear, quarterSeasonEndMonth))
//加入数组返回
startStop.push(quarterSeasonStartDate)
startStop.push(quarterSeasonEndDate)
//返回
return startStop
}
/**
* 得到本年的起止日期
*/
const getCurrentYear = () => {
//起止日期数组
let startStop = new Array()
//获取当前时间
let currentDate = getCurrentDate()
//获得当前年份4位年
let currentYear = currentDate.getFullYear()
//本年第一天
let currentYearFirstDate = new Date(currentYear, 0, 1)
//本年最后一天
let currentYearLastDate = new Date(currentYear, 11, 31)
//添加至数组
startStop.push(currentYearFirstDate)
startStop.push(currentYearLastDate)
//返回
return startStop
}
/**
* 返回上一个月的第一天 Date 类型
* @param {*} year 年份:0表示本年
* @param {*} month 月份
*/
const getPriorMonthFirstDay = (year, month) => {
//年份为0代表,是本年的第一月,所以不能减
if (month == 0) {
month = 11 //月份为上年的最后月份
year-- //年份减1
return new Date(year, month, 1)
}
//否则,只减去月份
month--
return new Date(year, month, 1)
}
/**
* 获得上一月的起止日期
*/
const getPreviousMonth = () => {
//起止日期数组
let startStop = new Array()
//获取当前时间
let currentDate = getCurrentDate()
//获得当前月份0-11
let currentMonth = currentDate.getMonth()
//获得当前年份4位年
let currentYear = currentDate.getFullYear()
//获得上一个月的第一天
let priorMonthFirstDay = getPriorMonthFirstDay(currentYear, currentMonth)
//获得上一月的最后一天
let priorMonthLastDay = new Date(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth(), getMonthDays(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth()))
//添加至数组
startStop.push(priorMonthFirstDay)
startStop.push(priorMonthLastDay)
//返回
return startStop
}
/**
* 获得上一周的起止日期
*/
const getPreviousWeek = () => {
//起止日期数组
let startStop = new Array()
//获取当前时间
let currentDate = getCurrentDate()
//返回date是一周中的某一天
let week = currentDate.getDay()
//返回date是一个月中的某一天
let month = currentDate.getDate()
//一天的毫秒数
let millisecond = 1000 * 60 * 60 * 24
//减去的天数
let minusDay = week != 0 ? week - 1 : 6
//获得当前周的第一天
let currentWeekDayOne = new Date(currentDate.getTime() - (millisecond * minusDay))
//上周最后一天即本周开始的前一天
let priorWeekLastDay = new Date(currentWeekDayOne.getTime() - millisecond)
//上周的第一天
let priorWeekFirstDay = new Date(priorWeekLastDay.getTime() - (millisecond * 6))
//添加至数组
startStop.push(priorWeekFirstDay)
startStop.push(priorWeekLastDay)
return startStop
}
/**
* 获取指定月份所在的季度
* @param {*} month
*/
const getSeasonByMonth = (month) => {
let season = 0
if (month >= 0 && month < 3) {
season = 9; // 冬
} else if (month >= 3 && month < 6) {
season = 0; // 春
} else if (month >= 6 && month < 9) {
season = 3; // 夏
} else if (month >= 9 && month < 12) {
season = 6; // 秋
}
return season
}
/**
* 得到上季度的第一天的 Date 类型
* @param {*} year 当前季度的年份
* @param {*} month 当前季度的开始月份
*/
const getPriorSeasonFirstDay = (year, month) => {
const season = getSeasonByMonth(month)
let spring = 0 //春
let summer = 3 //夏
let fall = 6 //秋
let winter = 9 //冬
//月份从0-11
switch (season) { //季度的真实月份
case spring:
//如果是第一季度则应该到去年的冬季
year--
month = winter
break
case summer:
month = spring
break
case fall:
month = summer
break
case winter:
month = fall
break
}
return new Date(year, month, 1)
}
/**
* 得到上季度的起止日期
*/
const getPreviousSeason = () => {
//起止日期数组
let startStop = new Array()
//获取当前时间
let currentDate = getCurrentDate()
//获得当前月份0-11
let currentMonth = currentDate.getMonth() + 1
//获得当前年份4位年
let currentYear = currentDate.getFullYear()
//上季度的第一天
let priorSeasonFirstDay = getPriorSeasonFirstDay(currentYear, currentMonth)
//上季度的最后一天
let priorSeasonLastDay = new Date(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2, getMonthDays(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2))
//添加至数组
startStop.push(priorSeasonFirstDay)
startStop.push(priorSeasonLastDay)
return startStop
}
/**
* 得到去年的起止日期
*/
const getPreviousYear = () => {
//起止日期数组
let startStop = new Array()
//获取当前时间
let currentDate = getCurrentDate()
//获得当前年份4位年
let currentYear = currentDate.getFullYear()
currentYear--
let priorYearFirstDay = new Date(currentYear, 0, 1)
let priorYearLastDay = new Date(currentYear, 11, 1)
//添加至数组
startStop.push(priorYearFirstDay)
startStop.push(priorYearLastDay)
return startStop
}
export {
getCurrentDate,
getCurrentWeek,
getCurrentMonth,
getQuarterSeasonStartMonth,
getMonthDays,
getCurrentSeason,
getCurrentYear,
getPriorMonthFirstDay,
getPreviousMonth,
getPreviousWeek,
getPriorSeasonFirstDay,
getPreviousSeason,
getPreviousYear
}