php - 避免按天添加日期循环?
问题描述
我正在使用 Carbon 来增加天数,有没有办法避免使用for
和/或while
循环?
添加天数 ( $skipDayBy
) 并添加天数(如果在$excludeDatesPublic
或中找到$excludeDatesManual
)
例如工作演示:
function calculateDate($skipDayBy = 0) {
$excludeDatesPublic = ['2019-08-28'];
$excludeDatesManual = ['2019-09-01'];
$date = Carbon::now();
for($i = 0; $i < $skipDayBy; $i++) {
$date = $date->addDays(1);
while(in_array($date->toDateString(), $excludeDatesPublic) || in_array($date->toDateString(), $excludeDatesManual))
{
$date = $date->addDays(1);
}
}
return $date->toDateString();
}
echo calculateDate(4);
如果今天的日期是 2019-08-27,则按预期返回 2019-09-02。
解决方案
也许您正在寻找https://github.com/kylekatarnls/business-day,它允许您添加跳过假期的天数。
或者,您可以使用句点:
$skipDayBy = 5;
$excludeDatesPublic = ['2019-09-01'];
$excludeDatesManual = ['2019-09-04'];
$exclude = array_merge($excludeDatesPublic, $excludeDatesManual);
$date = CarbonPeriod::create(Carbon::now(), $skipDayBy)
->addFilter(function (Carbon $date) use ($exclude) {
return !in_array($date->format('Y-m-d'), $exclude);
})
->calculateEnd();
var_dump($date); // 2019-09-06 18:50:17 if run at 2019-08-31 18:50:17
推荐阅读
- c++ - 在arduino上显示输入数据的大小和整数的输入数据
- c# - 将 Json 数据传输到 C# 列表
- github - Github Pages 仅在某些目录中找不到 index.html
- prolog - 如何获取用户输入的每个单词的首字母
- mongodb - 我无法使用 Visual Studio Code 将 Strapi 与 MongoDB 连接起来。请协助我
- html - 如何修改里面的内容
- java - 类和子类之间的隐式和显式转换
- c - 如果一个变量是一个结构体的指针,那么通过指针变量访问结构体数据成员的操作符是什么?
- php - 替换单词并保持找到的字符串区分大小写
- sql - 如何识别两行数据的所有匹配列?