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.
60 lines
1.1 KiB
60 lines
1.1 KiB
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 |
|
} |
|
}
|
|
|