2016-09-08 3 views
0

Я использую следующий код, чтобы получить разницу между двумя датами. У меня возникли проблемы с возвратом правильного количества оставшихся дней.Разница в дате не вычисляется правильно в php

<?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 плагин (FormidablePro) как 30/10/2016.

Код вернёт, осталось 23 дня, что, я считаю, относится к концу этого месяца.

Я знаю, что у меня что-то не хватает и думаю, что это, вероятно, имеет какое-то отношение к разработке дней, оставшихся частью кода.

Может ли кто-нибудь увидеть какие-либо вопиющие ошибки? Нужно ли объявлять $ nextservicedate, как я сделал с $ currentdate?

Любая помощь будет получена очень быстро!

С уважением

Matt

+0

Дайте нам свои обе даты! – Noman

ответ

1

date() возвращает РНР строку даты, которая не может быть использована для выполнения арифметических операций на сегодняшний день.

Что вам нужно сделать, это создать DateTime объект службы даты из строки с использованием createFromFormat() и создать текущий объект DateTime().

Затем используйте diff() функцию DateTime объект, чтобы найти разницу между двумя днями.

Так что ваш код будет выглядеть примерно так,

$nextservicedate=DateTime::createFromFormat("d/m/Y",$nextservicedate); 
$todaydate=new DateTime(); 
$difference=$nextservicedate->diff($todaydate); 

Чтобы получить разницу в днях,

echo $difference->format('%R%a days'); 
+0

Спасибо @alok Patel –

+0

Добро пожаловать @MatthewBarraud –

Смежные вопросы