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

Php 从2个给定日期中找出多少个星期日?,php,datetime,Php,Datetime,由2009年1月1日至2009年2月23日 如何找出这两天之间有多少个星期天 像这样的事情怎么样: $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_d

由2009年1月1日至2009年2月23日


如何找出这两天之间有多少个星期天

像这样的事情怎么样:

$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);
每个星期日的日期,以及:

int 8
星期天的数目

(我很快就查过了,似乎那些日期确实是星期天)


此代码的作用是:

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

注意:我已将日期格式更改为YYYY-MM-DD,而不是DD-MM-YYY;这是通常使用的格式——因此,使用这种格式可能是个好主意,以确保strotime正常工作。(不确定是否适合您的格式)

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


可以看到一些例子。

这应该可以在没有任何循环的情况下完成

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

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

// 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);
//计算日期范围内给定天数的函数
功能天数($day,$start,$end){
$w=数组(日期($w',$start),日期($w',$end));
返回楼层((日期('z',$end)-日期('z',$start))/7+($day==$w[0]| |$day==$w[1]|$$day<((7+$w[1]-$w[0])%7));
}
//确定你的日期
$start=mktime(0,0,0,1,162010);
$end=mktime(0,0,0,1,252010);
//显示计数
回音天数(0,$start,$end);
$sunday=0;

对于($i=1;$ii)如果我的($dateMax)结束日是星期天,那么它将显示错误的答案:(如果你想包括$dateMax,而不是排除它,你能用你的答案给出解释吗?这是原始帖子:(已修复)
// 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);
       $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;