【问题标题】:return difference of two dates in PHP [duplicate]在PHP中返回两个日期的差异[重复]
【发布时间】:2013-08-07 10:28:55
【问题描述】:

我需要将过去/未来日期与 PHP 中的当前日期进行比较,并以“4 小时前”、“2 天 3 小时前”或“5 小时前”格式显示差异。可选择采用“-4h”(不好)或“4h”(好的)格式。

举个例子:

x = $expiry_date - $todays_date

如果结果是肯定的,例如。 $expiry_date 是未来 4 小时,x = "4 hours to go" 或 "4 hrs"。如果结果是否定的,例如“4 小时前”或“-4hrs”。

任何其他类似的结果格式都可以。

有什么帮助吗?

【问题讨论】:

标签: php date strtotime


【解决方案1】:

参考Dates diff in PHP

$date1 = "2013-08-11";
$date2 = "2012-07-12";

$diff = abs(strtotime($date2) - strtotime($date1));

$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));

printf("%d years, %d months, %d days\n", $years, $months, $days);

或者

$date1 = new DateTime("2007-03-24");
$date2 = new DateTime("2009-06-26");
$interval = $date1->diff($date2);
echo "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "; 

//or simply
//echo "difference " . $interval->days . " days ";

【讨论】:

  • 谨防使用$time += 24*60*60 之类的计算来操纵时间戳。这会产生夏令时和其他时区异常的问题。请改用$time = strtotime('+1 day', $time) 之类的方法。
  • 很高兴帮助@TomaszRykala :)
【解决方案2】:

您可以使用 Carbon 库来做到这一点。 它会是这样的:

$now = Carbon::now();
$then = Carbon::create(2013, 8, 8, 23, 26, 11);
echo $now->diffForHumans($then);     

输出将是人类可读的字符串,就像您正在寻找的那样。

【讨论】:

    【解决方案3】:

    this question

    该变量将包含以秒为单位的差异,然后您可以根据需要将其除以得到分钟/小时/天等。例如除以 60 得到分钟,再除以 60 得到小时等。然后根据需要进行一些简单的值检查以格式化。

    【讨论】:

      猜你喜欢
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 2017-04-29
      相关资源
      最近更新 更多