【问题标题】:How to calculate business hours between two dates in javascript when date difference is large? [duplicate]当日期差异很大时,如何在javascript中计算两个日期之间的营业时间? [复制]
【发布时间】:2021-01-07 15:14:59
【问题描述】:

我正在制作员工管理主页。 我想获得两个日期之间的营业时间。 我已经从这个链接搜索并获得了一种方法。 http://rion.io/2014/06/20/calculating-business-hours-in-javascript/

// Simple function that accepts two parameters and calculates
// the number of hours worked within that range
function workingHoursBetweenDates(startDate, endDate) {  
    // Store minutes worked
    var minutesWorked = 0;

    // Validate input
    if (endDate < startDate) { return 0; }

    // Loop from your Start to End dates (by hour)
    var current = startDate;

    // Define work range
    var workHoursStart = 9;
    var workHoursEnd = 18;
    var includeWeekends = false;

    // Loop while currentDate is less than end Date (by minutes)
    while(current <= endDate){          
        // Is the current time within a work day (and if it 
        // occurs on a weekend or not)          
        if(current.getHours() >= workHoursStart && current.getHours() < workHoursEnd && (includeWeekends ? current.getDay() !== 0 && current.getDay() !== 6 : true)){
              minutesWorked++;
        }

        // Increment current time
        current.setTime(current.getTime() + 1000 * 60);
    }

    // Return the number of hours
    return minutesWorked / 60;
}

我尝试了这种方法,但是当日期差异很大时性能很差,例如2020-01-01 12:45:00 - 2028-10-06 23:10:33。

所以我自己制作了新功能。但有时是错误的。

function workingHoursBetweenDates(startDate, endDate) {
  const startWeekday = startDate.getDay();
  const endWeekday = endDate.getDay();
  let workHours = Math.abs(endDate.getTime() - startDate.getTime()) / 3600000 / 3;
  let restDays = Math.floor(workHours / 8 / 7) * 2;
  workHours -= (restDays * 8);
  return workHours;
}

请任何人帮助。谢谢。

【问题讨论】:

    标签: javascript date


    【解决方案1】:

    我会优化您的问题,以便处理完整的日期。

    如果您采用2020-01-01 12:45:00 - 2028-10-06 23:10:33 的范围,那么这基本上分为三个部分:

    1. 2020-01-01 12:45:00 - 2020-01-01 23:59:59
    2. 2020-01-02 00:00:00 - 2028-10-05 23:59:59
    3. 2020-10-06 00:00:00 - 2028-10-06 23:10:33

    计算全天营业时间很容易:dayAmount * (dayEnd - dayStart) * 60

    在第 1 部分和第 3 部分中,使用您能想到的任何方法计算分钟数。然后将所有内容相加。

    编辑:另一方面,您甚至可能不得不将其分成每周的部分,因为它可能不是一整周。而且您必须计算假期的数量,除非您可以采用幼稚的方法。

    【讨论】:

    • 谢谢,我试试你的方法。我有一个问题。 dayAmount * (dayEnd - dayStart) * 60 dayAmount 是什么?并且您的方法中没有周末选项。
    • dayAmount 是该时间范围内的有效工作日数。你必须想出一种方法来计算它。更不用说处理公共假期了。
    猜你喜欢
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2021-11-25
    • 2011-08-01
    • 2019-08-04
    相关资源
    最近更新 更多