Ошибка «Не удалось разобрать строку времени» в моей функции, чтобы найти разницу между двумя датами PHP - PullRequest
0 голосов
/ 14 декабря 2018

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

 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: Uncaught Исключение: DateTime :: __ construct (): Не удалось проанализировать строку времени (12-14-18) впозиция 0 (1): неожиданный символ в /workspace/Main.php:7 трассировки стека:

0 /workspace/Main.php(7): конструкция DateTime -> __ ('12 -14-18 ')

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

2 {main} добавлено в / workspace /Main.php на линии 7 "

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

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

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 голосов
/ 14 декабря 2018

Основная проблема в действительности заключается в бессмысленном использовании функций 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 голосов
/ 14 декабря 2018

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

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

до тех пор, пока не вернетесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...