Я не сталкивался с подобной ошибкой раньше, до настоящего момента, и я не смог найти много об этом из исследования ошибки. Почему это случилось? И в моем конкретном случае, что я делаю неправильно, что вызывает эту ошибку?
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 «
Главная проблема — ваше бессмысленное использование 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');
это формат даты, который вы хотите разобрать неверно.
Проверь это:
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));
...
Попробуйте этот код
$date1=date_create("2018-12-13");
$date2=date_create("2013-12-14");
$diff=date_diff($date1,$date2);
echo $diff->format("%R%a days");
пока не вернется паплу