Задать вопрос
Mesuti
@Mesuti

Сложение и вычитание времени?

Привет!
Подскажите, пожалуйста, как сделать вычитание и прибавление времени?
Запутался как можно все сделать.
Была идея конвертировать часы в минуты + минуты = общее число минут.
Из обшего числа минут вычитать или прибавлять, затем переводить в часы и минуты и устанавливать в нужный input
Но я запутался с переходом часов 00:00 (особенно если это вычитание)

  • Вопрос задан
  • 2427 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Mesuti
@Mesuti Автор вопроса
Копался пол дня с if и else, чтобы часы и минуты были ровные - часы меньше 24 а минуты меньше 60.
Получилось кривая фабрика костылей.

Пока пять раз не прочитал статью - https://learn.javascript.ru/date
(Боже храни Илью Кантора)

Короче прямо в объекте можно вычислять математику.
И если она будет кривая, 35 часов : 89 минут - браузер все поймет и нормально покажет
Пример с добавление 0 для формата 00:00
let calcDate = new Date(2020, 0, 1, Час1 + Час2, Минута1 - Минута2, 0, 0);
result.value = (calcDate .getHours() < 10 ? "0" : "") + calcDate .getHours() + ":" + (calcDate .getMinutes() < 10 ? "0" : "") + calcDate .getMinutes();


p.s. при сложении лучше parseint к числам делать, потому что если число окажется строкой, браузер конкатенацию сожрет и не покажет ничего.
10 + "7" = 107 это уже другое, нежели 17
Я на этом моменте попался, думал формулы кривые
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Karpion
Я не понял задачи. Это реальное время событий или что-то иное?
Приведите пример использования - особенно случая отрицательного времени, что должно получаться.

Допустим, Вам надо выставлять время на часах. Оно отрицательным не бывает.
Тогда мы вычисляем время в минутах (или секундах, или вообще тысячных долях секунды) и приводим его к "модулю по суткам". Если мы работаем в минутах, то в сутках 60*24 минуты - так что берём результат и применяем к нему операцию "mod(60*24)", после чего получаем число в интервале от 0 до 60*24-1; и из него делаем часы:минуты.

Если же Вам надо получить результат в виде "столько-то времени назад/вперёд", то мы опять вычисляем время в минутах (или точнее). Затем берём abs от этого времени и переводим его в часы:минуты (часов м.б. много - больше, чем 24). Ну и дописываем знак.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 14:45
25000 руб./за проект
18 дек. 2024, в 14:43
25000 руб./за проект
18 дек. 2024, в 14:22
750 руб./за проект