#javascript #time #timestamp
Вопрос:
Допустим, мое мероприятие началось в
publishDateTime: "2021-08-23T16:45:53.378"
и это закончится через несколько дней,
duration: 3
Как узнать общее оставшееся время?
function timer(endTime = "2021-08-27T16:45:53.378") {
const second = 1000,
minute = second * 60,
hour = minute * 60,
day = hour * 24;
let end = new Date(endTime).getTime(),
x = setInterval(function () {
let now = new Date().getTime(),
timeLeft = end - now;
let days = Math.floor(timeLeft / (day)),
hours = Math.floor((timeLeft % (day)) / (hour)),
minutes = Math.floor((timeLeft % (hour)) / (minute)),
seconds = Math.floor((timeLeft % (minute)) / second);
console.log('Time left:' days "Days " hours "Hrs " minutes "Mins " seconds "secs")
if (timeLeft < 0) {
console.log('Times up');
clearInterval(x);
}
}, 1000) // time refresh in ms
}
timer("2021-08-23T16:45:53.378")
Я пытаюсь так, но здесь я не знаю, как преобразовать продолжительность дней в метку времени или в такой формат. Но когда я пытаюсь завершить работу с этим форматом, он работает. Но у меня есть счет дням.
Ответ №1:
Вам нужно добавить количество дней к вашему endDate
Что-то вроде этого:
function timer(endTime, durationDay = 3) {
const second = 1000,
minute = second * 60,
hour = minute * 60,
day = hour * 24;
let endDate = new Date(endTime);
endDate.setDate(endDate.getDate() durationDay);
let end = endDate.getTime();
let x = setInterval(function () {
let now = new Date().getTime(),
timeLeft = end - now;
let days = Math.floor(timeLeft / (day)),
hours = Math.floor((timeLeft % (day)) / (hour)),
minutes = Math.floor((timeLeft % (hour)) / (minute)),
seconds = Math.floor((timeLeft % (minute)) / second);
console.log('Time left:' days "Days " hours "Hrs " minutes "Mins " seconds "secs")
if (timeLeft < 0) {
console.log('Times up');
clearInterval(x);
}
}, 1000) // time refresh in ms
}
timer("2021-08-23T16:45:53.378")
Ответ №2:
Расчет оставшегося времени:
const publishDateTime = "2021-08-23T16:45:53.378";
const duration = 3; // days
const durationMs = duration * 24 * 3600 * 1000;
const startDateTime = new Date(publishDateTime);
const endDateTime = new Date(startDateTime.valueOf() durationMs);
const now = new Date();
const remainingTimeMs = Math.max(0, Math.min(endDateTime.valueOf() - now.valueOf(), durationMs));
console.log(`Remaining time: ${remainingTimeMs} ms`);
Ответ №3:
Способ, которым вы получаете время через 3 дня, заключается в том, чтобы получить текущее время new date()
и добавить к нему 3 дня (рассчитано исходя из количества часов, минут и т.д.). Я изменил ваш код, чтобы он работал так.
function timer(endDays = 1) {
const second = 1000,
minute = second * 60,
hour = minute * 60,
day = hour * 24;
let end = new Date().getTime() endDays * day,
x = setInterval(function () {
let now = new Date().getTime(),
timeLeft = end - now;
let days = Math.floor(timeLeft / (day)),
hours = Math.floor((timeLeft % (day)) / (hour)),
minutes = Math.floor((timeLeft % (hour)) / (minute)),
seconds = Math.floor((timeLeft % (minute)) / second);
console.log('Time left:' days "Days " hours "Hrs " minutes "Mins " seconds "secs")
if (timeLeft < 0) {
console.log('Times up');
clearInterval(x);
}
}, 1000) // time refresh in ms
}
timer(3)
Комментарии:
1. Ваш ответ тоже хорош, но для чего-то, что начинается сегодня и заканчивается
endDays
после сегодняшнего дня. Но как насчет ошибки обновления страницы или навигатора? Таймеры будут сброшены.2. Да, ты прав. Я неправильно понял ваш вопрос. Единственным изменением было бы добавить параметр publishDateTime в функцию таймера и использовать его вместо новой даты().