Как посчитать разницу во времени (JS)?

545
19 октября 2017, 12:19

Добрый день, мне приходят данные в string формате: '11:43' и '13:14' Помогите правильно написать скрипт что-бы высчитывал разницу между этими двумя числами, должно получиться 01:31. Можно через Moment JS

Answer 1

Возможно вам будет достаточно такого решения:

let firstDate = '11:43'; 
let secondDate = '13:14'; 
			 
let getDate = (string) => new Date(0, 0,0, string.split(':')[0], string.split(':')[1]); //получение даты из строки (подставляются часы и минуты 
let different = (getDate(secondDate) - getDate(firstDate)); 
 
let hours = Math.floor((different % 86400000) / 3600000); 
let minutes = Math.round(((different % 86400000) % 3600000) / 60000); 
let result = hours + ':' + minutes; 
 
console.log(result);

Answer 2

Можно поступить так:

  1. распарсить отдельно первое и второе значение string на часы и минуты
  2. часы умножить на 60 и сложить с минутами и получится одно число в минутах
  3. должно получиться 11*60+43=703 и 13*60+14=794
  4. вычесть из первых минут вторые и ответ взять по модулю
  5. получится |703-794|=91
  6. дальше просто ответ делим на 60 и получаем количество часов, т.е. 1
  7. и в конце вычитаем из ответа количество часов *60, т.е. 91-60*1=31 и получаем минуты

Итого 1 час 31 минута

Answer 3

Немного дописал скрипт, если время началось в 23:43 и закончилось в 04:14 выдаст правильный ответ.

let firstDate = '23:43'; 
let secondDate = '04:14'; 
let getDate = (string) => new Date(0, 0,0, string.split(':')[0], string.split(':')[1]); 
let different = (getDate(secondDate) - getDate(firstDate)); 
let differentRes, hours, minuts; 
if(different > 0) { 
  differentRes = different; 
  hours = Math.floor((differentRes % 86400000) / 3600000); 
  minuts = Math.round(((differentRes % 86400000) % 3600000) / 60000); 
} else { 
  differentRes = Math.abs((getDate(firstDate) - getDate(secondDate))); 
  hours = Math.floor(24 - (differentRes % 86400000) / 3600000); 
  minuts = Math.round(60 - ((differentRes % 86400000) % 3600000) / 60000); 
} 
let result = hours + ':' + minuts; 
console.log(result)

READ ALSO
javascript выдернуть время

javascript выдернуть время

offset выводит 1508321154018

298
slideToggle() не отодвигает нижние блоки на Safari

slideToggle() не отодвигает нижние блоки на Safari

Добрый деньУ меня почему-то в Safari при использовании slideToggle() не отодвигается нижний контент, а этот блок разворачивает под ни м

260
смена active класса по клику React

смена active класса по клику React

Помогите разобраться, мне нужно по клику добавлять класс, элементов может быть несколько, чтобы по клику на текущий элемент класс добавлялся,...

275