- 定义类型限制用户的输入
- 判断用户是否传入时间,如果传入了时间,进行格式处理,处理成时间戳,比较时间戳即可,如果没有传入时间直接存放即可。
type TDate = 'h' | 'w'| 'd' | 'm' |'s'
type TExpire = `${number}${TDate}`;
interface IStorage{
value: any,
key: string,
expire?:TExpire
}
const storageUtil = {
set(data: IStorage) {
if (data.expire) {
const date = {expire:0}
data?.expire && this.processExpire(data.expire,date)
localStorage.setItem(data.key, JSON.stringify({ expire: date.expire, value: data.value }))
} else {
localStorage.setItem(data.key, JSON.stringify(data.value))
}
},
get(key: string) {
let res = localStorage.getItem(key) as any
res && (res = JSON.parse(res))
console.log(res?.expire,new Date().getTime());
if (res?.expire && res.expire < new Date().getTime()) {
localStorage.removeItem(key)
res = null
}
return res
},
delete(key: string) {
localStorage.removeItem(key)
},
processExpire(expire: TExpire, date: { expire: number }) {
const time = expire.match(/\d/)![0],
timerUnit: TDate = expire.split(time)[1].toLocaleLowerCase() as TDate
switch (timerUnit) {
case 's':
date.expire = Number(time) * 1000
break
case 'm':
date.expire = Number(time) * 1000 * 60
break
case 'h':
date.expire = Number(time) * 1000 * 60 * 60
break
case 'd':
date.expire = Number(time) * 1000 * 60 * 60 * 24
break
case 'w':
date.expire = Number(time) * 1000 * 60 * 60 * 24 * 7
break
}
date.expire += new Date().getTime()
}
}
export default () => {
return storageUtil
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61