js,vue,任意天几个月/几周前之前或之后的开始结束时间戳,获取某天对应周周一,判断两天是不是相同一周,对应年所有月,对应月所有周(以每月第一周开始为第一周,

387 阅读4分钟

一.获取某天几个月之前/后的时间戳,

m为number类型,正数是m月之前,0是当前月,负数是-m月之后 date为Date类型数据,为可选值,默认为当前时间 返回值为

[对应月份的1号00:00:00,对应月份月末的23:59:59]

function GetPreMonth(m: number, date?: Date): Date[] {

var preYear = 0;

var resultDate, year, month;

var currDate = date ? new Date(date.getTime()) : new Date();//获取目标日时间戳默认值是当前日

let oneDay = 24 * 3600 * 1000;

year = currDate.getFullYear();//获取目标年

month = currDate.getMonth() + 1;//获得目标月

var year2 = year;

var month2 = parseInt(month) - m;//获得目标月m月前

if (month2 <= 0) {

preYear = parseInt(m / 12);

year2 = parseInt(year2 - preYear);

month2 = 12 - (Math.abs(month2) % 12);

} else if (month2 > 12) {

preYear = parseInt(m / 12);

year2 = parseInt(year2 - preYear);

month2 = (Math.abs(month2) % 12) == 0 ? 12 : (Math.abs(month2) % 12);

}

resultDate = [new Date(Date.parse(year2 + ' ' + month2 + ' ' + 1)), new Date(Number(new Date(year2, month2, 0)) + oneDay - 1)]

return resultDate;

}

二.获取某天几个周之前/后的时间戳,

m为number类型,正数是m周之前,0是当前周,负数是-m周之后 date为Date类型数据,为可选值,默认为当前时间

返回值为 [对应周的周一00:00:00,对应周的周日的23:59:59]

function GetPreWeek(m: number, date?: Date): Date[] {

var resultDate;

let oneDay = 24 * 3600 * 1000;//一天的ms

let data = date ? new Date(date.getTime()) : new Date() //设定目标日期默认值为当前当前日期

let year = Number(data.getFullYear());//目标日当前年

let month = Number(data.getMonth()) + 1;//目标日当前月

let day = Number(data.getDate()); //目标日当天

let ed = new Date();

let st = new Date();

let begined = new Date();

let beginst = new Date();

let mydate = new Date(year, month - 1, day);//目标日凌晨00:00

let weekday = mydate.getDay() == 0 ? 7 : mydate.getDay(); //目标日是本周的第几天

ed = date ? new Date(date.getTime() - oneDay * weekday - oneDay * 7 * (m - 1)) : new Date(Date.now() - oneDay * weekday - oneDay * 7 * (m - 1))//获取目标日前m周周日的时间戳

st = new Date(ed.getTime() - oneDay * 6)//获取目标日前m周周一的时间戳

begined = new Date(Date.parse(Number(ed.getFullYear()) + ' ' + Number(ed.getMonth() + 1) + ' ' + Number(ed.getDate())) + oneDay - 1);//对应周日23:59:59

beginst = new Date(Date.parse(Number(st.getFullYear()) + ' ' + Number(st.getMonth() + 1) + ' ' + Number(st.getDate())));//对应周周一00:00:00

resultDate = [beginst, begined]

return resultDate;

}

三.获取某天对应周周一,获取两天是不是一天

function tmonday(dtm) {

let dte = new Date(dtm);

let day = dte.getDay();

let dty = dte.getDate();

if (day === 0) {

day = 7;

}

dte.setDate(dty - day + 1);

return dte.getFullYear() + '-' + dte.getMonth() + '-' + dte.getDate();

}
function iSameWeek(date1, date2) {

let dt1 = new Date();

dt1.setTime(date1);

let dt2 = new Date();

dt2.setTime(date2);

let md1 = tmonday(dt1);

let md2 = tmonday(dt2);

return md1 === md2;

  


}

四.获取某年(2022)到今天所有年,对应年所有月,对应月所有周(以每月第一周开始为第一周,每月最后一个周一,为最后一个周并补齐)

//获取本月天数

function getallmonthdate(year, month, hasadd = true) {

if (!hasadd) {

month = parseInt(month) + 1;

}

let temp = new Date(year, month, 0)

console.log(temp)

return temp.getDate()

}

//获取本月第一个周一

function getFirstMondayInMonth(year, month) {

let allmonth = getallmonthdate(year, month)

for (let i = 1; i <= month; i++) {

//生成对应的date判断是不是周一

let today = new Date(year, month - 1, i)

if (today.getDay() == 1) {

return today

}

}

}

//获取本月最后一个周一

function getLastMondayInMonth(year, month) {

let allmonth = getallmonthdate(year, month)

for (let i = allmonth; i >= 1; i--) {

//生成对应的date判断是不是周一

let today = new Date(year, month - 1, i)

if (today.getDay() == 1) {

return today

}

}

}

//补齐一周

function get4Week(date) {

return GetPreWeek(0, date)

}

function getbigernum(num) {

let bigernumobj = { 1: '一', 2: '二', 3: '三', 4: '四', 5: '五' };

return bigernumobj[num]

}

function inityeararr(date?: Date) {

let yeararr = [];

//获取当前年月日周

let oneDay = 24 * 3600 * 1000;//一天的ms

//获取前一周的周日

let preonesunday = GetPreWeek(1)[1]

let data = new Date(preonesunday.getTime())//设定截止日期

let year = Number(data.getFullYear());//目标截止年

let month = Number(data.getMonth()) + 1;//目标截止月

let day = Number(data.getDate()); //目标截止日

for (let i = 2020; i <= year; i++) {

yeararr.push({ label: i + '年', value: i, endmonth: i == year ? month : 12 })

}

return yeararr

}

console.log('year', inityeararr())

function initmontharr(year) {

let montharr = [];

//获取当前年月日周

let oneDay = 24 * 3600 * 1000;//一天的ms

//获取前一周的周日

let preonesunday = GetPreWeek(1)[1]

let enddata = new Date(preonesunday.getTime())//设定截止日期

let endyear = Number(enddata.getFullYear());//目标截止年

let endmonth = Number(enddata.getMonth()) + 1;//目标截止月

let endday = Number(enddata.getDate()); //目标截止日

if (year == endyear) {

for (let i = 1; i <= endmonth; i++) {

montharr.push({ label: i + '月', value: i, endday: endday })

  


}

} else {

for (let i = 1; i <= 12; i++) {

let allmonth = getallmonthdate(year, i)

  


montharr.push({ label: i + '月', value: i, endday: allmonth })

  


}

}

  
  


return montharr

}

console.log('month', initmontharr(2022))

  


function initweekarr(year, month) {

let weekarr = [];

//获取当前年月日周

let oneDay = 24 * 3600 * 1000;//一天的ms

//获取前一周的周日

let preonesunday = GetPreWeek(1)[1]

let enddata = new Date(preonesunday.getTime())//设定截止日期

let endyear = Number(enddata.getFullYear());//目标截止年

let endmonth = Number(enddata.getMonth()) + 1;//目标截止月

let endday = Number(enddata.getDate()); //目标截止日

let firstMondayInMonth = Number(getFirstMondayInMonth(year, month).getDate());

let lastMondayInMonth = Number(getLastMondayInMonth(year, month).getDate());

let weeknum = 1;

  


for (let i = firstMondayInMonth; i <= lastMondayInMonth; i = i + 7) {

let thisweek = GetPreWeek(0, new Date(year, month - 1, i))

weekarr.push({

value: [thisweek[0], thisweek[1]],

label: '第' + getbigernum(weeknum) + '周(' + (thisweek[0].getMonth() + 1) + '.' + thisweek[0].getDate() + '-' + (thisweek[1].getMonth() + 1) + '.' + thisweek[1].getDate() + ')',

  


})

console.log(i)

weeknum++;

}

  
  
  
  


return weekarr

}