计算Javascript中两个日期之间的工作日(节假日除外)

亚历克斯

我有一个javascript函数,它计算两个日期之间的工作日,它可以工作,但是问题是它不考虑假期。我如何修改此功能,例如通过在异常数组中添加假期?

在互联网上搜索了有关此问题的信息,但未找到有关假期例外的信息。

例如,假日数组:

var holidays = ['2016-05-03','2016-05-05'];

我有一个函数来计算这个:

function workingDaysBetweenDates(d0, d1) {
    var startDate = parseDate(d0);
    var endDate = parseDate(d1);  
    // Validate input
    if (endDate < startDate)
        return 0;

    // Calculate days between dates
    var millisecondsPerDay = 86400 * 1000; // Day in milliseconds
    startDate.setHours(0,0,0,1);  // Start just after midnight
    endDate.setHours(23,59,59,999);  // End just before midnight
    var diff = endDate - startDate;  // Milliseconds between datetime objects    
    var days = Math.ceil(diff / millisecondsPerDay);

    // Subtract two weekend days for every week in between
    var weeks = Math.floor(days / 7);
    days = days - (weeks * 2);

    // Handle special cases
    var startDay = startDate.getDay();
    var endDay = endDate.getDay();

    // Remove weekend not previously removed.   
    if (startDay - endDay > 1)         
        days = days - 2;      

    // Remove start day if span starts on Sunday but ends before Saturday
    if (startDay == 0 && endDay != 6)
        days = days - 1  

    // Remove end day if span ends on Saturday but starts after Sunday
    if (endDay == 6 && startDay != 0)
        days = days - 1  

    return days;
}
function parseDate(input) {
    // Transform date from text to date
  var parts = input.match(/(\d+)/g);
  // new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])
  return new Date(parts[0], parts[1]-1, parts[2]); // months are 0-based
}

在jsfiddle中做了一个例子:

JSFiddle示例

也许还有一些其他功能可以在Jquery中轻松使用?

奥斯卡·加西亚(OscarGarcia)

最简单的方法是在开始日期和结束日期之间寻找这些天。

编辑:我添加了一个额外的验证,以确保仅从holidays阵列中减去工作日

$(document).ready(() => {
  $('#calc').click(() => {
  var d1 = $('#d1').val();
  var d2 = $('#d2').val();
    $('#dif').text(workingDaysBetweenDates(d1,d2));
  });
});

let workingDaysBetweenDates = (d0, d1) => {
  /* Two working days and an sunday (not working day) */
  var holidays = ['2016-05-03', '2016-05-05', '2016-05-07'];
  var startDate = parseDate(d0);
  var endDate = parseDate(d1);  

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

// Calculate days between dates
  var millisecondsPerDay = 86400 * 1000; // Day in milliseconds
  startDate.setHours(0, 0, 0, 1);  // Start just after midnight
  endDate.setHours(23, 59, 59, 999);  // End just before midnight
  var diff = endDate - startDate;  // Milliseconds between datetime objects    
  var days = Math.ceil(diff / millisecondsPerDay);

  // Subtract two weekend days for every week in between
  var weeks = Math.floor(days / 7);
  days -= weeks * 2;

  // Handle special cases
  var startDay = startDate.getDay();
  var endDay = endDate.getDay();
    
  // Remove weekend not previously removed.   
  if (startDay - endDay > 1) {
    days -= 2;
  }
  // Remove start day if span starts on Sunday but ends before Saturday
  if (startDay == 0 && endDay != 6) {
    days--;  
  }
  // Remove end day if span ends on Saturday but starts after Sunday
  if (endDay == 6 && startDay != 0) {
    days--;
  }
  /* Here is the code */
  holidays.forEach(day => {
    if ((day >= d0) && (day <= d1)) {
      /* If it is not saturday (6) or sunday (0), substract it */
      if ((parseDate(day).getDay() % 6) != 0) {
        days--;
      }
    }
  });
  return days;
}
           
function parseDate(input) {
    // Transform date from text to date
  var parts = input.match(/(\d+)/g);
  // new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])
  return new Date(parts[0], parts[1]-1, parts[2]); // months are 0-based
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="d1" value="2016-05-02"><br>
<input type="text" id="d2" value="2016-05-08">

<p>Working days count: <span id="dif"></span></p>
<button id="calc">Calc</button>

<p>
Now it shows 5 days, but I need for example add holidays 
3 and 5 May (2016-05-03 and 2016-05-05) so the result will be 3 working days
</p>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算Javascript中两个日期之间的工作日(节假日除外)

来自分类Dev

计算非节假日工作日

来自分类Dev

添加日期+3个工作日的功能,不包括周末和节假日

来自分类Dev

SQL查询以查找过去的第3个工作日(节假日和周末除外)

来自分类Dev

获取最近 5 个工作日并排除节假日列表 Oracle DB

来自分类Dev

计算两个日期之间的工作日

来自分类Dev

可可-计算两个日期之间的工作日

来自分类Dev

计算两个日期之间的特定工作日

来自分类Dev

在相邻单元格中找到的日期之后十个工作日(不包括节假日)突出显示相邻单元格

来自分类Dev

如何使用moment.js计算Javascript中两个日期之间的“工作日”数?

来自分类Dev

获取3个下一个工作日期,跳过周末和节假日

来自分类Dev

计算表中每一行在两个日期之间的工作日

来自分类Dev

计算 SSRS 2016 中两个日期之间的工作日

来自分类Dev

如何在JavaScript中获取两个不同日期之间的工作日

来自分类Dev

如何计算两个日期之间的工作日数?

来自分类Dev

如何计算两个日期之间的工作日数

来自分类Dev

计算两个日期之间的总业务工作日

来自分类Dev

给定多个工作日作为输入,计算两个日期之间的“实际”天数

来自分类Dev

计算两个日期之间的总业务工作日

来自分类Dev

yii2如何计算日期之间的天数,不包括周末和节假日

来自分类Dev

两个日期之间的差异(美国假日时间除外)

来自分类Dev

计算工作天数(不包括节假日)

来自分类Dev

在linq中获取两个日期之间的工作日计数

来自分类Dev

如何在xslt 1.0中仅获取两个日期之间的工作日

来自分类Dev

在Postgresql中获取两个日期之间的工作日

来自分类Dev

Objective-C中两个日期之间的工作日?

来自分类Dev

在linq中获取两个日期之间的工作日计数

来自分类Dev

如何计算熊猫数据框中同一列中两个日期之间的时差并计算工作日因素

来自分类Dev

在 DAX 中,我可以创建一个函数来计算两个日期/时间字段之间的工作日吗?

Related 相关文章

  1. 1

    计算Javascript中两个日期之间的工作日(节假日除外)

  2. 2

    计算非节假日工作日

  3. 3

    添加日期+3个工作日的功能,不包括周末和节假日

  4. 4

    SQL查询以查找过去的第3个工作日(节假日和周末除外)

  5. 5

    获取最近 5 个工作日并排除节假日列表 Oracle DB

  6. 6

    计算两个日期之间的工作日

  7. 7

    可可-计算两个日期之间的工作日

  8. 8

    计算两个日期之间的特定工作日

  9. 9

    在相邻单元格中找到的日期之后十个工作日(不包括节假日)突出显示相邻单元格

  10. 10

    如何使用moment.js计算Javascript中两个日期之间的“工作日”数?

  11. 11

    获取3个下一个工作日期,跳过周末和节假日

  12. 12

    计算表中每一行在两个日期之间的工作日

  13. 13

    计算 SSRS 2016 中两个日期之间的工作日

  14. 14

    如何在JavaScript中获取两个不同日期之间的工作日

  15. 15

    如何计算两个日期之间的工作日数?

  16. 16

    如何计算两个日期之间的工作日数

  17. 17

    计算两个日期之间的总业务工作日

  18. 18

    给定多个工作日作为输入,计算两个日期之间的“实际”天数

  19. 19

    计算两个日期之间的总业务工作日

  20. 20

    yii2如何计算日期之间的天数,不包括周末和节假日

  21. 21

    两个日期之间的差异(美国假日时间除外)

  22. 22

    计算工作天数(不包括节假日)

  23. 23

    在linq中获取两个日期之间的工作日计数

  24. 24

    如何在xslt 1.0中仅获取两个日期之间的工作日

  25. 25

    在Postgresql中获取两个日期之间的工作日

  26. 26

    Objective-C中两个日期之间的工作日?

  27. 27

    在linq中获取两个日期之间的工作日计数

  28. 28

    如何计算熊猫数据框中同一列中两个日期之间的时差并计算工作日因素

  29. 29

    在 DAX 中,我可以创建一个函数来计算两个日期/时间字段之间的工作日吗?

热门标签

归档