|
@@ -0,0 +1,60 @@
|
|
|
+import { dateUtil } from '@/utils/dateUtil'
|
|
|
+import { reactive, toRefs } from 'vue'
|
|
|
+import { tryOnMounted, tryOnUnmounted } from '@vueuse/core'
|
|
|
+
|
|
|
+export const 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
|
|
|
+ }
|
|
|
+}
|