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; };