【问题标题】:Get the time difference between two datetimes skipping out of office hours获取跳过办公时间的两个日期时间之间的时差
【发布时间】:2018-02-19 16:06:18
【问题描述】:

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

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

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、moment 或任何其他库来做到这一点?

【问题讨论】:

  • 您可以执行诸如 moment(date).add(1, 'hour') 或 moment(date).subtract(1, 'hour') 这样的操作,因此只需添加控制流来指示何时应该发生和发生多少

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


【解决方案1】:

你可以使用这个函数,它以毫秒为单位返回结果。 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'));
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"&gt;&lt;/script&gt;

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

【讨论】:

    猜你喜欢
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2012-03-24
    • 1970-01-01
    相关资源
    最近更新 更多