Неподдерживаемые типы операндов: Illuminate\Support\Carbon - Illuminate\Support\Carbon

Я сделал этот метод для отправки временного кода на номер мобильного телефона пользователя для проверки его учетной записи:

public function signInWithToken()
    {
        if (Session::has('nextStep') && Session::has('foundUser')) {
            $user = User::where('usr_mobile_phone', Session::get('foundUser'))->first();
            if (Session::has('codeSent')){
                $nowTime = now();
                $sentTime = Session::get('codeSent');
                if ($nowTime >= $sentTime){
                    $user->activeCode()->delete();
                    Session::forget('codeSent');
                }
            }else{
                $code = ActiveCode::generateCode($user);
                $user->notify(new ActiveCodeNotification($code, Session::get('foundUser')));
                Session::put('codeSent', now()->addMinutes(10));
            }

            return view('frontend.auth.token');
        }else{
            abort(404);
        }
    }

Таким образом, в первый раз генерируется код, и сессия codeSent также будет отправлена, и ее значение на 10 минут превышает текущее время.

Затем мне также нужно проверить, была ли эта сессия уже отправлена, тогда она должна вычесть $nowTime из $sentTime, чтобы узнать, был ли код сгенерирован более 10 минут назад и является ли он слишком старым: (поэтому код должен быть удален из БД и сессию надо забыть)

$nowTime = now();
$sentTime = Session::get('codeSent');
if ($nowTime >= $sentTime){
    $user->activeCode()->delete();
    Session::forget('codeSent');
}

Но этот код не запустится и вернет эту ошибку:

Неподдерживаемые типы операндов: Illuminate\Support\Carbon - Illuminate\Support\Carbon

Значение nowTime вар:

Значение sentTime var (установите currentTime + 10 минут как время истечения сеанса codeSent):

И я знаю, что это потому, что эти значения переменных sentTime && nowTime нельзя каким-то образом вычесть друг из друга.

Но на самом деле не знаю, как правильно выполнить эту проверку!

Так что, если вы знаете, пожалуйста, дайте мне знать, я был бы очень признателен за любую идею или предложение от вас, ребята...

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
92
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

вы можете использовать Carbon diffInSeconds, как код ниже (непроверенный) сначала нужно разобрать раз с углеродом затем используйте это:

$totalDuration = $finishTime->diffInSeconds($startTime);
// 21

Знаете ли вы, как показать это значение $totalDuration в реальном времени на лезвии, чтобы пользователь видел, сколько секунд осталось?

Pouya 21.12.2022 08:13

вам нужно использовать javascript или jquery, чтобы показать оставшееся время.

zohrehda 21.12.2022 08:20

@Pouya, вы можете вернуть его с помощью представления ('frontend.someView', compact ('totalDuration')) и использовать jQuery, чтобы показать его / продолжать запрашивать его или статический в html

KGG 21.12.2022 08:20

Я задал вопрос об этом здесь: stackoverflow.com/questions/74699048/…

Pouya 21.12.2022 08:30

Если вам нужно найти разницу в минутах Вы можете использовать его:

$nowTime = now(); 
$sentTime = Session::get('codeSent'); 
if ($nowTime->diffInMinutes($sentTime)>10)
{ $user->activeCode()->delete(); Session::forget('codeSent'); }

Спасибо, у меня есть еще одна проблема, связанная с этим, которая также находится на награде, пожалуйста, проверьте ее: я задал вопрос об этом здесь: stackoverflow.com/questions/74699048/…

Pouya 21.12.2022 08:31

@zorehda Привет, приятель, ты удалил свой ответ на вопрос о награде, я собирался принять его, но теперь я не вижу от тебя ответа на этот вопрос!

Pouya 24.12.2022 07:33

ты его использовал? это сработало?

zohrehda 24.12.2022 08:24

Да, я внес в него некоторые изменения, и само время setInterval отлично работает, но у меня проблема с контроллером, который не удаляет сеанс codeSent. Вы можете опубликовать свой ответ еще раз

Pouya 24.12.2022 08:27

я опубликую это снова

zohrehda 24.12.2022 08:29

Другие вопросы по теме