【问题标题】:display hours and minutes after calculating difference between 2 unix times php在计算 2 个 unix 乘以 php 之间的差异后显示小时和分钟
【发布时间】:2013-11-13 21:48:01
【问题描述】:

在计算 2 个不同的 unix 时间戳之间的差异后,我无法显示小时和分钟。假设我有这 2 个 unix 时间戳:

1) 1384327800
2) 1384300800

区别是

27000

如果我除以 27000/3600 我得到

7.5

但我想要的是显示

7:30

7 hours and 30 minutes

最好的方法是什么?

【问题讨论】:

标签: php


【解决方案1】:

你只需要做一点计算:

$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');

【讨论】:

  • @user2835653:np,很高兴我能帮上忙。
  • 请注意,有时它会不正确地复数时间分量。
  • This example 可用于正确复数时间分量;像这样demo
【解决方案2】:

算法方式(没有任何函数/库的自动计算):

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

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

【讨论】:

    【解决方案3】:

    看看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;
    

    【讨论】:

    • 此代码无效。 %a 被使用,%d 应该是。如果差异为 10 years,则将其替换为空字符串 (0 years => '')。如果差异为11 years,则替换为11 year (1 years => 1 year)。
    【解决方案4】:

    完全按照描述的完整长格式:

    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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-26
      • 2020-11-25
      • 2013-05-28
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多