使用Laravel碳计算未来X天没有星期日



我正在使用Laravel开发一个基于订阅的应用程序。我想将用户的状态更改为在订阅包 75 天后过期。我想在这75天中排除星期日。

考虑这样一种情况:用户帐户今天已验证,并且他只能在 75 天内(不含星期日(访问高级功能。75 天后,用户需要重新订阅才能访问应用程序的高级功能。

然后,我将设置一个中间件,用于检查用户的订阅是否已过期。

我有两种情况要检查过期:

  1. 将到期日期列保存在users表中。
  2. 根据verified_at(日期时间(列验证每个用户的请求,并在用户订阅超过 75 天(不含星期日(时阻止高级访问。

我想使用 Laravel Carbon 或任何其他替代库/功能来实现这一点。

从今天(6月11日(起75天后为8月25 🙅 ♂️
日 从今天(6月11日-周日除外(起75天后为9月7 👈

日参考: https://getcalc.com/75business-days-after-today.htm

如果75是固定的,那么您可以轻松计算该时间段内的星期日数量,因此您只需将这些日子添加到75

$period_in_days = 75;
if($user->verified_at->dayOfWeek > 2)
$period_in_days += 11;
else 
$period_in_days += 10;

关键是,在75天内可能有10个或11个星期天,因此为了决定是10个还是11个星期日,我们需要检查哪一天是第一天。
假设是第一天的星期一,所以 75 天应该看起来像这样

1 - Monday
2 - Tuesday
...
71 - Monday
72 - Tuesday
73 - Wednesday
74 - Thursday
75 - Friday

假设是第一天是星期二,所以 75 天应该看起来像这样

1 - Tuesday
2 - Wednesday
...
71 - Tuesday
72 - Wednesday
73 - Thursday
74 - Friday
75 - Saturday

假设是第一天是星期三,所以 75 天应该看起来像这样

1 - Wednesday
2 - Thursday
...
71 - Wednesday
72 - Thursday
73 - Friday
74 - Saturday
75 - Sunday

因此,如果第一天既不是Monday也不是Tuesday,那么将有11个星期日(10 +[71-75]中出现的1(,否则将只有10个星期日

我可以使用以下 PHP 函数计算接下来的 75 天(星期日除外(

function Next75Days($StartingDate){
// Count Next 75 Days excluding Sundays
$Days = 75;
$d = new DateTime($StartingDate);
$t = $d->getTimestamp();
// Loop for 75 days
for($i=0; $i<$Days; $i++){
// Add 1 day to timestamp
$addDay = 86400;
// Get date of next day
$nextDay = date('w', ($t+$addDay));
// if it's Sunday, do $i--1
if($nextDay == 0) {
$i--;
}
// modify timestamp, add 1 day
$t = $t+$addDay;
}
$d->setTimestamp($t);
return $d->format('d M Y');
}

最新更新