如何计算两个日期之间每月的14号发生的次数
例如在07.05.2018至04.07.2018之间
我有14次出现2次
答案 0 :(得分:2)
尝试一下。请注意,我已经更改了日期格式,但是如果您真的很喜欢自己的格式,则可以执行createFromFormat
。
$startDate = new DateTime('2018-05-07');
$endDate = new DateTime('2018-07-04');
$dateInterval = new DateInterval('P1D');
$datePeriod = new DatePeriod($startDate, $dateInterval, $endDate);
$fourteenths = [];
foreach ($datePeriod as $dt) {
if ($dt->format('d') == '14') { // Note this is loosely checked!
$fourteenths[] = $dt->format('Y-m-d');
}
}
echo count($fourteenths) . PHP_EOL;
var_dump($fourteenths);
在此处查看实际操作:https://3v4l.org/vPZZ0
编辑
这可能不是一个最佳的解决方案,因为您遍历日期范围内的每一天,并检查它是否是第14位。可能更容易的方法是修改开始日期直到下一个14日,然后以P1M
的间隔进行检查。
答案 1 :(得分:1)
您根本不需要循环。
这是一个完全不会循环的解决方案,它使用的内存和性能要求较低的日期比DateTime少。
$start = "2018-05-07";
$end = "2018-07-04";
$times = 0;
// Check if first and last month in the range has a 14th.
if(date("d", strtotime($start)) <= 14) $times++;
if(date("d", strtotime($end)) >= 14) $times++;
// Create an array with the months between start and end
$months = range(strtotime($start . "+1 month"), strtotime($end . "-1 month"), 86400*30);
// Add the count of the months
$times += count($months);
echo $times; // 2