页面隐藏时暂停时钟

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

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

Loading…
Cancel
Save