Как создать интервал даты с diff в php - PullRequest
0 голосов
/ 11 мая 2018

Я хочу создать возраст в моем сообщении. результат должен быть таким, например: Только сейчас 1 минут назад, 1 часов назад, 1 дней назад, 1 месяцев назад & 1 Лет назад.

   $datetime1 = date_create($value['date']);
    $datetime2 = date_create("now");
    $diff=date_diff($datetime1,$datetime2);
    if($diff->i >0){
      $final_date = $diff->format("%I Minutes Ago");
    }else if($diff->h >0){
      $final_date = $diff->format("%H Hours Ago");
    }else if($diff->y >0){
      $final_date = $diff->format("%Y Years Ago");
    }else if($diff->m >0){
      $final_date = $diff->format("%M Months Ago");
    }else if($diff->d >0){
      $final_date = $diff->format("%D Days Ago");
    } else {
        $final_date = "Just Now";
    }

моя дата с $value['date'] такая 2018-05-11 07: 38: 47 .

Когда я запускаю этот код, результат отображается только в Минутах , не работает часами, днем ​​и т. Д ...

Ответы [ 3 ]

0 голосов
/ 11 мая 2018
  1. Возможно, стоит немного прочесть о том, как If / Else Conditionals работает в программировании.По сути, должен любой оператор if возвращать значение true, а все остальные операторы else if игнорируются / не выполняются.
  2. Во-вторых, вы должны быстро взглянуть на то, как Конкатенация строк работает в PHP.

Чтобы помочь вам, я разработал рабочий пример, используя методы, которые я упомянул выше:

// DATE
$value['date'] = "2018-05-11 07:38:47";

// HTML VARIABLE
$final_date = '';

// DATE OBJECTS
$datetime1 = date_create($value['date']);
$datetime2 = date_create("now");

// DATE OBJECTS DIFFERENCE
$diff = date_diff($datetime1, $datetime2);

// IF DIFFERENCE IS LESS THAN ONE MINUTE, DISPLAY "Just Now"
if($diff->i == 0)
{
    $final_date = $diff->format("Just Now");
}
else
{
    // ELSE, CONCATENATE STRING FOR EACH VALID DIFFERENCE
    if($diff->i > 0)
    {
        $final_date = $diff->format("%I Minutes Ago, ");
    }

    if($diff->h > 0)
    {
        $final_date .= $diff->format("%H Hours Ago, ");
    }

    if($diff->y > 0)
    {
        $final_date .= $diff->format("%Y Years Ago, ");
    }

    if($diff->m > 0)
    {
        $final_date .= $diff->format("%M Months Ago, ");
    }

    if($diff->d > 0)
    {
        $final_date .= $diff->format("%D Days Ago, ");
    }

    // REMOVE THE FINAL ", " FROM THE STRING
    $final_date = substr($final_date, 0, -2);
}

// DISPLAY RESULT
echo $final_date;
0 голосов
/ 11 мая 2018
$datetime1 = date_create($value['date']);

$datetime2 = date_create("now");
$diff = date_diff($datetime1, $datetime2);
if ($diff->i > 0) {
   echo  $min = $diff->format("%I Minutes Ago")."<br/>";
}  if ($diff->h > 0) {
    echo $hr = $diff->format("%H Hours Ago")."<br/>";
}  if ($diff->y > 0) {
   echo $yr = $diff->format("%Y Years Ago")."<br/>";
}  if ($diff->m > 0) {
    echo $mn = $diff->format("%M Months Ago")."<br/>";
}  if ($diff->d > 0) {
    echo $day = $diff->format("%D Days Ago")."<br/>";
} else {
    echo $just = "Just Now"."<br/>";
}
0 голосов
/ 11 мая 2018

попробуйте

$interval = $datetime1->diff($datetime2);
echo $interval->format('%Y years %m months %d days %H hours %i minutes %s seconds');

или, если вам нужно отдельно, сначала проверьте год

if($diff->y >0){
      $final_date = $diff->format("%Y Years Ago");
    }
 else if($diff->m >0){
      $final_date = $diff->format("%M Months Ago");
    }
 else if($diff->d >0){
      $final_date = $diff->format("%D Days Ago");
    }
 else if($diff->h >0){
      $final_date = $diff->format("%H Hours Ago");
    }
else if($diff->i >0){
      $final_date = $diff->format("%I Minutes Ago");
    }
else {
        $final_date = "Just Now";
    }
...