Сравнение дат не работает в laravel (PHP) - PullRequest
1 голос
/ 06 ноября 2019

У меня проблема со сравнением двух дат.

Что я пытаюсь сделать:

У меня есть простое промежуточное ПО в laravel, где я проверяюЕсли одна дата выше или ниже другой.

код (Middleware \ ifTrialExpired.php):

$subscription = Auth::user()->subscription;
$date = Carbon::now()->isoFormat('DD-MM-YY');

if($date > $subscription->trial_period_end && $subscription->has_trial)
{
    return redirect()->route('settings.plan.index');
} else {
    return $next($request);
}

В чем проблема:

В этом случае дата 'trial_period_end' в моей базе данных '05 -12-19 ', текущая дата '06 -11-19'. Но я продолжаю перенаправлять меня на маршрут «settings.plan.index», но я хочу, чтобы это происходило только тогда, когда текущая дата (06-11-19) больше, чем trial_period_end (05-12-19).

Кто-нибудь знает, как это исправить?

Ответы [ 4 ]

0 голосов
/ 06 ноября 2019

Попробуйте это

 $date1 = "12-03-26"; 
 $date2 = "20-10-24"; 
 $dateTimestamp1 = date('d-m-Y',strtotime($date1)); 
 $dateTimestamp2 = date('d-m-Y',strtotime($date2));  
 if ($dateTimestamp1 > $dateTimestamp2) 
 echo "$date1 is latest than $date2"; 
 else
 echo "$date1 is older than $date2"; 

Вывод будет

 12-03-26 is latest than 20-10-24
0 голосов
/ 06 ноября 2019

Вы можете попробовать сравнение дат, используя функцию carbon gt .:https://carbon.nesbot.com/docs/#api-comparison

Попробуйте код ниже:

$subscription = Auth::user()->subscription;
$date = Carbon::now();

$sub_date  = Carbon::create($subscription->trial_period_end);   

if($date->gt($sub_date) && $subscription->has_trial)
{
    return redirect()->route('settings.plan.index');
} else {
    return $next($request);
}
0 голосов
/ 06 ноября 2019

Если вы сравниваете дату и время как строки, вы должны всегда использовать формат YYYY-MM-DD для дат, потому что любой другой формат не удастся сравнить строки.

Однакоеще лучше - не использовать сравнения строк вообще.

Класс Carbon включает методы сравнения, поэтому все превращается в объект Carbon и используется для сравнения.

Что-то вродеэто должно сработать:

$subscription = Auth::user()->subscription;
$dateNow = Carbon::now();

$trialEndDate = Carbon::createFromFormat('d-m-Y', $subscription->trial_period_end);

if($dateNow->gt($trialEndDate) && $subscription->has_trial)
{
    return redirect()->route('settings.plan.index');
} else {
    return $next($request);
}

(Примечание: это не проверено, и может потребоваться корректировка, так как на самом деле я не знаю, в каком формате хранится ваш trial_period_end).

0 голосов
/ 06 ноября 2019

Сравнить даты

Объявить две даты

$date1 = "12-03-26"; 
$date2 = "2011-10-24"; 

Использовать функцию strtotime () для преобразования даты в dateTimestamp

$dateTimestamp1 = strtotime($date1); 
$dateTimestamp2 = strtotime($date2); 

Сравнить дату отметки времени

if ($dateTimestamp1 > $dateTimestamp2) 
    echo "$date1 is latest than $date2"; 
else
    echo "$date1 is older than $date2"; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...