簡體   English   中英

在計算2個unix次php之間的差異后顯示小時和分鍾

[英]display hours and minutes after calculating difference between 2 unix times php

在計算2個不同的unix時間戳之間的差異后,我一直無法顯示小時和分鍾。 可以說我有這兩個unix時間戳:

1) 1384327800
2) 1384300800

不同的是

27000

如果我除了27000/3600我得到

7.5

但我想要的是顯示

7:30

要么

7 hours and 30 minutes

什么是最好的方法呢?

所有你需要做一點計算:

$diff = 27000;

$hour = floor($diff / 3600);
$min  = floor(($diff - $hour * 3600) / 60);
$sec = $diff - $hour * 3600 - $min * 60;

echo "$hour hours, $min minutes, $sec seconds";

或者使用DateTime類嘗試:

$dt1 = new DateTime('@1384327800');
$dt2 = new DateTime('@1384300801');
$diff = $dt1->diff($dt2);
echo $diff->format('%h hours, %i minutes, %s seconds');

算法方式(不使用任何函數/庫自動計算):

$diff_in_minutes = ($timestamp1 - $timestamp2) / 60;
$minutes = $diff_in_minutes % 60;
$hours = ($diff_in_minutes - $minutes) / 60;

$diff_string = $hours . ':' . $minutes;

查看DateTime()DateInterval::format()

$dt1 = new DateTime('@1384327800');
$dt2 = new DateTime('@1384300800');
$diff = $dt1->diff($dt2);
echo $diff->format('%h hours and %i minutes');

如果需要,最后一點可以從字符串中刪除不必要的時間段。

$elapsed = $diff->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds');
$elapsed = str_replace(array('0 years,', ' 0 months,', ' 0 days,',  ' 0 hours,', ' 0 minutes,'), '', $elapsed);
$elapsed = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ',  ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed);
echo $elapsed;

完全按照描述完全長格式化:

date_default_timezone_set('UTC');
$timestamp1 = new DateTime('@1384327800');
$timestamp2 = new DateTime('@1384300800');
$diff = $timestamp1->diff($timestamp2);
$timemap = array('y' => 'year',
                 'm' => 'month',
                 'd' => 'day',
                 'h' => 'hour',
                 'i' => 'minute',
                 's' => 'second');
$timefmt = array();

foreach ($timemap as $prop => $desc) {
    if ($diff->$prop > 0) {
        $timefmt[] = ($diff->$prop > 1) ? "{$diff->$prop} {$desc}s" : "{$diff->$prop} $desc";
    }
}

$diffstr = (count($timefmt) > 1)
    ? $diff->format(sprintf('%s and %s',
          implode(', ', array_slice($timefmt, 0, -1)), end($timefmt)))
    : end($timefmt);
var_dump($diffstr);

這給了我以下內容:

string(22) "7 hours and 30 minutes"

暫無
暫無

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

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