我有两个时间输入,我想使用 dayjs 获得这两者之间的差异/时间间隔
fromtime = '13:00'
totime = '17:00'
所以以上两个的输出应该是4:00
小时
我试过了
console.log(
dayjs(fromtime).diff(dayjs(totime), "hours")
);
但我没有得到预期的输出。
我有两个时间输入,我想使用 dayjs 获得这两者之间的差异/时间间隔
fromtime = '13:00'
totime = '17:00'
所以以上两个的输出应该是4:00
小时
我试过了
console.log(
dayjs(fromtime).diff(dayjs(totime), "hours")
);
但我没有得到预期的输出。
我找到了解决方案。
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 parse now):
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