计算两个日期之间日期(例如第14个)的出现

时间:2018-07-09 11:31:04

标签: php laravel laravel-5.6 php-carbon

如何计算两个日期之间每月的14号发生的次数
例如在07.05.2018至04.07.2018之间 我有14次出现2次

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

https://3v4l.org/RevLg