2010-06-02 12 views
10

Come posso calcolare il numero di sabati e domeniche tra due date in php?Calcolo del numero di sabati e domeniche

Esiste qualche funzione incorporata a tale scopo?

+0

possibile duplicato del [Calcola giorni lavorativi] (http://stackoverflow.com/questions/336127/calculate-business-days) –

risposta

5

C'è una questione connessa già qui, Calculate business days

È possibile utilizzare questo per sottrarre da 7 per ottenere i giorni del fine settimana, o simili.

4

Non credo che v'è una costruito in per questo, ma questo dovrebbe fare il lavoro:

$startTime = START_TIMESTAMP; 
$endTime = END_TIMESTAMP; 
$time = $startTime; 
$count = 0; 

while(date('w', $time) != 0) { // 0 (for Sunday) through 6 (for Saturday) 
    $time += 86400; 
} 

while($time < $endTime) { 
    $count++; 
    $time += 7 * 86400; 
} 
+0

cosa succede se timestamp in startdate arriva sabato – nik

+0

Funziona anche, 'date ('w', $ time) == 0' quindi vai al secondo mentre' $ count ++ ' , hai almeno un sabato. –

+1

Invece di "while (date ('w', $ time)! = 0)' puoi semplicemente fare '$ time = strtotime (" Saturday ")' o '$ time = strtotime (" Sunday ")'. –

0
<?php 
date_default_timezone_set("Europe/Lisbon"); 
$d1 = new DateTime("2009-06-01"); /* inclusive */ 
$d2 = new DateTime("2009-07-01"); /* exclusive */ 

$interval = $d2->diff($d1); 
$number_of_days = $interval->format("%d"); 

$number_of_weekends = $number_of_days/7; 
$remainder = $number_of_days % 7; 

if ($remainder >=2 && $d1->format("D") == "Sat") 
    $number_of_weekends++; 
elseif ($d1->format("w") + $remainder >= 8) 
    $number_of_weekends++; 

Potrei essermi perso per uno nell'ultima condizione, assicuratevi di controllarlo con date di inizio differenti. (Sentiti libero di modificare questa risposta se riscontri un errore).

0

c'è sicuramente nessuna funzione incorporata per questo, ma è possibile utilizzare strtotime loop giorni

$start = strtotime('2010-01-01'); 
$end = strtotime('2010-01-09'); 

function numWeekdays($start_ts, $end_ts, $day, $include_start_end = false) { 

    $day = strtolower($day); 
    $current_ts = $start_ts; 
    // loop next $day until timestamp past $end_ts 
    while($current_ts < $end_ts) { 

     if(($current_ts = strtotime('next '.$day, $current_ts)) < $end_ts) { 
      $days++; 
     } 
    } 

    // include start/end days 
    if ($include_start_end) { 
     if (strtolower(date('l', $start_ts)) == $day) { 
      $days++; 
     } 
     if (strtolower(date('l', $end_ts)) == $day) { 
      $days++; 
     } 
    } 

    return (int)$days; 

} 

echo numWeekDays($start, $end, 'saturday', false); 
1

Facciamo tutto Kiss (Keep It Simple Stupid). Perché renderlo così complicato?

function countWeekendDays($start, $end) 
{ 
    // $start in timestamp 
     // $end in timestamp 


    $iter = 24*60*60; // whole day in seconds 
    $count = 0; // keep a count of Sats & Suns 

    for($i = $start; $i <= $end; $i=$i+$iter) 
    { 
     if(Date('D',$i) == 'Sat' || Date('D',$i) == 'Sun') 
     { 
      $count++; 
     } 
    } 
    return $count; 
    } 
0

Ho cercato per un po 'per una semplice soluzione che ha funzionato e ha deciso di scrivere la mia e si avvicinò con questo

 $start = date('Y-m-d'); 
     $end = date('Y-m-d', strtotime($start.' +1 year')); 
     $current = $start; 
     $count = 0; 

     while($current != $end){ 
      if(date('l', strtotime($current)) == 'Saturday'){ 
       $count++; 
      } 

      $current = date('Y-m-d', strtotime($current.' +1 day')); 
     }; 

     echo $count; 
Problemi correlati