скрипт выполняется каждый день для отправки заказов на устройство

php

#php

Вопрос:

Здравствуйте, мне нужно знать, корректен ли этот скрипт.

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

Является ли мое условие if хорошим для сравнения двух дат?

 $today = new DateTime(); // ex :20-09-2021

foreach($orders as $order){
    $checkout = new Checkout();
    $checkout->get($order['id']);
    $delivery_date = new DateTime($checkout->day);
    $restaurant = $checkout->getRestaurant();
    //is the some date
    if($delivery_date->diff($today)->days === 0 ) {
        if (isset($restaurant->token) amp;amp; !empty($restaurant->token)) {
            if ($popina_response = Foxorders_Popina::sendNewOrder($checkout)) {
                $checkout->popina_notified = 1;
                $checkout->popina_response = $popina_response;
            }
            if (($popina_response == '{"ok":true}') || ($popina_response == 'Shop not found') || ($popina_response == '{"error":"Shop not found"}')) {
                $checkout->popina_retry = 0;
            }
            $checkout->save();
        }
    }
}
 

Комментарии:

1. Что $today содержит? Это не определено в вопросе. Вы это объявили?

2. спасибо за ваш ответ,$today содержит сегодняшнюю дату

3. Хорошо, это хорошо, просто хотел убедиться.

4. Да, это хороший способ сравнить две даты.

5. Ах, я вижу, что мое предположение о том, что вы сделали это правильно, неверно. DateTime::diff() дает общую разницу между двумя датами. Поэтому, только когда две даты находятся дальше друг от друга, чем 24 часа, они будут разделены на день.

Ответ №1:

DateTime::diff() дает общую разницу между двумя датами. Поэтому, только когда две даты находятся дальше друг от друга, чем 24 часа, они будут разделены на день.

Лучший способ сравнить даты:

 if (($delivery_date->format('Y-m-d') == $today->format('Y-m-d')) {
    .....
}
 

Это преобразует два DateTime объекта в строки, содержащие даты, которые затем сравниваются.

Вместо $today->format('Y-m-d') вы могли бы написать: date('Y-m-d') .

Ответ №2:

Если ваш сервер поддерживает PHP 8, вы можете сделать это:

 $today = date('d-m-Y');
$delivery_date = '20-09-2021';

if (str_contains($today, $delivery_date)) { };
 

ДЕМОНСТРАЦИЯ