316

PHPで2つの日時の分差を計算する方法は?

4

21 に答える 21

457

上記の回答は、古いバージョンの PHP に対するものです。PHP 5.3 が標準になった現在、日付の計算には DateTime クラスを使用します。例えば。

$start_date = new DateTime('2007-09-01 04:10:58');
$since_start = $start_date->diff(new DateTime('2012-09-11 10:25:00'));
echo $since_start->days.' days total<br>';
echo $since_start->y.' years<br>';
echo $since_start->m.' months<br>';
echo $since_start->d.' days<br>';
echo $since_start->h.' hours<br>';
echo $since_start->i.' minutes<br>';
echo $since_start->s.' seconds<br>';

$since_start はDateIntervalオブジェクトです。days プロパティが使用できることに注意してください (DateTime クラスの diff メソッドを使用して DateInterval オブジェクトを生成したため)。

上記のコードは次を出力します。

1837日合計
5年
0ヶ月
10日
6時間
14分
2秒

合計分数を取得するには:

$minutes = $since_start->days * 24 * 60;
$minutes += $since_start->h * 60;
$minutes += $since_start->i;
echo $minutes.' minutes';

これは出力されます:

2645654 分

これは、2 つの日付の間に経過した実際の分数です。DateTime クラスは、「古い方法」では考慮されない夏時間 (タイムゾーンに応じて) を考慮します。日付と時刻に関するマニュアルを読むhttp://www.php.net/manual/en/book.datetime.php

于 2012-09-12T07:11:30.617 に答える
361

答えは次のとおりです。

$to_time = strtotime("2008-12-13 10:42:00");
$from_time = strtotime("2008-12-13 10:21:00");
echo round(abs($to_time - $from_time) / 60,2). " minute";
于 2008-12-13T13:36:18.047 に答える
106

未来の最多から過去の最多を引き、60で割ります。

時間は Unix 形式で行われるため、秒数を示す単なる大きな数字です。January 1, 1970, 00:00:00 GMT

于 2008-12-13T13:23:44.860 に答える
37
<?php
$date1 = time();
sleep(2000);
$date2 = time();
$mins = ($date2 - $date1) / 60;
echo $mins;
?>
于 2008-12-13T15:49:50.603 に答える
17

それは私のプログラムで動作しました。私は使用しています。ここでマニュアルをdate_diff確認できます。date_diff

$start = date_create('2015-01-26 12:01:00');
$end = date_create('2015-01-26 13:15:00');
$diff=date_diff($end,$start);
print_r($diff);

望む結果が得られます。

于 2015-07-09T15:43:16.703 に答える
13

私は自分のブログ サイトの 1 つ (過去の日付とサーバーの日付の違い) のためにこの関数を作成しました。このような出力が得られます

「49 秒前」「20 分前」「21 時間前」など

渡された日付とサーバーの日付の差を取得する関数を使用しました。

<?php

//Code written by purpledesign.in Jan 2014
function dateDiff($date)
{
    $mydate= date("Y-m-d H:i:s");
    $theDiff="";
    //echo $mydate;//2014-06-06 21:35:55
    $datetime1 = date_create($date);
    $datetime2 = date_create($mydate);
    $interval = date_diff($datetime1, $datetime2);
    //echo $interval->format('%s Seconds %i Minutes %h Hours %d days %m Months %y Year    Ago')."<br>";
    $min=$interval->format('%i');
    $sec=$interval->format('%s');
    $hour=$interval->format('%h');
    $mon=$interval->format('%m');
    $day=$interval->format('%d');
    $year=$interval->format('%y');
    if($interval->format('%i%h%d%m%y')=="00000") {
        //echo $interval->format('%i%h%d%m%y')."<br>";
        return $sec." Seconds";
    } else if($interval->format('%h%d%m%y')=="0000"){
        return $min." Minutes";
    } else if($interval->format('%d%m%y')=="000"){
        return $hour." Hours";
    } else if($interval->format('%m%y')=="00"){
        return $day." Days";
    } else if($interval->format('%y')=="0"){
        return $mon." Months";
    } else{
        return $year." Years";
    }    
}
?>

「date.php」と仮定してファイルとして保存します。このように別のページから関数を呼び出します

<?php
 require('date.php');
 $mydate='2014-11-14 21:35:55';
 echo "The Difference between the server's date and $mydate is:<br> ";
 echo dateDiff($mydate);
?>

もちろん、関数を変更して 2 つの値を渡すこともできます。

于 2014-06-07T19:21:49.783 に答える
11

私はこれがあなたを助けると思います

function calculate_time_span($date){
    $seconds  = strtotime(date('Y-m-d H:i:s')) - strtotime($date);

        $months = floor($seconds / (3600*24*30));
        $day = floor($seconds / (3600*24));
        $hours = floor($seconds / 3600);
        $mins = floor(($seconds - ($hours*3600)) / 60);
        $secs = floor($seconds % 60);

        if($seconds < 60)
            $time = $secs." seconds ago";
        else if($seconds < 60*60 )
            $time = $mins." min ago";
        else if($seconds < 24*60*60)
            $time = $hours." hours ago";
        else if($seconds < 24*60*60)
            $time = $day." day ago";
        else
            $time = $months." month ago";

        return $time;
}
于 2014-10-31T05:26:06.537 に答える
8
function date_getFullTimeDifference( $start, $end )
{
$uts['start']      =    strtotime( $start );
        $uts['end']        =    strtotime( $end );
        if( $uts['start']!==-1 && $uts['end']!==-1 )
        {
            if( $uts['end'] >= $uts['start'] )
            {
                $diff    =    $uts['end'] - $uts['start'];
                if( $years=intval((floor($diff/31104000))) )
                    $diff = $diff % 31104000;
                if( $months=intval((floor($diff/2592000))) )
                    $diff = $diff % 2592000;
                if( $days=intval((floor($diff/86400))) )
                    $diff = $diff % 86400;
                if( $hours=intval((floor($diff/3600))) )
                    $diff = $diff % 3600;
                if( $minutes=intval((floor($diff/60))) )
                    $diff = $diff % 60;
                $diff    =    intval( $diff );
                return( array('years'=>$years,'months'=>$months,'days'=>$days, 'hours'=>$hours, 'minutes'=>$minutes, 'seconds'=>$diff) );
            }
            else
            {
                echo "Ending date/time is earlier than the start date/time";
            }
        }
        else
        {
            echo "Invalid date/time data detected";
        }
}
于 2015-01-28T07:05:47.913 に答える
0

非常に多くの解決策を見つけましたが、正しい解決策は得られませんでした。しかし、議事録を見つけるためのコードをいくつか作成しましたので、確認してください。

<?php

  $time1 = "23:58";
  $time2 = "01:00";
  $time1 = explode(':',$time1);
  $time2 = explode(':',$time2);
  $hours1 = $time1[0];
  $hours2 = $time2[0];
  $mins1 = $time1[1];
  $mins2 = $time2[1];
  $hours = $hours2 - $hours1;
  $mins = 0;
  if($hours < 0)
  {
    $hours = 24 + $hours;
  }
  if($mins2 >= $mins1) {
        $mins = $mins2 - $mins1;
    }
    else {
      $mins = ($mins2 + 60) - $mins1;
      $hours--;
    }
    if($mins < 9)
    {
      $mins = str_pad($mins, 2, '0', STR_PAD_LEFT);
    }
    if($hours < 9)
    {
      $hours =str_pad($hours, 2, '0', STR_PAD_LEFT);
    }
echo $hours.':'.$mins;
?>

01:02 のように 01 時間 02 分など、時間と分で出力します。

于 2019-06-05T09:45:20.517 に答える