计算两个特定日期之间的星期五(或任何一个)的数量


Count the no of Fridays (or any) between two specific dates?

php中有没有任何方法可以计算两组日期之间的星期五(或指定的任何其他日期)?我是通过这样的sql来实现的,现在我想直接在php中实现,我在谷歌上搜索了一下,发现只有几天和几周,而不是几周。

您可以获得特定日期的计数,在日期范围内,而无需在所有日期内循环
我已经修改了这个函数。

使用:

echo dayCount('2013-11-15', '2013-11-22', 5); # 2x Friday
echo dayCount('2013-11-15', '2013-11-22', 1); # 1x Monday

功能:

function dayCount($from, $to, $day = 5) {
    $from = new DateTime($from);
    $to   = new DateTime($to);
    $wF = $from->format('w');
    $wT = $to->format('w');
    if ($wF < $wT)       $isExtraDay = $day >= $wF && $day <= $wT;
    else if ($wF == $wT) $isExtraDay = $wF == $day;
    else                 $isExtraDay = $day >= $wF || $day <= $wT;
    return floor($from->diff($to)->days / 7) + $isExtraDay;
}

演示

首先,您可以获得当前月份的星期四(示例)。

$registered = strtotime(date('d/m/Y'));
$lastday = strtotime(date('t/m/Y'));
$curMonth = date("m");
for ($i=1; $i < 15; $i++){
    $week = $i*7; 
    if (date("m",strtotime("next thursday - 42 days + $week days")) == $curMonth){
            $monthArr[] = date("d",strtotime("next thursday - 42 days + $week days"));
    }
}

然后你会发现从当前日期到月末的星期四。

foreach($monthArr as $moAr) {
    if(date("d") <= $moAr) {
        $get[] = $moAr;
    }
}

尝试使用给定的代码:

<?php
$no = 0;
$start = new DateTime('2013-11-11');
$end   = new DateTime('2013-11-23');
$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $dt)
{
    if ($dt->format('N') == 5)
    {
        $no++;
    }
}
echo $no;

其中$dt->format('N') == 5中的5表示一周中的第5天,即星期五。

您可以使用递归创建函数。


    function dayCount($day, $startDate, $endDate, $counter){
      if($startDate >= $endDate){
        return $counter;
      }else{
        return dayCount($day, strtotime("next ".$day, $startDate), $endDate, ++$counter);
     }
   }
echo dayCount("Friday", strtotime("2019-03-01"), strtotime("2019-03-31"), 0); exit();

输出为5

相关文章: