oop — Ошибка «Не удалось проанализировать строку времени» в моей функции, чтобы найти разницу между двумя датами Переполнение стека

Я не сталкивался с подобной ошибкой раньше, до настоящего момента, и я не смог найти много об этом из исследования ошибки. Почему это случилось? И в моем конкретном случае, что я делаю неправильно, что вызывает эту ошибку?

 function datediff($date1, $date2){

$date1 = date('m-d-y');
$date2 = date('m-d-y');  //To tell function these are dates

$sdate = new DateTime($date1); //error happens here
$edate = new DateTime($date2); //I did it this way because I wanted
//it to be dynamic, not just a static
//date that had to be entered
//within the function.

$interval = $sdate->diff($edate);   //Set difference = to variable

echo "Difference : " . $interval->m . " months, " . $interval->d." days, ".$interval->y." years ";

}
datediff('1-21-1991', '12-14-2018');  //running function with my own dates

Я уже знаю более простой способ сделать это, но он не динамический и в ООП-подходе, который я ищу, чтобы он был обоими этими вещами. Любое понимание?

РЕДАКТИРОВАТЬ: Это точная ошибка возвращается:

«Неустранимая PHP-ошибка: необработанное исключение: DateTime :: __ construct (): не удалось проанализировать строку времени (12-14-18) в позиции 0 (1): неожиданный символ в /workspace/Main.php:7
Трассировки стека:

0 /workspace/Main.php(7): DateTime -> __ construct (’12 -14-18 ‘)

1 /workspace/Main.php(13): datediff (’12 -14-18 ‘, ’12 -14-18’)

2 {главная}
добавляется в /workspace/Main.php в строку 7 «

-3

Решение

Главная проблема — ваше бессмысленное использование date функции, и что форматы даты не поддерживаются / не ожидаются. Что вы хотите DateTime::createFromFormat явно сказать DateTime в каком формате ваши даты:

function datediff($date1, $date2){
$sdate = DateTime::createFromFormat('j-m-Y', $date1);
$edate = DateTime::createFromFormat('j-m-Y', $date2);
$interval = $sdate->diff($edate);
echo "Difference : ", $interval->m, " months, ", $interval->d, " days, ", $interval->y, " years ";
}

datediff('1-21-1991', '12-14-2018');
0

Другие решения

это формат даты, который вы хотите разобрать неверно.
Проверь это:
http://php.net/manual/en/datetime.formats.php
Я предлагаю вам перейти от M-D-Y в формате Y-M-D.
например, вы можете использовать эту функцию для преобразования данных

function convertDate($date){
$date=explode("-",$date);
return $date[2]."-".$date[1]."-".$date[0];
}

function datediff($date1, $date2){

$sdate = new DateTime(convertDate($date1)); //error happens here
$edate = new DateTime(convertDate($date2));
...
0

Попробуйте этот код

    $date1=date_create("2018-12-13");
$date2=date_create("2013-12-14");
$diff=date_diff($date1,$date2);
echo $diff->format("%R%a days");

пока не вернется паплу

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector