2015-04-29 15 views
9

Diciamo che ho startDate = 7/16/2015 e endDate = 7/20/2015. Queste 2 date sono memorizzate in un elenco di SharePoint.Come calcolare i giorni totali tra due date di calendario selezionate

Se l'utente seleziona la data esatta con la data nell'elenco di SharePoint, può calcolare i giorni totali = 2, il che significa che senza calcolare negli altri giorni.

Chiunque può aiutare in questo?

Uso il seguente codice per calcolare il giorno di differenza totale senza contare il fine settimana. Ma non riesco a capire come calcolare il giorno totale della data selezionata senza contare su altri giorni.

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

Qual è la tua logica? –

risposta

1

In primo luogo si deve calcolare la differenza di tempo, quindi convertire il momento di giorni

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

non testato, ma dovrebbe funzionare ...

16

La seguente funzione calcola il numero di imprese giorni tra due date

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

In base a https://www.w3schools.com/jsref/jsref_obj_date.asp getDate() restituisce il giorno del mese. È quello che intendevi? –

+0

Si verifica un errore quando si verifica un cambio orario dall'ora legale all'ora solare. Per esempio. startDate '10/27/17' e endDate' 10/30/17'. Questo conterà solo 1 giorno invece di 2 giorni. – Markus

-1

Può Provarlo funziona anche.

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