cuckoo-function
Version:
258 lines (242 loc) • 6.69 kB
JavaScript
/**
* 获取前一周时间点
* @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;
}