Я использую следующий код, чтобы получить разницу между двумя датами. У меня проблемы с возвратом правильного количества оставшихся дней.
<?php
$nextservicedate = FrmProDisplaysController::get_shortcode( array( 'id' => 3451 ) );
$currentdate = date("d/m/Y");
$daysremaining = $nextservicedate - $currentdate;
echo $nextservicedate. " | ";
if ( strpos($nextservicedate, 'None registered') !== false )
{
echo "None Registered";
}
elseif ($daysremaining < "0")
{
$negativedays = str_replace('-', ' ', $daysremaining);
echo $negativedays. " days overdue";
}
elseif ($daysremaining <= "30")
{
echo $daysremaining. " days (upcoming service)";
}
else
{
echo $daysremaining. " days";
}
?>
Вход
FrmProDisplaysController::get_shortcode( array( 'id' => 3451 ) )
возвращает дату из плагина WordPress Form (FormidablePro) как 30/10/2016.
Код возвращается, осталось 23 дня, которые, я полагаю, приведут его к концу этого месяца.
Я знаю, что что-то упустил, и думаю, что это как-то связано с разработкой оставшихся дней кода.
Кто-нибудь может увидеть какие-либо явные ошибки? Нужно ли объявлять $ nextservicedate, как я это сделал с $ currentdate?
Любая помощь будет принята!
С уважением
Matt
РНР Дата() возвращает строку даты, которая не может быть использована для выполнения арифметических операций с датой.
Что вам нужно сделать, это создать DateTime
дата обслуживания объекта из String с использованием createFromFormat () и создать текущий DateTime()
объект.
Тогда используйте Diff () функция DateTime
объект, чтобы найти разницу между двумя днями.
Итак, ваш код будет выглядеть примерно так:
$nextservicedate=DateTime::createFromFormat("d/m/Y",$nextservicedate);
$todaydate=new DateTime();
$difference=$nextservicedate->diff($todaydate);
Чтобы получить разницу в днях,
echo $difference->format('%R%a days');
Других решений пока нет …