@jrj-front-end/tools
Version:
jrj前端工具包
171 lines (166 loc) • 6.22 kB
text/typescript
import moment from 'moment';
/**
* 获取日期所在年份、月份、季度、星期的第一天和最后一天
* @param dimension 维度 ----- 年份year、月份month、季度quarter、星期week、天day
* @param showDetail 如果为true,返回的格式为YYYY-MM-DD HH:mm:ss,如果为false,返回的格式为YYYY-MM-DD,默认为false
* @param date 日期,默认为当前日期,格式为YYYY-MM-DD,如2023-01-01
*/
export const GetBeginAndEndDate = (dimension: "year" | "month" | "quarter" | "week" | "day", showDetail = false, date = moment(new Date()).format("YYYY-MM-DD")) => {
let formatStr = showDetail ? "YYYY-MM-DD HH:mm:ss" : "YYYY-MM-DD"
let startTime = moment(date).startOf(dimension).format(formatStr);
let endTime = moment(date).endOf(dimension).format(formatStr);
return {
startTime,
endTime
}
}
/**
* 日期推算算法
*
* @param type 需要获取的时间范围
* @returns 返回的是 [年月日,年月日] // moment格式
*/
export const GetDataReckon = (type: '本日' | '上日' | '上周' | '上月' | '上季度' | '上年' | '近一周' | '近一月' | '近一年') => {
console.log('type', type);
let myData: any[] = [], year = moment().year(), month = moment().month(), quarter = moment().quarter(), firstDay = 0, lastDay = 0;
// 时间获取思路一周:按照国外计算方法,获取上周一及本周日时间,即为上周时间
// moment().year() 获取当前年 返回值number
// moment().month() 获取月 返回值number 范围为 0-11
// 本日
if (type === '本日') {
let todayDay = moment((moment().unix()) * 1000).format('YYYY-MM-DD');
myData = [
moment(todayDay, 'YYYY-MM-DD'),
moment(todayDay, 'YYYY-MM-DD')
];
}
// 上日
if (type === '上日') {
let lastDay_1 = moment((moment().unix() - 24 * 60 * 60) * 1000).format('YYYY-MM-DD');
myData = [
moment(lastDay_1, 'YYYY-MM-DD'),
moment(lastDay_1, 'YYYY-MM-DD')
];
}
// 上周
else if (type === '上周') {
myData = [
moment(moment().day(-6).format('YYYY-MM-DD'), 'YYYY-MM-DD'),
moment(moment().day(0).format('YYYY-MM-DD'), 'YYYY-MM-DD')
];
}
// 上月
else if (type === '上月') {
// // console.log("firstDay, lastDay:", firstDay, lastDay);
// month = 2;
switch (month) {
case 0:
year -= 1;
month = 12;
firstDay = 1;
lastDay = 31;
myData = [
moment(year + "-" + month + "-0" + firstDay, 'YYYY-MM-DD'),
moment(year + "-" + month + "-" + lastDay, 'YYYY-MM-DD')
];
break;
case 11:
firstDay = 1;
lastDay = 30;
myData = [
moment(year + "-" + month + "-0" + firstDay, 'YYYY-MM-DD'),
moment(year + "-" + month + "-" + lastDay, 'YYYY-MM-DD')
];
break;
case 10:
firstDay = 1;
lastDay = moment(year + "-" + month, "YYYY-MM").daysInMonth(); //获取当前月份总天数
myData = [
moment(year + "-" + month + "-0" + firstDay, 'YYYY-MM-DD'),
moment(year + "-" + month + "-" + lastDay, 'YYYY-MM-DD')
];
break;
default:
firstDay = 1;
lastDay = moment(year + "-0" + month, "YYYY-MM").daysInMonth(); //获取当前月份总天数
myData = [
moment(year + "-0" + month + "-0" + firstDay, 'YYYY-MM-DD'),
moment(year + "-0" + month + "-" + lastDay, 'YYYY-MM-DD')
];
break;
}
}
// 上季度
else if (type === '上季度') {
switch (quarter) {
case 1:
year -= 1;
firstDay = 1;
lastDay = moment(year + "-12", "YYYY-MM").daysInMonth();
myData = [
moment(year + "-09-0" + firstDay, 'YYYY-MM-DD'),
moment(year + "-12-" + lastDay, 'YYYY-MM-DD')
];
break;
case 2:
firstDay = 1;
lastDay = moment(year + "-03", "YYYY-MM").daysInMonth();
myData = [
moment(year + "-01-0" + firstDay, 'YYYY-MM-DD'),
moment(year + "-03-" + lastDay, 'YYYY-MM-DD')
];
break;
case 3:
firstDay = 1;
lastDay = moment(year + "-06", "YYYY-MM").daysInMonth();
myData = [
moment(year + "-04-0" + firstDay, 'YYYY-MM-DD'),
moment(year + "-06-" + lastDay, 'YYYY-MM-DD')
];
break;
case 4:
firstDay = 1;
lastDay = moment(year + "-09", "YYYY-MM").daysInMonth();
myData = [
moment(year + "-07-0" + firstDay, 'YYYY-MM-DD'),
moment(year + "-09-" + lastDay, 'YYYY-MM-DD')
];
break;
}
}
else if (type === '上年') {
myData = [
moment(moment().year() - 1 + "-01-01", 'YYYY-MM-DD'),
moment(moment().year() - 1 + "-12-31", 'YYYY-MM-DD')
];
}
else if (type === '本日') {
let today = moment((moment().unix()) * 1000).format('YYYY-MM-DD');
let lastDay_2 = moment((moment().unix()) * 1000).format('YYYY-MM-DD');
myData = [
moment(today, 'YYYY-MM-DD'),
moment(lastDay_2, 'YYYY-MM-DD')
];
}
else if (type === '近一周') {
// // console.log('当天时间:', moment((moment().unix()) * 1000).format('YYYY-MM-DD'));
myData = [
moment(moment((moment().unix() - 7 * 24 * 60 * 60) * 1000).format('YYYY-MM-DD'), 'YYYY-MM-DD'),
moment(moment((moment().unix()) * 1000).format('YYYY-MM-DD'), 'YYYY-MM-DD'),
];
}
else if (type === '近一月') {
myData = [
moment(moment((moment().unix() - 30 * 24 * 60 * 60) * 1000).format('YYYY-MM-DD'), 'YYYY-MM-DD'),
moment(moment((moment().unix()) * 1000).format('YYYY-MM-DD'), 'YYYY-MM-DD'),
];
}
else if (type === '近一年') {
myData = [
moment(moment((moment().unix() - 365 * 24 * 60 * 60) * 1000).format('YYYY-MM-DD'), 'YYYY-MM-DD'),
moment(moment((moment().unix()) * 1000).format('YYYY-MM-DD'), 'YYYY-MM-DD'),
];
}
// // console.log("字符串时间:", moment(myData[0]).format('YYYY MM DD'));
return myData;
};