js日期转化指定格式,获取月/周日期区间
该篇文章主要用于收录js对date类型的处理,包括但不限于转化指定格式、获取各种月/周的日期区间等等
获取一年中第一个星期一
function getfirstmondayofyear(year) {
let date = new date(year, 0, 1) // 1月1日
while (date.getday() !== 1) { // 找到第一个星期一
date.setdate(date.getdate() + 1)
}
return date
}获取一年中最后一个星期一
function getlastmondayofyear(year) {
let date = new date(year, 11, 31) // 12月31日
while (date.getday() !== 1) { // 找到第一个星期一
date.setdate(date.getdate() - 1)
}
return date
}获取当天所在周的周一与周日对应的日期区间
function getcurrentweekrange(today) {
let dayofweek = today.getday()
let startofweek = new date(today)
startofweek.setdate(today.getdate() - (dayofweek === 0 ? 6 : dayofweek - 1))
let endofweek = new date(today)
endofweek.setdate(startofweek.getdate() + 6)
return [startofweek, endofweek]
}获取当天所在月的月初与月末对应的日期区间
function getcurrentmonthrange(today) {
let firstdayofmonth = new date(today.getfullyear(), today.getmonth(), 1)
let lastdayofmonth = new date(today.getfullyear(), today.getmonth() + 1, 0)
return [firstdayofmonth, lastdayofmonth]
}获取一年中的周数
function getweeksinyear(year) {
let firstmonday = getfirstmondayofyear(year)
let lastmonday = getlastmondayofyear(year)
let weeks = math.floor((lastmonday - firstmonday) / 86400000 / 7) + 1 // 计算周数
return weeks
}获取某年某周的日期区间
function getweekrange(year, weeknumber) {
let firstmonday = getfirstmondayofyear(year)
let start = new date(firstmonday)
start.setdate(start.getdate() + 7 * (weeknumber - 1))
let end = new date(start)
end.setdate(end.getdate() + 6)
return [start, end]
}转换日期类型为指定格式
/**
* @description: 转换日期类型为指定格式
* @param date: string | date, 日期(string需支持转换date)
* @param format: string, 格式示例(以一年中的一月一日作为示例)
* @return string(目前支持年月日/年月/月日)
**/
function getformatdate(date, format) {
const currentdate = new date(date)
let formatdate = ''
let isyear = true // 示例是否包含年份
let formatarray = [] // 拆解示例文本中的各部分
let part = ''
for(let i of format) {
if(!isnan(i)) part += i
else {
formatarray.push(part)
formatarray.push(i)
part = ''
}
}
if(part) formatarray.push(part)
formatarray.foreach((item, index) => {
let parttext = ''
// 第一个数字可能为年份或者月份
if(index === 0) {
if(item.length > 2) parttext = currentdate.getfullyear()
if(item.length === 2) {
parttext = (currentdate.getmonth() + 1).tostring().padstart(2, '0')
isyear = false
}
if(item.length < 2) {
parttext = currentdate.getmonth() + 1
isyear = false
}
}
// 第二个数字可能为月份或天数
else if(index === 2) {
if(item.length === 2 && isyear) parttext = (currentdate.getmonth() + 1).tostring().padstart(2, '0')
if(item.length < 2 && isyear) parttext = currentdate.getmonth() + 1
if(item.length === 2 && !isyear) parttext = currentdate.getdate().tostring().padstart(2, '0')
if(item.length < 2 && !isyear) parttext = currentdate.getdate()
}
// 第三个数字为天数
else if(index === 4) {
if(item.length === 2) parttext = currentdate.getdate().tostring().padstart(2, '0')
if(item.length < 2) parttext = currentdate.getdate()
}
else parttext = item
formatdate += parttext
})
return formatdate
}获取某一年中每一周的日期区间的数组集合
/**
* @description: 获取某一年中每一周的日期区间的数组集合
* @param year: number, 年份
* @return array
**/
function getweeks(year) {
let weeksinyear = getweeksinyear(year) // 计算一年中的周数
let data = []
while(weeksinyear !== 0) {
let weekrange = getweekrange(year, weeksinyear)
let start = getformatdate(weekrange.start, '01-01')
let end = getformatdate(weekrange.end, '01-01')
let string = start + '~' + end + '(第' + weeksinyear + '周)'
weeksinyear--
data.unshift(string)
}
return data
}判断日期是否为未来的日期
function isfuturedate(date) {
let today = new date()
let nowtime = today.gettime()
let datetime = date.gettime()
return datetime > nowtime
}到此这篇关于js日期转化指定格式,获取月/周日期区间的文章就介绍到这了,更多相关js日期转化指定格式内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论