Skip to main content

Timer

Big O
Big O

React JS​

App​

import "./index.css";

function App() {
return (
<div className="App">
<Timer />
</div>
);
}

export default App;

Timer​

const Timer = () => {
const [minutes, setMinutes] = useState("");
const [timeLeft, setTimeLeft] = useState(0);
const [isRunning, setIsRunning] = useState(false);

useEffect(() => {
let timerInterval;

if (isRunning && timeLeft > 0) {
timerInterval = setInterval(() => {
setTimeLeft((prevTime) => prevTime - 1);
}, 1000);
} else if (timeLeft === 0 && isRunning) {
setIsRunning(false);
}

return () => clearInterval(timerInterval);
}, [isRunning, timeLeft]);

const startTimer = () => {
const minutesValue = parseInt(minutes);
if (isNaN(minutesValue) || minutesValue <= 0) {
alert("Please enter a valid positive number of minutes.");
return;
}

if (isRunning) {
setIsRunning(false);
setTimeLeft(0);
}

setTimeLeft(minutesValue * 60);
setIsRunning(true);
};

const stopTimer = () => {
setIsRunning(false);
setTimeLeft(0);
};

const formatTime = (time) => {
const minutes = Math.floor(time / 60);
const seconds = time % 60;
return `${String(minutes).padStart(2, "0")}:${String(seconds).padStart(2, "0")}`;
};

return (
<div id="app">
{!isRunning ? (
<div id="timer-input">
<label htmlFor="minutes">Set Timer (minutes):</label>
<input
type="number"
id="minutes"
value={minutes}
onChange={(e) => setMinutes(e.target.value)}
min="1"
placeholder="Enter minutes"
/>
<button onClick={startTimer}>Start</button>
</div>
) : (
<div id="timer-display">
<div id="time-left">{formatTime(timeLeft)}</div>
<button onClick={stopTimer}>Stop</button>
</div>
)}
</div>
);
};

React TS​

App​

import "./index.css";

function App() {
return (
<div className="App">
<Timer />
</div>
);
}

export default App;

Timer​

import React, { useState, useEffect } from "react";
import "./styles.css"; // Подключаем существующий CSS файл

const Timer: React.FC = () => {
const [minutes, setMinutes] = useState<string>("");
const [timeLeft, setTimeLeft] = useState<number>(0);
const [isRunning, setIsRunning] = useState<boolean>(false);

useEffect(() => {
let timerInterval: NodeJS.Timeout;

if (isRunning && timeLeft > 0) {
timerInterval = setInterval(() => {
setTimeLeft((prevTime) => prevTime - 1);
}, 1000);
} else if (timeLeft === 0 && isRunning) {
setIsRunning(false);
}

return () => clearInterval(timerInterval);
}, [isRunning, timeLeft]);

const startTimer = () => {
const minutesValue = parseInt(minutes);
if (isNaN(minutesValue) || minutesValue <= 0) {
alert("Please enter a valid positive number of minutes.");
return;
}

if (isRunning) {
setIsRunning(false);
setTimeLeft(0);
}

setTimeLeft(minutesValue * 60);
setIsRunning(true);
};

const stopTimer = () => {
setIsRunning(false);
setTimeLeft(0);
};

const formatTime = (time: number) => {
const minutes = Math.floor(time / 60);
const seconds = time % 60;
return `${String(minutes).padStart(2, "0")}:${String(seconds).padStart(2, "0")}`;
};

return (
<div id="app">
{!isRunning ? (
<div id="timer-input">
<label htmlFor="minutes">Set Timer (minutes):</label>
<input
type="number"
id="minutes"
value={minutes}
onChange={(e) => setMinutes(e.target.value)}
min="1"
placeholder="Enter minutes"
/>
<button onClick={startTimer}>Start</button>
</div>
) : (
<div id="timer-display">
<div id="time-left">{formatTime(timeLeft)}</div>
<button onClick={stopTimer}>Stop</button>
</div>
)}
</div>
);
};

export default Timer;
Big O
Big O

React JS + Tailwind​

App​

import "./index.css";

function App() {
return (
<div className="App">
<Timer />
</div>
);
}

export default App;

Timer​

import React, { useState, useEffect } from "react";

const Timer = () => {
const [minutes, setMinutes] = useState("");
const [timeLeft, setTimeLeft] = useState(0);
const [isRunning, setIsRunning] = useState(false);

useEffect(() => {
let timerInterval;

if (isRunning && timeLeft > 0) {
timerInterval = setInterval(() => {
setTimeLeft((prevTime) => prevTime - 1);
}, 1000);
} else if (timeLeft === 0 && isRunning) {
setIsRunning(false);
}

return () => clearInterval(timerInterval);
}, [isRunning, timeLeft]);

const startTimer = () => {
const minutesValue = parseInt(minutes);
if (isNaN(minutesValue) || minutesValue <= 0) {
alert("Please enter a valid positive number of minutes.");
return;
}

if (isRunning) {
setIsRunning(false);
setTimeLeft(0);
}

setTimeLeft(minutesValue * 60);
setIsRunning(true);
};

const stopTimer = () => {
setIsRunning(false);
setTimeLeft(0);
};

const formatTime = (time) => {
const minutes = Math.floor(time / 60);
const seconds = time % 60;
return `${String(minutes).padStart(2, "0")}:${String(seconds).padStart(2, "0")}`;
};

return (
<div className="h-screen flex flex-col justify-center items-center bg-gray-900 text-white">
{!isRunning ? (
<div className="flex flex-col items-center gap-4">
<label htmlFor="minutes" className="text-lg">
Set Timer (minutes):
</label>
<input
type="number"
id="minutes"
value={minutes}
onChange={(e) => setMinutes(e.target.value)}
min="1"
placeholder="Enter minutes"
className="text-black p-2 text-lg rounded"
/>
<button
onClick={startTimer}
className="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
>
Start
</button>
</div>
) : (
<div className="flex flex-col items-center gap-4">
<div id="time-left" className="text-4xl font-bold">
{formatTime(timeLeft)}
</div>
<button
onClick={stopTimer}
className="px-4 py-2 bg-red-500 text-white rounded hover:bg-red-600"
>
Stop
</button>
</div>
)}
</div>
);
};

export default Timer;

React TS + Tailwind​

App​

import "./index.css";

function App() {
return (
<div className="App">
<Timer />
</div>
);
}

export default App;

Timer​

import React, { useState, useEffect } from "react";

const Timer: React.FC = () => {
const [minutes, setMinutes] = useState<string>("");
const [timeLeft, setTimeLeft] = useState<number>(0);
const [isRunning, setIsRunning] = useState<boolean>(false);

useEffect(() => {
let timerInterval: NodeJS.Timeout;

if (isRunning && timeLeft > 0) {
timerInterval = setInterval(() => {
setTimeLeft((prevTime) => prevTime - 1);
}, 1000);
} else if (timeLeft === 0 && isRunning) {
setIsRunning(false);
}

return () => clearInterval(timerInterval);
}, [isRunning, timeLeft]);

const startTimer = () => {
const minutesValue = parseInt(minutes);
if (isNaN(minutesValue) || minutesValue <= 0) {
alert("Please enter a valid positive number of minutes.");
return;
}

if (isRunning) {
setIsRunning(false);
setTimeLeft(0);
}

setTimeLeft(minutesValue * 60);
setIsRunning(true);
};

const stopTimer = () => {
setIsRunning(false);
setTimeLeft(0);
};

const formatTime = (time: number): string => {
const minutes = Math.floor(time / 60);
const seconds = time % 60;
return `${String(minutes).padStart(2, "0")}:${String(seconds).padStart(2, "0")}`;
};

return (
<div className="h-screen flex flex-col justify-center items-center bg-gray-900 text-white">
{!isRunning ? (
<div className="flex flex-col items-center gap-4">
<label htmlFor="minutes" className="text-lg">
Set Timer (minutes):
</label>
<input
type="number"
id="minutes"
value={minutes}
onChange={(e) => setMinutes(e.target.value)}
min="1"
placeholder="Enter minutes"
className="text-black p-2 text-lg rounded"
/>
<button
onClick={startTimer}
className="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
>
Start
</button>
</div>
) : (
<div className="flex flex-col items-center gap-4">
<div id="time-left" className="text-4xl font-bold">
{formatTime(timeLeft)}
</div>
<button
onClick={stopTimer}
className="px-4 py-2 bg-red-500 text-white rounded hover:bg-red-600"
>
Stop
</button>
</div>
)}
</div>
);
};

export default Timer;