使用 Laravel 碳计算接下来 X 天没有星期天
Count next X days without Sunday using Laravel carbon
我正在使用 Laravel 开发基于订阅的应用程序。我想在订阅包 75 天后将用户状态更改为 expire。我想从这 75 天中排除周日。
考虑这样一种情况,用户的帐户今天得到验证,他只能访问高级功能 75 天(星期日除外)。 75 天后,用户需要重新订阅才能访问应用程序的高级功能。
然后我将设置一个中间件来检查用户的订阅是否已过期。
我有两种情况来检查过期:
- 将到期日期列保存在
users
table。
- 根据
verified_at
(日期时间)列验证每个用户的请求,如果用户订阅超过 75 天且没有星期日,则阻止高级访问。
我想使用 Laravel Carbon 或任何其他替代方法 library/functionality。
今天(6月11日)75天后就是8月25日♂️
从今天开始 75 天后(6 月 11 日 - 不包括星期日)是 9 月 7 日
如果 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');
}
我正在使用 Laravel 开发基于订阅的应用程序。我想在订阅包 75 天后将用户状态更改为 expire。我想从这 75 天中排除周日。
考虑这样一种情况,用户的帐户今天得到验证,他只能访问高级功能 75 天(星期日除外)。 75 天后,用户需要重新订阅才能访问应用程序的高级功能。
然后我将设置一个中间件来检查用户的订阅是否已过期。
我有两种情况来检查过期:
- 将到期日期列保存在
users
table。 - 根据
verified_at
(日期时间)列验证每个用户的请求,如果用户订阅超过 75 天且没有星期日,则阻止高级访问。
我想使用 Laravel Carbon 或任何其他替代方法 library/functionality。
今天(6月11日)75天后就是8月25日♂️
从今天开始 75 天后(6 月 11 日 - 不包括星期日)是 9 月 7 日
如果 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');
}