2010-06-02 94 views
10

如何计算php中两个日期之间星期六和星期日的数量?计算星期六和星期日的数量

是否有用于此目的的任何内置功能?

+0

的[计算工作日]可能重复上来(http://stackoverflow.com/questions/336127/calculate-business-days) – 2014-01-14 10:45:30

回答

5

有一个相关的问题已经在这里,Calculate business days

你可以用它来减从7到周末的日子,或类似的。

4

我不认为有一个内置的为,但这应该做的工作:

$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

如果startdate中的时间戳记星期六到来,该怎么办星期六 – nik 2010-06-02 14:42:56

+0

它也可以工作,'date('w',$ time)== 0',所以你去第二个时候,'$ count ++' ,你至少有一个星期六。 – 2010-06-02 14:58:36

+1

而不是'while(date('w',$ time)!= 0)''你可以做'$ time = strtotime(“Saturday”)'或'$ time = strtotime(“Sunday”)''。 – 2010-06-02 15:16:47

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

我可能错过了最后一个条件之一,一定要检查它与不同的开始日期。 (如果您发现错误,请随时编辑此答案)。

0

有绝对没有内置的函数,该函数,但你可以使用的strtotime循环天

$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

让我们KISS(保持简单愚蠢)。为什么这么复杂?

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

我搜索了一段时间了一个简单的解决方案,工作,决定写我自己以及与此

 $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; 
相关问题