获取跳出办公时间的两个日期时间之间的时差

时间:2018-02-19 16:06:19

标签: javascript datetime momentjs date-difference angular-moment

我试图找出跳过办公时间的两个日期时间字段之间的区别

这个计算两个日期时间字段之间的差异

moment.utc(moment(data.ClosureDate).diff(moment(data.Created))).format("HH:mm:ss")

这个工作正常,但我不确定如何扣除不在办公时间

我想在每天上午9点至下午6点考虑并计算差异

例如,如果date.Created是2月19日晚上7点和date.ClosureDate是2月20日上午11点差异应该是2小时

是否可以使用Javascript,时刻或任何其他库来执行此操作?

1 个答案:

答案 0 :(得分:2)

您可以使用此函数,该函数将结果返回为毫秒数。 HH:mm:ss的格式保留在它之外,因为当这段时间跨越几天时,格式不会很好:



function officeTimeDiff(a, b) {
    a = moment(a);
    b = moment(b);
    if (b.diff(a) < 0) return 0;
    if (a.hour() <   9) a = a.hour(9).startOf('hour');
    if (a.hour() >= 18) a = a.add(1, 'day').hour(9).startOf('hour');    
    if (b.hour() <   9) b = b.add(-1, 'day').hour(18).startOf('hour');
    if (b.hour() >= 18) b = b.hour(18).startOf('hour');
    const diff = b.clone().year(a.year()).month(a.month()).date(a.date()).diff(a);
    a = a.startOf('day');
    b = b.startOf('day');
    return diff + moment.duration(b.diff(a, 'day') * 9, 'hour').asMilliseconds();
}

console.log(moment.utc(officeTimeDiff('2018-02-19 19:22:09', '2018-02-20 11:01:08')).format('HH:mm:ss'));
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"></script>
&#13;
&#13;
&#13;

如果您想要排除周末时间,则必须添加类似的逻辑,但在您的问题中未提及这一点。