如何在日期和时间差异中进行自定义更改?

时间:2015-10-26 12:59:25

标签: php datetime echo difference

我希望只有当它们更接近时才会回复某些日期。

我创建了一个脚本,并且我使用了以下代码。

$now = new DateTime(null, new DateTimeZone('UTC'));
$todaydate=$now->format('Y-m-d H:i:s');
$expdate="2020-09-13 21:00:00";

function format_interval(DateInterval $interval) {
    $result = "";
    if ($interval->y) { $result .= $interval->format("%y years "); }
    if ($interval->m) { $result .= $interval->format("%m months "); }
    if ($interval->d) { $result .= $interval->format("%d days "); }
    if ($interval->h) { $result .= $interval->format("%h hours "); }
    if ($interval->i) { $result .= $interval->format("%i minutes "); }
    if ($interval->s) { $result .= $interval->format("%s seconds "); }

    return $result;
}

$exp_date = new DateTime($expdate);
$today_date = new DateTime($todaydate);

$difference = $exp_date->diff($today_date);

echo "Days left to expiry:".format_interval($difference)."</br>";

它给出了(aprox结果)

剩余天数:4年10个月18天8小时0分40秒

现在我想在2个月到期时显示这个意味着1个月30天或更短时间......

我试过

  if ("%m"<=1){
      echo "Days left to expiry:".format_interval($difference)."</br>";
  }

但它没有用?

任何帮助都会受到高度关注。

感谢。

2 个答案:

答案 0 :(得分:2)

月份有点困难,需要额外的逻辑,但您可以根据DateInterval类提供的日期来确定。

您可以像这样更改逻辑:

// Average 60 days over 2 months
if($difference->days <= 60) {
    echo "Days left to expiry:".format_interval($difference)."</br>";
}

答案 1 :(得分:1)

@steadweb

╔══════╦═══════╦════════╦═════════╦════════╗
║ ID   ║ NAME  ║ PRICE  ║  IND    ║   CD   ║
╠══════╬═══════╬════════╬═════════╬════════╣
║ 123  ║ KING  ║ 12.23  ║ 1       ║ A      ║
║ 234  ║ KONG  ║ 23.43  ║ (null)  ║ (null) ║
╚══════╩═══════╩════════╩═════════╩════════╝

是的,它有效:)