js封装 |时间对象相关方法
获取某年某月天数
//@params {String|Number} year 年份
//@params {String|Number} month 月份
function getDays(year,month){
let dayList=[31,'',31,30,31,30,31,31,30,31,30,31]
let February=(year%4==0&&year%100!==0||year%400==0)?29:28
dayList.splice(1,1,February)
return dayList[month-1]
}
//示例
getDays(2020,2)
判断某日是周几
- 种类一:传年,月,日
//@params {String|Number} year 年份
//@params {String|Number} month 月份
//@params {String|Number} day 日
//@params {String} type 形式 如"星期"(默认)或"周"
function getWeek(year,month,day,type="星期"){
let week=new Date(year,month-1,day).getDay()//判断周几
let chineseArr=['日','一','二','三','四','五','六']
return type+chineseArr[week]
}
//示例
getWeek(2021,2,9)
- 种类二:传字符串
//@params {String} date 日期 格式:"YYYY-MM-DD"
//@params {String} type 形式 如"星期"(默认)或"周"
function getWeek(date,type="星期"){
date.split('-').map(item=>Number(item))
let week=new Date(date[0],date[1]-1,date[2]).getDay()//判断周几
let chineseArr=['日','一','二','三','四','五','六']
return type+chineseArr[week]
}
//示例
getWeek('2021-2-9')
- 种类三:获取当天
//@params {String} type 形式 如"星期"(默认)或"周"
function getWeek(type="星期"){
let week=new Date().getDay()
let chineseArr=['日','一','二','三','四','五','六']
return type+chineseArr[week]
}
//示例
getWeek()
比较两者日期
//@params {String} date1 第一个日期 格式:"YYYY-MM-DD"
//@params {String} date2 第二个日期 格式:"YYYY-MM-DD"
//@params {String} type 比较类别:before|前者早于后者 same|前者与后者一致 after|前者晚于后者
//@params {String} detail 比较精度:day|精确于日(默认) month|精确于月 year|精确于年
function compareDate(date1,date2,type,detail="day"){
let D1=date1.split('-').map(item=>Number(item))
let D2=date2.split('-').map(item=>Number(item))
//前者早于后者
if(type=='before'){
//精确于年
if(detail=="year"&&D1[0]<D2[0]){return true}
//精确于月
if(detail=="month"){
if(D1[0]<D2[0]){
return true
}else if(D1[0]==D2[0]&&D1[1]<D2[1]){
return true
}
}
//精确于日
if(detail=="day"){
if(D1[0]<D2[0]){
return true
}else if(D1[0]==D2[0]&&D1[1]<D2[1]){
return true
}else if(D1[0]==D2[0]&&D1[1]==D2[1]&&D1[2]<D2[2]){
return true
}
}
return false
}
//前者等于后者
if(type=='same'){
//精确于年
if(detail=="year"&&D1[0]==D2[0]){return true}
//精确于月
if(detail=="month"&&D1[0]==D2[0]&&D1[1]==D2[1]){return true}
//精确于日
if(detail=="day"&&D1[0]==D2[0]&&D1[1]==D2[1]&&D1[2]==D2[2]){return true}
return false
}
//前者晚于后者
if(type=='after'){
//精确于年
if(detail=="year"&&D1[0]>D2[0]){return true}
//精确于月
if(detail=="month"){
if(D1[0]>D2[0]){
return true
}else if(D1[0]==D2[0]&&D1[1]>D2[1]){
return true
}
}
//精确于日
if(detail=="day"){
if(D1[0]>D2[0]){
return true
}else if(D1[0]==D2[0]&&D1[1]>D2[1]){
return true
}else if(D1[0]==D2[0]&&D1[1]==D2[1]&&D1[2]>D2[2]){
return true
}
}
return false
}
}
示例
compareDate('2021-01-01','2023-03-03','after')
判断日期范围
//@params {String} left 上界 格式:"YYYY-MM-DD"
//@params {String} date 需要比较的日期 格式:"YYYY-MM-DD"
//@params {String} right 下界 格式:"YYYY-MM-DD"
//@params {Boolean} isInclude 是否包括本身 true|包括(默认) false|不包括
//@params {String} type 比较类型 year|年 month|月 day|日(默认)
function between(left,date,right,isInclude=true,type='day'){
left=left.split('-').map(item=>Number(item))
right=right.split('-').map(item=>Number(item))
date=date.split('-').map(item=>Number(item))
if(isInclude){
if(left[0]<=date[0]&&date[0]<=right[0]){
if(type=='year'){return true}
if(left[1]<=date[1]&&date[1]<=right[1]){
if(type=='month'){return true}
if(left[2]<=date[2]&&date[2]<=right[2]){
if(type=='day'){return true}
}
}
}
return false
}else{
if(type=='year'){
return left[0]<date[0]&&date[0]<right[0]
}
if(type=='month'){
//首先判断年份
if(left[0]<=date[0]&&date[0]<=right[0]){
return left[1]<date[1]&&date[1]<right[1]
}
}
if(type=='day'){
if(left[0]<=date[0]&&date[0]<=right[0]){
if(left[1]<=date[1]&&date[1]<=right[1]){
return left[2]<date[2]&&date[2]<right[2]
}
}
}
return false
}
}
示例:
between('2023-1-1','2023-2-2','2023-3-1',false,'month')