我正在尝试找出跳过非办公时间的两个日期时间字段之间的差异
此方法计算两个日期时间字段之间的差值
moment.utc(moment(data.ClosureDate).diff(moment(data.Created))).format("HH:mm:ss")
这个很好用,但是我不知道如何扣除不在工作时间的时间
我想每天只考虑上午9点到下午6点的时间并计算差额。
例如,如果date.Created为Feb-19 7 7PM,date.ClosureDate为Feb-20 11 20,则差异应为2小时
有没有可能使用Javascript、moment或其他库来实现这一点?
发布于 2018-02-19 17:26:28
您可以使用此函数,它以毫秒为单位返回结果。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'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"></script>
如果您想要排除周末,则必须添加类似的逻辑,但在您的问题中没有提到这是必需的。
https://stackoverflow.com/questions/48869909
复制