gpt4 book ai didi

javascript - 获取两个跳过办公时间的日期时间之间的时差

转载 作者:行者123 更新时间:2023-12-01 02:25:16 24 4
gpt4 key购买 nike

我正在尝试查找两个日期时间字段之间的差异,跳过下类时间

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

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

这个工作正常,但我不知道如何扣除非办公时间

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

例如,如果 date.Created 为 Feb-19 7PM,而 date.ClosureDate 为 Feb-20 11AM,则相差应为 2 小时

是否可以使用 Javascript、moment 或任何其他库来做到这一点?

最佳答案

您可以使用此函数,它以毫秒数形式返回结果。 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>

如果您想排除周末,则必须添加类似的逻辑,但您的问题中没有提到这一点。

关于javascript - 获取两个跳过办公时间的日期时间之间的时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48869909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com