簡體   English   中英

如何使用date_diff輸出“X年,Y個月和Z天”?

[英]How to output "X years, Y months and Z days" using date_diff?

如何使用PHP創建人類可讀的日期差異字符串?

例子:

  • X 天
  • X 個月
  • X 天和 Y 個月
  • X 年、Y 個月和 Z 天

date_diff似乎不支持這一點,至少在所需的細節中不支持。

該函數需要兩個時間戳並將它們轉換為可讀的格式。

  • 它僅返回> 0的部分(年/月/日)
  • 它考慮了年、月和日的單數和復數
  • 它與",""and" 連接,具體取決於顯示的項目數

例子:

  • 1天前
  • 3天前
  • 1 個月零 3 天前
  • 3 個月零 1 天前
  • 1 年零 5 天前
  • 2 年 10 個月零 16 天前
  • 2 年零 1 天前

public static function FormatTimeSpan($time1, $time2)
{
    $diff = date_diff(new DateTime(date('Y-m-d H:i:s', $time1)), new DateTime(date('Y-m-d H:i:s', $time2)));

    $items = [ ];
    if ($diff->y > 0) $items[] = $diff->y == 1 ? '1 year' : $diff->y . ' years';
    if ($diff->m > 0) $items[] = $diff->m == 1 ? '1 month' : $diff->m . ' months';
    if ($diff->d > 0) $items[] = $diff->d == 1 ? '1 day' : $diff->d . ' days';
    if (count($items) == 0) $items[] = '0 days';

    $last = array_pop($items);
    return count($items) == 0 ? $last : implode(', ', $items) . ' and ' . $last;
}

我前段時間做了一個功能。

/**
 * Calculate the time between two dates
 * If the second date is not specified it takes the current day
 * @author rsalcedo
 * @param date ("Y-m-d") (aaaa-mm-dd) $from
 * @param date ("Y-m-d") (aaaa-mm-dd) $to
 */
function years_months_days($from,$to="") {
    try {
        $myFrom = new DateTime($from);
        $myAcarreo = 0;
        if ($to=="" || null)
            $to=date("Y-m-d");
            $myTo = new DateTime($to);
            $diff_year = $myTo->format("Y") - $myFrom->format("Y") ;
            $diff_mnth = $myTo->format("m") - $myFrom->format("m") ;
            $diff_days = $myTo->format("d") - $myFrom->format("d") ;

            if ($diff_days<0){
                $diff_days = $diff_days + 30;
                $myAcarreo = -1;
            }
            $diff_mnth = $diff_mnth + $myAcarreo;
            $myAcarreo = 0;
            if ($diff_mnth<0){
                $diff_mnth = $diff_mnth + 12;
                $myAcarreo = -1;
            }
            $diff_year = $diff_year + $myAcarreo;
            return array($diff_year,$diff_mnth,$diff_days);
    } catch (Exception $e) {
        echo $e;
    }
}

你可以這樣使用:

list($edad,$edadMes,$edadDias) = years_months_days("1979-09-12");
echo "$edad years, $edadMes months, $edadDias days.";

list($edad,$edadMes,$edadDias) = years_months_days("1979-09-12","2008-07-18");
echo "$edad years, $edadMes months, $edadDias days.";

歡迎改進!

試試這個,這是經過測試的。

$date1 = date_create("2017-11-27");
$date2 = date_create("2018-12-29");
$diff=date_diff($date1,$date2);
$months = $diff->format("%m months");
$years = $diff->format("%y years");
$days = $diff->format("%d days");

echo $years .' '.$months.' '.$days;

輸出是:

1 years 1 months 2 days

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM