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.
61 lines
1.1 KiB
61 lines
1.1 KiB
2 years ago
|
import { dateUtil } from '@/utils/dateUtil'
|
||
|
import { reactive, toRefs } from 'vue'
|
||
|
import { tryOnMounted, tryOnUnmounted } from '@vueuse/core'
|
||
|
|
||
|
export function useNow(immediate = true) {
|
||
|
let timer: IntervalHandle
|
||
|
|
||
|
const state = reactive({
|
||
|
year: 0,
|
||
|
month: 0,
|
||
|
week: '',
|
||
|
day: 0,
|
||
|
hour: '',
|
||
|
minute: '',
|
||
|
second: 0,
|
||
|
meridiem: ''
|
||
|
})
|
||
|
|
||
|
const update = () => {
|
||
|
const now = dateUtil()
|
||
|
|
||
|
const h = now.format('HH')
|
||
|
const m = now.format('mm')
|
||
|
const s = now.get('s')
|
||
|
|
||
|
state.year = now.get('y')
|
||
|
state.month = now.get('M') + 1
|
||
|
state.week = '星期' + ['日', '一', '二', '三', '四', '五', '六'][now.day()]
|
||
|
state.day = now.get('date')
|
||
|
state.hour = h
|
||
|
state.minute = m
|
||
|
state.second = s
|
||
|
|
||
|
state.meridiem = now.format('A')
|
||
|
}
|
||
|
|
||
|
function start() {
|
||
|
update()
|
||
|
clearInterval(timer)
|
||
|
timer = setInterval(() => update(), 1000)
|
||
|
}
|
||
|
|
||
|
function stop() {
|
||
|
clearInterval(timer)
|
||
|
}
|
||
|
|
||
|
tryOnMounted(() => {
|
||
|
immediate && start()
|
||
|
})
|
||
|
|
||
|
tryOnUnmounted(() => {
|
||
|
stop()
|
||
|
})
|
||
|
|
||
|
return {
|
||
|
...toRefs(state),
|
||
|
start,
|
||
|
stop
|
||
|
}
|
||
|
}
|