3

PHPの日付スタンプを考慮して期間を計算するにはどうすればよいですか?日付の間に使用した日付形式は「YmdH: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));

 }
4

2 に答える 2

7

DateTimeには、Intervalオブジェクトを返す「diff」メソッドがあります。間隔オブジェクトには、出力をカスタマイズできるメソッド「format」があります

#!/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に適切な回答があります。

于 2012-05-23T02:23:03.067 に答える
2

あなたが何を望んでいるのか完全にはわからない、次のようなものはどうですか?

// 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 );
于 2012-05-23T02:14:39.483 に答える