export default (() => { const getDateObj = ms => { const now = ms ? new Date(ms) : new Date() const y = now.getFullYear() let m = now.getMonth() + 1 m = m > 9 ? m : '0' + m let d = now.getDate() d = d > 9 ? d : '0' + d return { y, m, d } } // 获取当前日期 const getCurrentDate = ms => { const dateObj = getDateObj(ms) return '' + dateObj.y + '-' + dateObj.m + '-' + dateObj.d } //获取当前 前后N天的时间 const getDateStr = (AddDayCount = 0) => { let dd = new Date() dd.setDate(dd.getDate() + AddDayCount) let y = dd.getFullYear() let m = (dd.getMonth() + 1) < 10 ? '0' + (dd.getMonth() + 1) : (dd.getMonth() + 1) //获取当前月份的日期,不足10补0 let d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() //获取当前几号,不足10补0 return y + '-' + m + '-' + d } //获取某个日期 前后N天的时间 const getDateDay2 = (time, AddDayCount) => { if (time) { let dd = new Date(time) dd.setDate(dd.getDate() + AddDayCount) let y = dd.getFullYear() let m = (dd.getMonth() + 1) < 10 ? '0' + (dd.getMonth() + 1) : (dd.getMonth() + 1) //获取当前月份的日期,不足10补0 let d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() //获取当前几号,不足10补0 return y + '-' + m + '-' + d } else { return '--' } } //获取当前年份 const getCurrentYear = ms => { const dateObj = getDateObj(ms) return '' + dateObj.y } // 获取当前月份 const getCurrentMonth = ms => { const dateObj = getDateObj(ms) return '' + dateObj.y + '-' + dateObj.m } // 获取上月月份 const getPreviousMonth = ms => { const dateObj = getDateObj(ms) const b = dateObj.m - 1 > 0 let y = b ? dateObj.y : dateObj.y - 1 let m = b ? dateObj.m - 1 : 12 m = m > 9 ? m : '0' + m return '' + y + '-' + m } // 获取下月月份 const getNextMonth = ms => { const dateObj = getDateObj(ms) const b = dateObj.m - (-1) != 13; let y = b ? dateObj.y : dateObj.y + 1 let m = b ? dateObj.m - (-1) : 1 m = m > 9 ? m : '0' + m return '' + y + '-' + m } // 格式化时间 ==> yyyy-mm-dd const formatDate = (value, str) => { if (value) { let date_arr = value.split(str) let m = date_arr[1].length == 1 && date_arr[1] < 10 ? '0' + date_arr[1] : date_arr[1] let d = date_arr[2].length == 1 && date_arr[2] < 10 ? '0' + date_arr[2] : date_arr[2] return date_arr[0] + '-' + m + '-' + d } else { return '--' } } const getK = value => { if (value) { let date = new Date(value) return date } else { let v = new Date().getTime() return v } } //转为时间戳 const formatTime = value => { if (value) { let date = new Date(value) return date.getTime() } } const formatDate2 = (time, format = 'YY-MM-DD hh:mm:ss') => { if (time) { let date = time ? new Date(time) : new Date() let year = date.getFullYear(), month = date.getMonth() + 1, //月份是从0开始的 day = date.getDate(), hour = date.getHours(), min = date.getMinutes(), sec = date.getSeconds() let preArr = Array.apply(null, Array(10)).map(function (elem, index) { return '0' + index }) //开个长度为10的数组 格式为 00 01 02 03 let newTime = format .replace(/YY/g, year) .replace(/MM/g, preArr[month] || month) .replace(/DD/g, preArr[day] || day) .replace(/hh/g, preArr[hour] || hour) .replace(/mm/g, preArr[min] || min) .replace(/ss/g, preArr[sec] || sec) return newTime } else { return '--' } } const getLastDay = dateStr => { dateStr = dateStr || getCurrentMonth() let nextMonthMS = new Date(getNextMonth(new Date(dateStr).getTime())).getTime() return getCurrentDate(new Date(nextMonthMS - 1000 * 60 * 60 * 24).getTime()) } // 对比时间 const compareTime = (date1, date2) => { let d1_date1 = new Date(date1), d1_date2 = new Date(date2); let time_span1 = d1_date1.getTime(), time_span2 = d1_date2.getTime(); return time_span1 - time_span2; } //格式yy-mm month1小的 month2大的 const intervalMonth = (month1, month2) => { let yearMonth, number; let year1 = Number(getCurrentYear(month1)); let year2 = Number(getCurrentYear(month2)); if (year1 != year2) { yearMonth = (year2 - year1) * 12; } else { yearMonth = 0; } let min = Number(month1.split('-')[1]); let max = Number(month2.split('-')[1]); if (min < max) { number = max - min + yearMonth + 1 } else { number = yearMonth - (min - max) + 1 } return Number(number); } //获取季度的时间 val 例如 yyyy,1 最终结果 yyyy-mm-dd,yyyy-mm-dd const qurterDay = (val) => { let value; let num = val.split(',')[1] if (num == 1) { value = val.split(',')[0] + '-01-01,' + val.split(',')[0] + '-03-31' } else if (num == 2) { value = val.split(',')[0] + '-04-30,' + val.split(',')[0] + '-06-30' } else if (num == 3) { value = val.split(',')[0] + '-07-31,' + val.split(',')[0] + '-09-30' } else if (num == 4) { value = val.split(',')[0] + '-10-30,' + val.split(',')[0] + '-12-31' } return [value, num]; } //获取某月最后一天 const getMonthLastDay = (dateStr) => { let dateObj = getNextMonth(dateStr) let date = getDateDay2(dateObj + '-01', -1) return date } /*获取当前日期*/ const getWeekdayTime = (value) => { let d = new Date(value) let week = d.getDay() let weekday = '' if (week == 0) weekday = '星期日' else if (week == 1) weekday = '星期一' else if (week == 2) weekday = '星期二' else if (week == 3) weekday = '星期三' else if (week == 4) weekday = '星期四' else if (week == 5) weekday = '星期五' else if (week == 6) weekday = '星期六' return weekday } //计算当前时间到今天结束时还剩多少 毫秒 const getRestOfDayTime = () => { let x = new Date(); x.setHours(0, 0, 0, 0); let y = new Date(); return 24 * 3600 * 1000 - (y.getTime() - x.getTime()) } /* 用于月日这种需要加前置0的方法 * @param num 需要加0的参数 string | number * @return 结果 始终保证结果为字符串 string */ const paddingZero = (num) => { return num < 10 ? "0" + num : String(num) } return { paddingZero, getDateObj, getCurrentDate, getDateStr, getDateDay2, getCurrentYear, getCurrentMonth, getPreviousMonth, getNextMonth, formatDate, formatDate2, formatTime, getK, compareTime, getLastDay, intervalMonth, getMonthLastDay, qurterDay, getWeekdayTime, getRestOfDayTime } })()