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)) { };