【问题标题】:calculate time duration considering the dates in PHP考虑 PHP 中的日期计算持续时间
【发布时间】:2012-05-23 02:07:21
【问题描述】:

考虑到 PHP 中的日期戳,我如何计算持续时间?我在日期之间使用的日期格式是“Y-m-d H:i:s”,

我的工作代码只能计算时间之间的持续时间而不考虑日期。

下面是我的代码:

$assigned_time = "2012-05-21 22:02:00";
$completed_time= "2012-05-22 05:02:00";   

function hmsDiff ($assigned_time, $completed_time) {
    $assigned_seconds = hmsToSeconds($assigned_time);
    $completed_seconds = hmsToSeconds($completed_time);

    $remaining_seconds = $assigned_seconds - $completed_seconds;

    return secondsToHMS($remaining_seconds);
}
function hmsToSeconds ($hms) {
    $total_seconds = 0;
    list($hours, $minutes, $seconds) = explode(":", $hms);
    $total_seconds += $hours * 60 * 60;
    $total_seconds += $minutes * 60;
    $total_seconds += $seconds;

    return $total_seconds;
}

 function secondsToHMS ($seconds) {
    $minutes = (int)($seconds / 60); 
    $seconds = $seconds % 60;
    $hours = (int)($minutes / 60); 
    $minutes = $minutes % 60;

    return  sprintf("%02d", abs($hours)) . ":" . 
        sprintf("%02d", abs($minutes)) . ":" . 
        sprintf("%02d", abs($seconds));

 }

【问题讨论】:

    标签: php


    【解决方案1】:

    不完全知道你想要什么,比如:

    // prevents php error
    date_default_timezone_set ( 'US/Eastern' );
    // convert to time in seconds
    $assigned_seconds = strtotime ( $assigned_time );
    $completed_seconds = strtotime ( $completed_time );
    
    $duration = $completed_seconds - $assigned_seconds;
    
    // j gives days
    $time = date ( 'j g:i:s', $duration );
    

    【讨论】:

      【解决方案2】:

      DateTime 有一个“diff”方法,它返回一个 Interval 对象。区间对象有一个方法"format" which allows you to customize the output

      #!/usr/bin/env php
      <?php
      
      $assigned_time = "2012-05-21 22:02:00";
      $completed_time= "2012-05-22 05:02:00";   
      
      $d1 = new DateTime($assigned_time);
      $d2 = new DateTime($completed_time);
      $interval = $d2->diff($d1);
      
      echo $interval->format('%d days, %H hours, %I minutes, %S seconds');
      

      注意:如果您没有使用 5.3.0+,这里有一个很好的答案:https://stackoverflow.com/a/676828/128346

      【讨论】:

      • 感谢 wilmoore,它可以在我的本地服务器上运行,因为我使用的是 php 5.3,但在我的在线服务器上它是 5.2,在 php 5.2 环境下有什么替代方案吗?
      • 以下似乎是一个不错的答案:stackoverflow.com/a/676828/128346
      猜你喜欢
      • 2016-12-31
      • 2012-02-18
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多