计算两个特定日期之间有多少个星期五(或任何一个)?

Posted

技术标签:

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

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

【问题讨论】:

有,是的。你有没有尝试过? 检查第一个日期(是星期天还是......)你有 7 天......你做数学 @oGeez 我用谷歌搜索了它。并且还尝试通过 sql 来实现 like (***.com/questions/4967808/…) 但 y 去 sql 并执行它 ***.com/questions/1653891/…的可能重复 【参考方案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

【讨论】:

以上是关于计算两个特定日期之间有多少个星期五(或任何一个)?的主要内容,如果未能解决你的问题,请参考以下文章

计算两个日期之间的第一个星期一有多少个

两个日期之间的特定天数

Ajax显示两个日期之间的日期数(输入标记),无需提交

mysql 计算两个日期间有多少个2月29

返回两个日期之间除去星期日的时间差

如何计算两个日期之间的秒数?