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, }; }