У меня странная проблема. Я сделаю это:
$expdatek = explode(".",$datumk);
$expdated = explode(".",$datumd);
if($expdatek[2] == $expdated[2]){
$monthk = intval(ltrim($expdatek[1], '0'));
$monthd = intval(ltrim($expdated[1], '0'));
$interval = $monthd - $monthk;
}
Переменные $ datumk и $ datumd были представлены в следующем формате: «26.02.2016».
Я пытаюсь доказать, совпадает ли год, и если это произойдет, я просто хочу получить разницу между двумя месяцами.
По какой-то причине я не получаю никакого выхода из интервала $. Он просто не делает арифметическую операцию. Если я сделаю эхо, как: «echo $ monthd» и «echo $ monthk». Он правильно показывает месяцы без начального нуля, но он не выполняет арифметическую операцию.
Зачем?
Я думал, что PHP изменяет формат переменной на то, что ему нужно для выполнения этих операций. Я учу PHP на практике, и он всегда работал, даже сейчас. Я не понимаю это.
Есть намеки?
Если это дата, попробуйте использовать DateTime библиотека для выполнения арифметической операции. Метод DateTime :: дифф вычисляет разницу между двумя датами:
$date1 = \DateTime::createFromFormat("d.m.Y" , "27.03.2016");
$date2 = \DateTime::createFromFormat("d.m.Y" , "26.02.2016");
$diff = $date1->diff($date2 , true);
echo $diff->format("months: %m. Total days: %a");
Объект DateTime может предоставить строгое сравнение:
$date1 = \DateTime::createFromFormat("d.m.Y" , "26.02.2016");
$date2 = \DateTime::createFromFormat("d.m.Y" , "26.02.2016");
if ($date1 == $date2)
{
echo 'they\'re equals';
}
Если у вас есть какие-либо другие проверки, которые необходимы между обеими датами, можете ли вы DateTime :: формат:
$date1 = \DateTime::createFromFormat("d.m.Y" , "26.02.2016");
$date2 = \DateTime::createFromFormat("d.m.Y" , "26.02.2016");
if ($date1->format("m") == $date2->format("m"))
{
echo 'the months are equals';
}
Итак, если вам нужно сделать немного калькуляции:
$expdatek = \DateTime::createFromFormat("d.m.Y" , $datumk);
$expdated = \DateTime::createFromFormat("d.m.Y" , $datumd);
if($expdatek->format('Y') == $expdated->format('Y')){
$interval = $expdatek->diff($expdated , true);
var_dump($interval);
}
Код был в порядке. Проблема заключалась в том, что переменная была определена ранее в функции в виде строки. Я объявил об этом заново, но у него все еще были некоторые проблемы. Переименуй, решил проблему. спасибо вообще.