【问题标题】:Count the no of Fridays (or any) between two specific dates?计算两个特定日期之间有多少个星期五(或任何一个)?
【发布时间】:2013-11-19 10:26:39
【问题描述】:

在 php 中有什么方法可以计算包括的两组日期之间的星期五(或指定的任何其他日期)的数量? 我是通过像this这样的sql来做的,现在我想直接在php中实现,我用谷歌搜索发现只有几天和几周,但不是一周的几天。

【问题讨论】:

标签: php codeigniter date


【解决方案1】:

您可以在日期范围内获取特定日期的计数,无需循环所有天
我已经修改了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

【讨论】:

  • 我添加了日期名称数组,因此您可以使用日期名称调用函数,因为 PHP 日期函数将帮助获取名称。
  • 注意第三个参数是(w - 一天的数字表示(0代表星期日,6代表星期六))
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    尝试使用给定的代码:

    <?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-&gt;format('N') == 5 中的 5 表示一周中的第 5 天,即星期五。

    【讨论】:

    • IMO 整天循环播放只是矫枉过正。另外,这个例子忽略了最后一个日期,所以对于2013-11-15 - 2013-11-22 范围,它只会返回一个星期五,那里有 2 个。
    【解决方案4】:

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

    
        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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多