/** * 日期格式化 * @param {Object} time * @param {Object} pattern */ export function parseTime(time, pattern) { if (arguments.length === 0 || !time) { return null } const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' let date if (typeof time === 'object') { date = time } else { if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { time = parseInt(time) } else if (typeof time === 'string') { time = time.replace(new RegExp(/-/gm), '/'); } if ((typeof time === 'number') && (time.toString().length === 10)) { time = time * 1000 } date = new Date(time) } const formatObj = { y: date.getFullYear(), m: date.getMonth() + 1, d: date.getDate(), h: date.getHours(), i: date.getMinutes(), s: date.getSeconds(), a: date.getDay() } const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { let value = formatObj[key] // Note: getDay() returns 0 on Sunday if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } if (result.length > 0 && value < 10) { value = '0' + value } return value || 0 }) return time_str } /** * 获取当前时间 * @returns {string} */ export function getNow() { let date = new Date(); let year = date.getFullYear(); let month = date.getMonth() < 9 ? "0" + (date.getMonth() + 1) : (date.getMonth() + 1); let day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate(); let hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours(); let minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes(); let seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds(); let now = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ':' + seconds; return now }; /** * 数组求和 * @param arr 数组 * @param key key * @returns {number} 和 */ export function arraySum(arr, key) { if (!arr) { return 0 } let res = 0; arr.forEach(item => { res += Number(item[key]) }) return res }; /** * 完整计算时间差(天、小时、分钟、秒) * @param d1 时间点 * @param d2 * @returns {string} */ export function getTimeDifference(d1, d2) { //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了 let dateBegin = new Date(d1.replace(/-/g, "/"));//将-转化为/,使用new Date let dateEnd; if (d2) { dateEnd = new Date(d2.replace(/-/g, "/")) } else { dateEnd = new Date();//获取当前时间 } let dateDiff = dateEnd.getTime() - dateBegin.getTime();//时间差的毫秒数 let dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//计算出相差天数 let leave1 = dateDiff % (24 * 3600 * 1000) //计算天数后剩余的毫秒数 let hours = Math.floor(leave1 / (3600 * 1000))//计算出小时数 //计算相差分钟数 let leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数 let minutes = Math.floor(leave2 / (60 * 1000))//计算相差分钟数 //计算相差秒数 let leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数 let seconds = Math.round(leave3 / 1000) return dayDiff + "天" + hours + "小时" + minutes + "分钟" + seconds + "秒" }; /** * 排序从大到小 * @param ary * @param key * @returns {*} */ export function sortDesByKey(ary, key) { return ary.sort((a, b) => { let x = a[key]; let y = b[key]; return ((x < y) ? 1 : (x > y) ? -1 : 0) }) }; /** * 排序从小到大 * @param ary * @param key * @returns {*} */ export function sortAscByKey(ary, key) { return ary.sort((a, b) => { let x = a[key]; let y = b[key]; return ((x < y) ? -1 : (x > y) ? 1 : 0) }) }; /** * 防抖 * @param fn 函数 * @param delay 等待时间 * @returns {function(...[*]=)} */ // 防抖定时函数 let debounceTimer = null; export function debounce(fn, delay = 1000){ return function() { if(debounceTimer){ clearTimeout(debounceTimer) //进入该分支语句,说明当前正在一个计时过程中,并且又触发了相同事件。所以要取消当前的计时,重新开始计时 debounceTimer = setTimeout(fn,delay) }else{ debounceTimer = setTimeout(fn,delay) // 进入该分支说明当前并没有在计时,那么就开始一个计时 } } } /** * 节流 * @param fn 函数 * @param delay 等待时间 * @returns {function(...[*]=)} */ let throttleValid = true; export function throttle(fn,delay){ return function() { if(!throttleValid){ //休息时间 暂不接客 return false } // 工作时间,执行函数并且在间隔期内把状态位设为无效 throttleValid = false setTimeout(() => { fn() throttleValid = true; }, delay) } }