From 359e3c7483f6f4d7da374db347f46f7d9f2fefc6 Mon Sep 17 00:00:00 2001 From: Vyacheslav Date: Sun, 13 Jul 2025 18:31:21 +0500 Subject: [PATCH] add opportunity to see how much time till shift ends --- package.json | 2 +- src/components/ReleaseList/ReleaseList.tsx | 6 ++++ src/helpers/DateFunctions.ts | 41 ++++++++++++++++++++- src/pages/Timers/Timers.tsx | 42 +++++++++++++++------- 4 files changed, 77 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 4a20dc9..a9a95f8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "timers", "private": true, - "version": "1.1.0", + "version": "1.2.0", "type": "module", "scripts": { "dev": "vite", diff --git a/src/components/ReleaseList/ReleaseList.tsx b/src/components/ReleaseList/ReleaseList.tsx index 241f77d..c4bbd4f 100644 --- a/src/components/ReleaseList/ReleaseList.tsx +++ b/src/components/ReleaseList/ReleaseList.tsx @@ -8,6 +8,12 @@ interface ReleaseListProps { const ReleaseList = ({isOpen, onClose}: ReleaseListProps) => { return ( +

v1.2.0 - А когда домой?

+

13.07.2025

+ При нажатии на время в верхней части страницы будет показываться оставшееся время до коцна смены + +
+

v1.1.0 - Я все помню

14.06.2025

При обновлении страницы все таймеры сохранят свое состояние, при условии что были созданы сегодня diff --git a/src/helpers/DateFunctions.ts b/src/helpers/DateFunctions.ts index 2ddaa2f..ad3e6f2 100644 --- a/src/helpers/DateFunctions.ts +++ b/src/helpers/DateFunctions.ts @@ -18,4 +18,43 @@ export const isToday = (date: Date) => { date.getMonth() === today.getMonth() && date.getDate() === today.getDate() ); -} \ No newline at end of file +} + +export const timeTillDate = (date: Date): string => { + const now = new Date(); + let diff = date.getTime() - now.getTime(); + + if (diff <= 0) return "00:00:00"; + + const hours = Math.floor(diff / (1000 * 60 * 60)); + diff %= 1000 * 60 * 60; + + const minutes = Math.floor(diff / (1000 * 60)); + diff %= 1000 * 60; + + const seconds = Math.floor(diff / 1000); + + const pad = (num: number) => String(num).padStart(2, '0'); + + return `-${pad(hours)}:${pad(minutes)}:${pad(seconds)}`; +}; + +export const getClosestTime = (hour: number, minute: number): Date => { + const now = new Date(); + const target = new Date( + now.getFullYear(), + now.getMonth(), + now.getDate(), + hour, + minute, + 0, + 0 + ); + + if (target <= now) { + // Добавляем 1 день, если время уже прошло + target.setDate(target.getDate() + 1); + } + + return target; +}; \ No newline at end of file diff --git a/src/pages/Timers/Timers.tsx b/src/pages/Timers/Timers.tsx index c2456db..701b20c 100644 --- a/src/pages/Timers/Timers.tsx +++ b/src/pages/Timers/Timers.tsx @@ -1,14 +1,14 @@ import {useEffect, useState} from 'react'; import Timer from '../../components/Timer/Timer'; import styles from './Timers.module.css'; -import {formatFullTime} from "../../helpers/DateFunctions.ts"; +import {formatFullTime, getClosestTime, timeTillDate} from "../../helpers/DateFunctions.ts"; import ReleaseList from "../../components/ReleaseList/ReleaseList.tsx"; import Button from "../../components/Button/Button.tsx"; const Timers = () => { const [time, setTime] = useState(new Date()); const [isReleasesListOpen, setIsReleasesListOpen] = useState(false); - + const [isReverseTime, setIsReverseTime] = useState(false); useEffect(() => { const intervalId = setInterval(() => { @@ -16,27 +16,45 @@ const Timers = () => { }, 500); return () => clearInterval(intervalId); - }, []) + }, []); + const handleToggleTime = () => { + setIsReverseTime((prev) => !prev); + }; + + const targetTime = getClosestTime(22, 0); + const displayTime = isReverseTime ? timeTillDate(targetTime) : formatFullTime(time); return ( <>
- MetaTimer - {formatFullTime(time)} -
- - - - + + + +
setIsReleasesListOpen(false)} /> - ) -} + ); +}; export default Timers; \ No newline at end of file