You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.1 KiB
105 lines
3.1 KiB
export function debounce(func, wait, immediate) {
|
|
let timeout, args, context, timestamp, result
|
|
|
|
const later = function() {
|
|
// 据上一次触发时间间隔
|
|
const last = +new Date() - timestamp
|
|
|
|
// 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
|
|
if (last < wait && last > 0) {
|
|
timeout = setTimeout(later, wait - last)
|
|
} else {
|
|
timeout = null
|
|
// 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
|
|
if (!immediate) {
|
|
result = func.apply(context, args)
|
|
if (!timeout) context = args = null
|
|
}
|
|
}
|
|
}
|
|
|
|
return function(...args) {
|
|
context = this
|
|
timestamp = +new Date()
|
|
const callNow = immediate && !timeout
|
|
// 如果延时不存在,重新设定延时
|
|
if (!timeout) timeout = setTimeout(later, wait)
|
|
if (callNow) {
|
|
result = func.apply(context, args)
|
|
context = args = null
|
|
}
|
|
|
|
return result
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Parse the time to string
|
|
* @param {(Object|string|number)} time
|
|
* @param {string} cFormat
|
|
* @returns {string}
|
|
*/
|
|
export function parseTime(time, cFormat) {
|
|
if (arguments.length === 0) {
|
|
return null
|
|
}
|
|
const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
|
|
let date
|
|
if (typeof time === 'undefined' || time === null || time === 'null') {
|
|
return ''
|
|
} else if (typeof time === 'object') {
|
|
date = time
|
|
} else {
|
|
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
|
|
time = parseInt(time)
|
|
}
|
|
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
|
|
}
|
|
|
|
// 获取当前日期时间
|
|
export function getCurrentTime() {
|
|
const yy = new Date().getFullYear()
|
|
const mm = new Date().getMonth() + 1
|
|
const dd = new Date().getDate()
|
|
const hh = new Date().getHours()
|
|
const mf = new Date().getMinutes() < 10 ? '0' + new Date().getMinutes() : new Date().getMinutes()
|
|
const ss = new Date().getSeconds() < 10 ? '0' + new Date().getSeconds() : new Date().getSeconds()
|
|
const time = yy + '年' + mm + '月' + dd + '日 ' + hh + ':' + mf + ':' + ss
|
|
return time
|
|
}
|
|
|
|
export function getFormattedDate(date, yearOffset = 0) {
|
|
date.setFullYear(date.getFullYear() + yearOffset)
|
|
const year = date.getFullYear()
|
|
const month = (date.getMonth() + 1).toString().padStart(2, '0')
|
|
const day = date.getDate().toString().padStart(2, '0')
|
|
return `${year}-${month}-${day}`
|
|
}
|
|
|
|
export function isExternal(path) {
|
|
return /^(https?:|mailto:|tel:)/.test(path)
|
|
}
|
|
|