一.获取某天几个月之前/后的时间戳,
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
}