| 1234567891011121314151617181920212223242526272829303132333435 |
- <?php
- namespace App\Rules;
- use Carbon\Carbon;
- use Closure;
- use Illuminate\Contracts\Validation\ValidationRule;
- /**
- * Regra oficial da consulta: a data precisa estar exatamente N dias à frente de hoje.
- * A comparação ignora horas — só a data conta.
- */
- class ExactAdvanceDays implements ValidationRule
- {
- public function __construct(private int $days) {}
- public function validate(string $attribute, mixed $value, Closure $fail): void
- {
- try {
- $date = Carbon::parse($value)->startOfDay();
- } catch (\Throwable) {
- $fail(__('validation.date', ['attribute' => $attribute]));
- return;
- }
- $expected = Carbon::today()->addDays($this->days);
- if (!$date->equalTo($expected)) {
- $fail(__('validation.exact_advance_days', [
- 'days' => $this->days,
- 'date' => $expected->format('d/m/Y'),
- ]));
- }
- }
- }
|