2015-04-29 18 views
9

Lassen Sie mich sagen, ich habe startDate = 7/16/2015 und endDate = 7/20/2015. Diese 2 Daten werden in einer SharePoint-Liste gespeichert.So berechnen Sie die gesamten Tage zwischen zwei ausgewählten Kalenderdaten

Wenn Benutzer das genaue Datum mit dem Datum in SharePoint-Liste auswählen, kann es die Gesamttage = 2 berechnen, was bedeutet, dass ohne Berechnung an den anderen Tagen.

Jeder kann bitte dabei helfen?

Ich benutze den folgenden Code, um den gesamten Tag der Differenz zu berechnen, ohne am Wochenende zu zählen. Aber ich kann nicht herausfinden, wie man den gesamten Tag des ausgewählten Datums berechnet, ohne an anderen Tagen zu zählen.

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; 

} 
+0

Was ist Ihre Logik? –

Antwort

1

Zuerst Sie den Unterschied in der Zeit zu berechnen haben, wandeln dann die Zeit zu Tage

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")); 

nicht getestet, sollten aber funktionieren ...

16

Die folgende Funktion berechnet die Anzahl der Unternehmen Tage zwischen zwei Terminen

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"/>

+0

Laut https://www.w3schools.com/jsref/jsref_obj_date.asp gibt getDate() den Tag des Monats zurück. Hast du das beabsichtigt? –

+0

Dies schlägt fehl, wenn sich die Zeit von Sommer- auf Winterzeit ändert. Z.B. Startdatum '10/27/17' und Enddatum' 10/30/17'. Dies wird nur 1 Tag statt 2 Tage zählen. – Markus

-1

Kann versuchen, es wird auch funktionieren.

//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; 
Verwandte Themen