Skip to content
Advertisement

script execute every day to send orders to a device

Hello i need to know if this script is correct.

The goal is to send to a device a checkout if the day of checkout is equal to today.

Is my if condition is good to compare two date ?

$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) && !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();
        }
    }
}

Advertisement

Answer

DateTime::diff() gives the total difference between two dates. So only when two dates are further apart than 24 hours they will be a day apart.

A better way to compare dates is:

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

This converts two DateTime objects to strings, containing the dates, which are then compared.

Instead of $today->format('Y-m-d') you could write: date('Y-m-d').

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement