4

我有两个时间输入,我想使用 dayjs 获得这两者之间的差异/时间间隔

fromtime = '13:00'
totime = '17:00'

所以以上两个的输出应该是4:00小时

我试过了

console.log(
          dayjs(fromtime).diff(dayjs(totime), "hours")
        );

但我没有得到预期的输出。

4

3 回答 3

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 = 1totalMins = 10
希望这对某人有所帮助。

于 2020-07-28T00:55:48.150 回答
1

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>

于 2020-02-14T12:23:00.150 回答
1
fromtime = '13:00'
totime = '17:00'

这些当前是字符串,您需要将其转换为整数。

console.log(parseInt(fromtime) - parseInt(totime)) //4
于 2020-08-05T07:01:58.553 回答