Разница между двумя временами с использованием DayJS
У меня есть два ввода времени, и я хочу получить разницу / временной интервал между этими двумя, используя dayjs
fromtime = '13:00'
totime = '17:00'
Таким образом, результат для двух вышеуказанных должен быть 4:00
часы
Я старался
console.log(
dayjs(fromtime).diff(dayjs(totime), "hours")
);
Но я не получаю ожидаемого результата.
4 ответа
Я нашел решение этого.
const fromtime = '11:20'
const totime = '12:30'
const ft = dayjs(`2000-01-01 ${fromtime}`);
const tt = dayjs(`2000-01-01 ${totime}`);
const mins = tt.diff(ft, "minutes", true);
const totalHours = parseInt(mins / 60);
const totalMins = dayjs().minute(mins).$m
Это даст результат как totalHours = 1
а также totalMins = 10
.
Надеюсь, это кому-то поможет.
Dayjs ожидает дату в определенном формате ( строка синтаксического анализа dayjs), а не только время. Однако вы можете установить час ( dayjs set hour), не устанавливая определенную дату ( анализ dayjs сейчас):
var fromtime = dayjs().hour(13)
var totime = dayjs().hour(17)
console.log(totime.diff(fromtime, "hours"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.8.20/dayjs.min.js"></script>
РЕДАКТИРОВАТЬ
Что, если входные данные содержат fromtime = '10.25'и totime = '11.30'. Таким образом, мой результат должен быть "1.05". Но когда я следую вашему методу, результат будет 1. Есть ли способ решить эту проблему?
Вы также можете установить минуты ( dayjs set minute). К сожалению, в этой библиотеке я не вижу никаких параметров форматирования для разницы во времени. Поэтому нам придется рассчитать это самостоятельно:
function formatInterval(minutes) {
let interval = [
Math.floor(minutes / 60).toString(), //hours ("1" - "12")
(minutes % 60).toString() //minutes ("1" - "59")
];
return interval[0].padStart(2, '0') + ':' + interval[1].padStart(2, '0')
}
let fromtime = dayjs().hour(10).minute(25);
let totime = dayjs().hour(11).minute(30);
let interval = totime.diff(fromtime, "minute");
console.log(formatInterval(interval));
<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.8.20/dayjs.min.js"></script>
РЕДАКТИРОВАТЬ2
Это не удастся, если день переключится между двумя первыми строками.
ОК предполагал fromtime
всегда будет меньше, чем totime
... если это не так, мы можем просто вычесть отрицательное количество минут из общего количества минут в день следующим образом:
function formatInterval(minutes) {
let interval = [Math.floor(minutes / 60).toString(), (minutes % 60).toString()];
return interval[0].padStart(2, '0') + ':' + interval[1].padStart(2, '0')
}
function getInterval(from, to) {
let [hoursA, minutesA] = from.split(':');
let [hoursB, minutesB] = to.split(':');
let timeA = dayjs().hour(hoursA).minute(minutesA);
let timeB = dayjs().hour(hoursB).minute(minutesB);
let interval = timeB.diff(timeA, 'minutes');
if(interval < 0) {
return formatInterval(24 * 60 + timeB.diff(timeA, 'minutes'));
}
return formatInterval(interval);
}
console.log(getInterval('23:00', '1:45'));
console.log(getInterval('10:25', '11:30'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.8.20/dayjs.min.js"></script>
fromtime = '13:00'
totime = '17:00'
В настоящее время это строки, и вам нужно преобразовать их в целые числа.
console.log(parseInt(fromtime) - parseInt(totime)) //4
// Addition, Difference between two time zones
import timezone from 'dayjs/plugin/timezone';
dayjs.extend(timezone);
const d1 = dayjs((dayjs().tz('Europe/Kiev').format('YYYY-MM-DDTHH:mm')));
const d2 = dayjs((dayjs().tz('Europe/London').format('YYYY-MM-DDTHH:mm')));
console.log(d1.diff(d2, 'hours', true)); // 2