计算两个特定日期之间有多少个星期五(或任何一个)?
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->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
【讨论】:
以上是关于计算两个特定日期之间有多少个星期五(或任何一个)?的主要内容,如果未能解决你的问题,请参考以下文章