【问题标题】:How to calculate the total days between two selected calendar dates如何计算两个选定日历日期之间的总天数
【发布时间】:2015-07-08 03:23:29
【问题描述】:

假设我的 startDate = 7/16/2015 和 endDate = 7/20/2015。这 2 个日期存储在 SharePoint 列表中。

如果用户选择与 SharePoint 列表中日期的确切日期,它可以计算总天数 = 2 ,这意味着不计算其他天。

有人可以帮忙吗?

我使用以下代码计算总天数的差异,而不计算周末。但我无法弄清楚如何计算所选日期的总天数而不计算其他天数。

function workingDaysBetweenDates(startDate,endDate) {

// Validate input
if (endDate < startDate)
    return 'Invalid !';

// 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);
var 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;

}

【问题讨论】:

    标签: javascript date sharepoint sharepoint-designer


    【解决方案1】:

    以下函数计算两个日期之间的工作日数

    function getBusinessDatesCount(startDate, endDate) {
        var count = 0;
        var curDate = startDate;
        while (curDate <= endDate) {
            var dayOfWeek = curDate.getDay();
            if(!((dayOfWeek == 6) || (dayOfWeek == 0)))
               count++;
            curDate.setDate(curDate.getDate() + 1);
        }
        return count;
    }
    
    
    //Usage
    
    var startDate = new Date('7/16/2015');
    var endDate = new Date('7/20/2015');
    var numOfDates = getBusinessDatesCount(startDate,endDate);
    $('div#result').text(numOfDates);
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="result"/>

    【讨论】:

    • 根据w3schools.com/jsref/jsref_obj_date.aspgetDate() 返回月份的日期。这是你的意图吗?
    • 当时间从夏季时间更改为冬季时间时,此操作会失败。例如。 startDate 10/27/17 和 endDate 10/30/17。这将只计算 1 天而不是 2 天。
    【解决方案2】:

    首先你必须计算时间差,然后将时间转换为天数

    var calculateDifference = function(date1, date2){
        var timeDifference = Math.abs(date2.getTime() - date1.getTime());
        return Math.ceil(timeDifference / (1000 * 3600 * 24));//ms * seconds * hours
    }
    
    var difference = calculateDifference(new Date("7/16/2015"), new Date("7/20/2015"));
    

    未经测试,但应该可以工作...

    【讨论】:

      【解决方案3】:

      使用momentstartDateendDate

      function getBusinessDaysCount(startDate, endDate) {
        let relativeDaySequence = [...Array(endDate.diff(startDate, "days")).keys()];
        let daySequence = relativeDaySequence.map(relativeDay => {
          let startDateClone = startDate.clone();
          return startDateClone.add(relativeDay, "days");
        });
        return daySequence.reduce(
          (dayCount, currentDay) => dayCount + (currentDay.day() === 0 || currentDay.day() === 6 ? 0 : 1),
          0
        );
      }
      

      【讨论】:

        【解决方案4】:

        可以试试这个也行。

        //fromDate is start date and toDate is end Date
            var timeDiff = Math.abs(toDate.getTime() - fromDate.getTime());
            var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)) ;
        //  var startDay = fromDate.getDay();
            debugger;
            var diffDayWeek = diffDays + fromDate.getDay();
            var diffDiv = Math.floor(parseInt(diffDayWeek/7));
            diffDiv *= 2; "Saturday and Sunday are Weekend
            diffDays += 1 - diffDiv;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-26
          • 2010-10-07
          • 2010-09-14
          相关资源
          最近更新 更多