如何在 php 中使用 diff 创建日期间隔

How to create date interval with diff in php

我想在我的帖子中创建年龄。结果必须是这样的,例如: 刚刚,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.

当我 运行 使用该代码时,结果仅在 分钟 后显示,在数小时、一天等时间不工作...

试试这个

$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";
    }
  1. 也许值得阅读一下 If / Else Conditionals 如何在编程中工作。本质上,应该任何 if 语句 return 为真,所有其他 else if 语句都将被忽略/不执行。
  2. 其次,您应该快速了解一下 String Concatenation 在 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;
$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/>";
}