获取当月有几周 以及日期
参考链接:https://www.jianshu.com/p/f06a9252de88
// 时间格式yyyy-MM-dd HH:mm:ss
dateTimeFormatter(date: Date): string {
if (!date) return '';
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const strDate = date.getDate().toString().padStart(2, '0');
return `${date.getFullYear()}-${month}-${strDate} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`;
}
// 时间格式yyyy-MM-dd
dateFormatter(date: Date): string {
if (!date) return '';
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const strDate = date.getDate().toString().padStart(2, '0');
return `${date.getFullYear()}-${month}-${strDate}`;
}
// 时间格式yyyyMMdd
dateFormatter2(date: Date): string {
if (!date) return '';
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const strDate = date.getDate().toString().padStart(2, '0');
return `${date.getFullYear()}${month}${strDate}`;
}
// 时间格式yyyy-MM
dateFormatterMonth(date: Date): string {
if (!date) return '';
const month = (date.getMonth() + 1).toString().padStart(2, '0');
return `${date.getFullYear()}-${month}`;
}
// 时间格式yyyyMM
dateFormatterMonth2(date: Date): string {
if (!date) return '';
const month = (date.getMonth() + 1).toString().padStart(2, '0');
return `${date.getFullYear()}${month}`;
}
// 时间格式 HH:mm
timeFormatter(date: Date | null): string {
if (!date) return '00:00';
return `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`;
}
// 时间格式 HH:mm
timeNumberFormatter(date: Date | null): number {
if (!date) return 0;
return Number(`${date.getHours().toString().padStart(2, '0')}${date.getMinutes().toString().padStart(2, '0')}`);
}
// 日期 string转Date
changeStrToDate(dateStr: string): Date {
let str = dateStr.split(':');
const date = new Date();
return new Date(date.getFullYear(), date.getMonth() + 1, date.getDate(), Number(str[0]), Number(str[1]), 0);
}
// 返回星期一和星期日
getWeekRange(yearNo: number, weekNo: number): any {
let firstDayofYear = new Date(yearNo, 0, 1);
if (firstDayofYear.getDay() > 4) {
let weekStart = new Date(yearNo, 0, 1 + (weekNo - 1) * 7 - firstDayofYear.getDay() + 8);
let weekEnd = new Date(yearNo, 0, 1 + (weekNo - 1) * 7 - firstDayofYear.getDay() + 8 + 6);
return { startDay: weekStart, endDay: weekEnd };
}
else {
let weekStart = new Date(yearNo, 0, 1 + (weekNo - 1) * 7 - firstDayofYear.getDay() + 1);
let weekEnd = new Date(yearNo, 0, 1 + (weekNo - 1) * 7 - firstDayofYear.getDay() + 1 + 6);
return { startDay: weekStart, endDay: weekEnd };
}
}
// 获取当月有几周 以及日期
getWeekData(year: number, month: number) {
//传入 年 月 获取当月有几周 以及日期
let new_year = year; //取当前的年份
let new_month = month + 1;// 取下一个月的第一天,方便计算(最后一天不固定)
// if(new_month < 10){
// new_month = '0' + new_month;
// }
const weekDay = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"];
if (new_month > 12) {
new_month -= 12; //月份减
new_year++; //年份增
}
const first_date = new Date(new_year, new_month, 1); //取当年当月中的第一天-时间格式
const last_Data = (new Date(first_date.getTime() - 1000 * 60 * 60 * 24)).getDate() //获取当月最后一天日期
//当月第一天是周几
const firstzhouji = new Date(new_year + '/' + new_month + '/' + 1).getDay() == 0 ? '星期天' : weekDay[new Date(new_year + '/' + new_month + '/' + 1).getDay() - 1];
//当月最后一天是周几
const lastzhouji = new Date(new_year + '/' + new_month + '/' + last_Data).getDay() == 0 ? '星期天' : weekDay[new Date(new_year + '/' + new_month + '/' + last_Data).getDay() - 1];
let firsttime = 0; //第一周有几天
if (firstzhouji == '星期一') { firsttime = 7; }
if (firstzhouji == '星期二') { firsttime = 6; }
if (firstzhouji == '星期三') { firsttime = 5; }
if (firstzhouji == '星期四') { firsttime = 4; }
if (firstzhouji == '星期五') { firsttime = 3; }
if (firstzhouji == '星期六') { firsttime = 2; }
if (firstzhouji == '星期天') { firsttime = 1; }
let lasttime = 0; //最后一周有几天
if (lastzhouji == '星期一') { lasttime = 1; }
if (lastzhouji == '星期二') { lasttime = 2; }
if (lastzhouji == '星期三') { lasttime = 3; }
if (lastzhouji == '星期四') { lasttime = 4; }
if (lastzhouji == '星期五') { lasttime = 5; }
if (lastzhouji == '星期六') { lasttime = 6; }
if (lastzhouji == '星期天') { lasttime = 7; }
// 前后两周 加上 剩余周数 得出总周数
const contime = 2 + (last_Data - lasttime - firsttime) / 7;
//得出每周对应的日期
const weekArray = [];
for (let i = 1; i <= contime; i++) {
let strTime = '';
let lastTime = '';
if (i == 1) {
strTime = year + '-' + new_month.toString().padStart(2, '0') + '-' + '01';
const aa = (1 + firsttime - 1).toString().padStart(2, '0');
lastTime = year + '-' + new_month.toString().padStart(2, '0') + '-' + aa;
} else if (i == contime) {
const bb = (last_Data - lasttime + 1).toString().padStart(2, '0');
strTime = year + '-' + new_month.toString().padStart(2, '0') + '-' + bb;
// lastTime = year + '-' + new_month + '-' + (last_Data<10 ? ('0'+last_Data) : last_Data );
lastTime = year + '-' + new_month.toString().padStart(2, '0') + '-' + (last_Data.toString().padStart(2, '0'));
} else {
strTime = this.addDate(weekArray[weekArray.length - 1].endTime, 1);
lastTime = this.addDate(weekArray[weekArray.length - 1].endTime, 7);
}
weekArray.push({
weeknum: i,
beginTime: strTime,
endTime: lastTime,
});
}
return weekArray;
}
//日期增加 接受两个参数, 传入的时间,传入时间增加的天数
addDate(dates: any, days: any) {
if (days == undefined || days == '') {
days = 1;
}
const date = new Date(dates);
date.setDate(date.getDate() + days);
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
return date.getFullYear() + '-' + month + '-' + day;
}
// 获取某个有起止时间
getDateRange(year: number, month: number) {
const myDate1 = new Date(year, month, 1);
const myDate2 = new Date(year, month + 1, 0);
const month1 = myDate1.getMonth().toString().padStart(2, '0');
const strDate1 = myDate1.getDate().toString().padStart(2, '0');
const month2 = myDate2.getMonth().toString().padStart(2, '0');
const strDate2 = myDate2.getDate().toString().padStart(2, '0');
return {beginTime: myDate1.getFullYear() + '-' + month1 + '-' + strDate1, endTime: myDate2.getFullYear() + '-' + month2 + '-' + strDate2};
// return {beginTime: myDate1, endTime: myDate2};
}
// 两个日期直接月份
getMonths(startDate: string, endDate: string){
let startDateStr = startDate.split('-');
let endDateStr = endDate.split('-');
const y2 = parseInt(endDateStr[0]);
let y1 = parseInt(startDateStr[0]);
const m2 = parseInt(endDateStr[1]);
let m1 = parseInt(startDateStr[1]);
let count = ( y2 - y1 ) * 12 + m2 - m1;
const field = [];
for (let i = 0 ;count >= 0;){
if (m1 <= 12) {
// m1 = m1.toString().padStart(2, '0')
let temp = y1 + '-' + m1.toString().padStart(2, '0');
field.push(temp);
++m1;
count --;
++i;
} else {
m1 -= 12;
y1++;
}
}
}
浙公网安备 33010602011771号