php 计算有多少个星期日,php – 计算两个日期之间的星期日

约翰康德的答案是正确的,但这是一个更有效和肮脏的解决方案:

$start = new DateTime('2013-01-06');

$end = new DateTime('2013-01-20');

$days = $start->diff($end, true)->days;

$sundays = intval($days / 7) + ($start->format('N') + $days % 7 >= 7);

echo $sundays;

让我为你分解一下.

$start = new DateTime('2013-01-06');

$end = new DateTime('2013-01-20');

首先,创建一些DateTime对象,它们是功能强大的内置PHP对象,正是为了解决这类问题.

$days = $start->diff($end, true)->days;

接下来,使用DateTime::diff查找从$start到$end的差异(在此处传递true,因为第二个参数确保此值始终为正),并获取它们之间的天数.

$sundays = intval($days / 7) + ($start->format('N') + $days % 7 >= 7);

这是最重要的 – 但它并不是那么复杂,真的.首先,我们知道每周有一个星期天,所以我们至少有$days / 7个星期日开始,用intval向下舍入到最近的int.

最重要的是,在不到一周的时间内可能会有一个星期天;例如,下周的周五到周一包含4天;其中一个是星期天.所以,根据我们开始和结束的时间,可能会有另一个.这很容易解释:

> $start->格式(‘N’)(参见DateTime::format)为我们提供了开始日期的一周中的ISO-8601天,这是一个从1到7的数字(1是星期一,7是星期日).

> $days%7为我们提供了剩余天数,这些天数没有平均分为几周.

如果我们的开始日和剩余天数加起来达到7天或更多,那么我们就达到了星期天.知道这一点,我们只需添加该表达式,如果它是真的则给出1,如果它是假的则给出0,因为我们将它添加到int值.

你有它!这种方法的优点是它不需要在给定时间之间每天迭代并检查它是否是星期日,这将为您节省大量计算,并且它还会让您看起来非常聪明.希望有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值