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

时间:2013-11-19 10:26:39

标签: php codeigniter date

在PHP中是否有任何方法我们可以计算两组日期之间的星期五(或指定的任何其他日期)的数量? 我正在通过像this这样的sql来实现它现在我想直接在php中实现,我已经用谷歌搜索了,并且发现其他所有其他日期和星期都没有,但不是一周的日子。

4 个答案:

答案 0 :(得分:4)

您可以获取特定日期的计数,日期范围之间的,而不会在所有日期循环
我修改了this function

使用:

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

<强> Demo

答案 1 :(得分:1)

首先,你可以获得当天的星期四(例子)。

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

答案 2 :(得分:0)

尝试使用给定的代码:

<?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天,即星期五。

答案 3 :(得分:0)

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


    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