使用Laravel carbon来计算未来X天没有星期天的日子.

问题描述 投票:0回答:1

我正在使用Laravel开发一个基于订阅的应用程序. 我想改变用户的状态为 过期 在订阅套餐的75天后。我想把周日从这75天中排除。

考虑一个场景,用户的账户今天被验证,他只能使用75天的高级功能(不包括周日)。在75天之后,用户需要重新订阅以获得应用程序的高级功能。

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

我有两种方案来检查是否过期。

  1. 保存过期日期一栏 users 表。
  2. 验证每个用户的请求,根据 verified_at (datetime)列,并防止用户订阅超过75天而没有星期天的情况下的高级访问。

我想使用 拉威尔碳纤维 或任何其他替代库功能。

从今天(6月11日)起75天后是8月25日"■▄▄■▓,从今天(6月11日-周日除外)起75天后是9月07日"■▄▄■▓。

参考资料。https:/getcalc.com75business-days-after-today.htm。

laravel validation datetime php-carbon
1个回答
1
投票

我想把周日从这75天中排除掉. 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

所以如果第一天既不 MondayTuesday那么就会有 11 周日(10+[71-75]中出现的1),否则只有10个周日。


0
投票

我可以使用下面的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');

    }
© www.soinside.com 2019 - 2024. All rights reserved.