从2个给定日期中查找多少个星期日?

时间:2009-08-24 10:48:08

标签: php datetime

从01-01-2009到02-23-2009

如何找出这几天之间的星期天?

5 个答案:

答案 0 :(得分:5)

这样的事情:

$date = strtotime('2009-01-01 next sunday');
$dateMax = strtotime('2009-02-23');

$nbr = 0;
while ($date < $dateMax) {
  var_dump(date('Y-m-d', $date));
  $nbr++;
  $date += 7 * 24 * 3600;
}

var_dump($nbr);

你获得的输出是:

string '2009-01-04' (length=10)
string '2009-01-11' (length=10)
string '2009-01-18' (length=10)
string '2009-01-25' (length=10)
string '2009-02-01' (length=10)
string '2009-02-08' (length=10)
string '2009-02-15' (length=10)
string '2009-02-22' (length=10)

每个星期日的日期,并且:

int 8

关于星期日的数量

(我已经快速检查了,似乎那些日期确实是星期日)


这段代码的作用是:

  • 首先,获取2009-01-01之后的第一个星期日的日期
  • 然后,只要当前日期在2009-02-23之前,迭代
  • 在每次迭代中,添加7 * 24 * 3600秒(每周7天,每天24小时,每小时3600秒)

注意:我已更改日期格式,使用YYYY-MM-DD,而不是DD-MM-YYY;它是通常使用的格式 - 所以,使用这个格式可能是一个好主意,以确保strtotime正常工作。 (不确定它的格式是否正常)

答案 1 :(得分:2)

这应该没有任何循环。

$start = mktime(0, 0, 0, $start_month, $start_day, $start_year); 
$end = mktime(0, 0, 0, $end_month, $end_day, $end_year);
$days = ($end - $start) / 86400;
$sundays = $days / 7

// check if there are enough leftover days for one more sunday 
if((localtime($start)[6]+($days % 7) > 6)
   $sundays++;

答案 2 :(得分:1)

       $sunday=0;
       for($i=1; $i<=date("t", strtotime("2012-09-01")); $i++) {
           if(date("l", strtotime("2012-09-".$i)) === 'Sunday') {
               $sunday++;
           }     
       }
       echo "no of Sunday=".$sunday;

答案 3 :(得分:0)

你可以计算这两个日期之间的周数,PHP中应该有一些日期操作库,然后星期日的数量将是周数,你仍然需要查看第一个日期是否为星期日与否,最后日期是星期日或不是处理日期范围的边缘。

可以看到一些例子here

答案 4 :(得分:0)

在SO的某个地方看到这个,我在我的项目中使用它。无法追溯原始帖子。

// function to calculate number of given day within date range
function number_of_days($day, $start, $end){
    $w = array(date('w', $start), date('w', $end));
    return floor( ( date('z', $end) - date('z', $start) ) / 7) + ($day == $w[0] || $day == $w[1] || $day < ((7 + $w[1] - $w[0]) % 7));
}

// define your dates
$start = mktime(0, 0, 0, 1, 16, 2010);
$end = mktime(0, 0, 0, 1, 25, 2010);

// display the count
echo number_of_days(0, $start, $end);