页面隐藏时暂停时钟

dev/timezone
Lei OT 1 year ago
parent c4f13b5b8e
commit 5772d61a85

@ -6,23 +6,30 @@ import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc'; import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone'; import timezone from 'dayjs/plugin/timezone';
import relativeTime from 'dayjs/plugin/relativeTime'; import relativeTime from 'dayjs/plugin/relativeTime';
import { useVisibilityState } from '@/hooks/useVisibilityState';
dayjs.extend(utc); dayjs.extend(utc);
dayjs.extend(timezone); dayjs.extend(timezone);
dayjs.extend(relativeTime); dayjs.extend(relativeTime);
const ExpireTimeClock = ({ expireTime }) => { const ExpireTimeClock = ({ expireTime }) => {
const isVisible = useVisibilityState();
const [customerDateTime, setCustomerDateTime] = useState(''); const [customerDateTime, setCustomerDateTime] = useState('');
const [isExpired, setIsExpired] = useState(false); const [isExpired, setIsExpired] = useState(false);
useEffect(() => { useEffect(() => {
const intervalId = setInterval(() => { let interval;
// .tz('Asia/Shanghai') UTC Asia/Shanghai GMT+8 if (isVisible) {
setCustomerDateTime(dayjs(expireTime).add(8, 'hours').fromNow()); interval = setInterval(() => {
}, 1000); // .tz('Asia/Shanghai') UTC Asia/Shanghai GMT+8
return () => clearInterval(intervalId); setCustomerDateTime(dayjs(expireTime).add(8, 'hours').fromNow());
}, [expireTime]); }, 1000);
} else {
clearInterval(interval);
}
return () => clearInterval(interval);
}, [isVisible, expireTime]);
useEffect(() => { useEffect(() => {
const _ago = customerDateTime.slice(-3) === 'ago'; const _ago = customerDateTime.slice(-3) === 'ago';

@ -1,12 +1,15 @@
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { Typography, Select } from 'antd'; import { Typography, Select } from 'antd';
import ct from 'countries-and-timezones'; import ct from 'countries-and-timezones';
import { useVisibilityState } from '@/hooks/useVisibilityState';
const LocalTimeClock = ({ region, timezone, ...props }) => { const LocalTimeClock = ({ region, timezone, ...props }) => {
const isVisible = useVisibilityState();
const [countryTimezones, setCountryTimezones] = useState([]); const [countryTimezones, setCountryTimezones] = useState([]);
const [timezoneP, setTimezoneP] = useState(timezone); const [timezoneP, setTimezoneP] = useState(timezone);
const [customerDateTime, setCustomerDateTime] = useState(); const [customerDateTime, setCustomerDateTime] = useState();
console.log(timezone, timezoneP); // console.log(timezone, timezoneP);
useEffect(() => { useEffect(() => {
if (timezone) { if (timezone) {
@ -26,23 +29,29 @@ const LocalTimeClock = ({ region, timezone, ...props }) => {
}, [region, timezone]); }, [region, timezone]);
useEffect(() => { useEffect(() => {
const interval = setInterval(() => { let interval;
// const date = new Date(); if (isVisible) {
const options = { interval = setInterval(() => {
timeZone: timezoneP, const options = {
timeZoneName: 'short', timeZone: timezoneP,
hour12: false, timeZoneName: 'short',
month: '2-digit', hour12: false,
day: '2-digit', month: '2-digit',
hour: '2-digit', day: '2-digit',
minute: '2-digit', hour: '2-digit',
}; minute: '2-digit',
// const formatter = new Intl.DateTimeFormat('en-US', options); // second: '2-digit',
// setCustomerDateTime(formatter.format(date)); };
setCustomerDateTime(new Date().toLocaleTimeString('cn-ZH', options)); // const date = new Date();
}, 1000); // const formatter = new Intl.DateTimeFormat('en-US', options);
// setCustomerDateTime(formatter.format(date));
setCustomerDateTime(new Date().toLocaleTimeString('cn-ZH', options));
}, 1000);
} else {
clearInterval(interval);
}
return () => clearInterval(interval); return () => clearInterval(interval);
}, [timezoneP]); }, [isVisible, timezoneP]);
return region ? ( return region ? (
<> <>

Loading…
Cancel
Save