UNPKG

cuckoo-function

Version:
258 lines (242 loc) 6.69 kB
/** * 获取前一周时间点 * @param currentDate 字符串时间 * @returns {string} */ export function getPreWeek (currentDate) { let currentDateTemp = new Date(); if (currentDate) { currentDateTemp = new Date(currentDate); } let res = new Date(); res.setDate(currentDateTemp.getDate() - 6); let d = res.getDate(); let m = res.getMonth() + 1; let y = res.getFullYear(); return y + '-' + m + '-' + d; } /** * 获取后一周时间点 * @param currentDate 字符串时间 * @returns {string} */ export function getNextWeek (currentDate) { let currentDateTemp = new Date(); if (currentDate) { currentDateTemp = new Date(currentDate); } let res = new Date(); res.setDate(currentDateTemp.getDate() + 6); let d = res.getDate(); let m = res.getMonth() + 1; let y = res.getFullYear(); return y + '-' + m + '-' + d; } /** * 获取前一个月时间点 * @param currentDate 字符串时间 * @returns {string} */ export function getPreMouth (currentDate) { let currentDateTemp = new Date(); if (currentDate) { currentDateTemp = new Date(currentDate); } let res = new Date(); res.setMonth(currentDateTemp.getMonth() - 1); let y = res.getFullYear(); let m = res.getMonth() + 1; let d = res.getDate(); return y + '-' + m + '-' + d; } /** * 获取后一个月时间点 * @param currentDate 字符串时间 * @returns {string} */ export function getNextMouth (currentDate) { let arr = currentDate.split('-'); let year = arr[0]; //获取当前日期的年份 let month = arr[1]; //获取当前日期的月份 let day = arr[2]; //获取当前日期的日 let year2 = year; let month2 = parseInt(month) + 1; if (month2 === 13) { year2 = parseInt(year2) + 1; month2 = 1; } let day2 = day; let days2 = new Date(year2, month2, 0); days2 = days2.getDate(); if (day2 > days2) { day2 = days2; } if (month2 < 10) { month2 = '0' + month2; } let t2 = year2 + '-' + month2 + (day2 ? "'-' + day2" : ''); return t2; } export function getPreHalfYear(currentDate) { let currentDateTemp = new Date(); if (currentDate) { currentDateTemp = new Date(currentDate); } // 先获取当前时间 let curDate = currentDateTemp.getTime(); // 将半年的时间单位换算成毫秒 let halfYear = 365 / 2 * 24 * 3600 * 1000; let pastResult = curDate - halfYear; // 半年前的时间(毫秒单位) // 日期函数,定义起点为半年前 let pastDate = new Date(pastResult), pastYear = pastDate.getFullYear(), pastMonth = pastDate.getMonth() + 1, pastDay = pastDate.getDate(); return pastYear + '-' + pastMonth + '-' + pastDay; } /** * 获取前一年时间点 * @param currentDate 字符串时间 * @returns {string} */ export function getPreYear (currentDate) { let currentDateTemp = new Date(); if (currentDate) { currentDateTemp = new Date(currentDate); } let res = new Date(); res.setFullYear(currentDateTemp.getFullYear() - 1); // res = res.toLocaleDateString().replace(new RegExp('/', 'g'), '-'); return dateFormat('YYYY-mm-dd', res); } /** * 获取后一年时间点 * @param currentDate 字符串时间 * @returns {string} */ export function getNextYear (currentDate) { let currentDateTemp = new Date(); if (currentDate) { currentDateTemp = new Date(currentDate); } let res = new Date(); res.setFullYear(currentDateTemp.getFullYear() + 1); res = res.toLocaleDateString().replace(new RegExp('/', 'g'), '-'); return res; } /** * 获取前一个季度时间点 * @param currentDate 字符串时间 * @returns {string} */ export function getPreThreeMouth (currentDate) { let currentDateTemp = new Date(); if (currentDate) { currentDateTemp = new Date(currentDate); } let res = new Date(); res.setMonth(currentDateTemp.getMonth() - 2); let y = res.getFullYear(); let m = res.getMonth() + 1; let d = res.getDate(); return y + '-' + m + '-' + d; } /** * 获取前一天时间点 * @param currentDate 字符串时间 * @returns {string} 前一天时间点 */ export function getPreDay (currentDate) { let curDate = new Date(currentDate); return dateFormat( 'YYYY-mm-dd', new Date(curDate.getTime() - 24 * 60 * 60 * 1000) ); } /** * 获取后一天时间点 * @param currentDate 字符串时间 * @returns {string} 后一天时间点 */ export function getNextDay (currentDate) { let curDate = new Date(currentDate); return dateFormat( 'YYYY-mm-dd', new Date(curDate.getTime() + 24 * 60 * 60 * 1000) ); } /** * 格式化时间 * @param fmt {string} "YYYY-mm-dd HH:MM" 可缺省部分 * @param date {date} 时间 * @returns {*} */ export function dateFormat (fmt, date) { let ret; let opt = { 'Y+': date.getFullYear().toString(), // 年 'm+': (date.getMonth() + 1).toString(), // 月 'd+': date.getDate().toString(), // 日 'H+': date.getHours().toString(), // 时 'M+': date.getMinutes().toString(), // 分 'S+': date.getSeconds().toString() // 秒 // 有其他格式化字符需求可以继续添加,必须转化成字符串 }; for (let k in opt) { ret = new RegExp('(' + k + ')').exec(fmt); if (ret) { fmt = fmt.replace( ret[1], ret[1].length === 1 ? opt[k] : opt[k].padStart(ret[1].length, '0') ); } } return fmt; } /** * 判断是否是闰年 * @param year {number} 当前年份 * */ export function isLeapYear (year) { if ((!(year % 4) && year % 100) || !(year % 400)) return true; return false; } /** * 获取指定月份的天数 * @param year 当前年份 * @param month 当前月份 * */ export function getDaysForMonth (year, month) { let datesDate = [31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; if (month === 2 && isLeapYear(year)) return 29; return datesDate[month]; } /** * 获取开始时间到结束时间的时间段数据,返回时间字符串集合. * @param startDateStr 开始字符串时间 'YYYY-mm-dd' 或 'YYYY-mm' 或 'YYYY' * @param endDateStr 结束字符串时间 * @returns {Array} 时间字符串集合 */ export function getDateDistance (startDateStr, endDateStr) { let distance = []; let temp = ''; const len = startDateStr.length; let reCalcu = (startDateStr, endDateStr) => { if (Date.parse(startDateStr) >= Date.parse(endDateStr)) { return; } else { if (len >= 4 && len <= 5) { temp = dateFormat('YYYY', new Date(getNextYear(startDateStr))); } else if (len >= 6 && len <= 7) { temp = dateFormat('YYYY-mm', new Date(getNextMouth(startDateStr))); } else if (len >= 8 && len <= 10) { temp = dateFormat('YYYY-mm-dd', new Date(getNextDay(startDateStr))); } distance.push(temp); reCalcu(temp, endDateStr); } }; distance.push(startDateStr); reCalcu(startDateStr, endDateStr); return distance; }