datetime %a - PHPで2つの日付間の時間数を計算する




diff day_diff (12)

2つの日付の時間差を計算するにはどうすればよいですか?

例えば:

day1=2006-04-12 12:30:00
day2=2006-04-14 11:30:00

この場合、結果は47時間になるはずです。


Answers

UNIXのタイムスタンプを渡すには、この表記法を使用します

$now        = time();
$now        = new DateTime("@$now");

2つの日付(datetimes)の間の正しい時間数を得るための最も簡単な方法は、夏時間の変更であっても、UNIXのタイムスタンプの違いを使用することです。 UNIXのタイムスタンプは、1970-01-01T00:00:00 UTCから経過した秒数で、うるう秒を無視しています(これはおそらくこの精度が必要ないため、うるう秒を考慮に入れるのが非常に難しいためです)。

オプションのタイムゾーン情報を含む日時文字列をUnixタイムスタンプに変換する最も柔軟な方法は、 DateTimeオブジェクトを作成し(オプションで、コンストラクタの2番目の引数としてDateTimeZoneを使用)、 getTimestampメソッドを呼び出します。

$str1 = '2006-04-12 12:30:00'; 
$str2 = '2006-04-14 11:30:00';
$tz1 = new DateTimeZone('Pacific/Apia');
$tz2 = $tz1;
$d1 = new DateTime($str1, $tz1); // tz is optional,
$d2 = new DateTime($str2, $tz2); // and ignored if str contains tz offset
$delta_h = ($d2->getTimestamp() - $d1->getTimestamp()) / 3600;
if ($rounded_result) {
   $delta_h = round ($delta_h);
} else if ($truncated_result) {
   $delta_h = intval($delta_h);
}
echo "Δh: $delta_h\n";

あなたの答えは:

round((strtotime($day2) - strtotime($day1))/(60*60))


//Calculate number of hours between pass and now
$dayinpass = "2013-06-23 05:09:12";
$today = time();
$dayinpass= strtotime($dayinpass);
echo round(abs($today-$dayinpass)/60/60);

これは私のプロジェクトで働いています。 私は、これはあなたのために役立つと思う。

日付が過去である場合、反転は1になります。
Dateが将来の場合、反転は0になります。

$defaultDate = date('Y-m-d');   
$datetime1   = new DateTime('2013-03-10');  
$datetime2   = new DateTime($defaultDate);  
$interval    = $datetime1->diff($datetime2);  
$days        = $interval->format('%a');
$invert      = $interval->invert;

この関数は、与えられた2つの日付$doj1$doj正確な年月を計算するのに役立ちます。 例4.3を返すと、4年3ヶ月を意味します。

<?php
    function cal_exp($doj1)
    {
        $doj1=strtotime($doj1);
        $doj=date("m/d/Y",$doj1); //till date or any given date

        $now=date("m/d/Y");
        //$b=strtotime($b1);
        //echo $c=$b1-$a2;
        //echo date("Y-m-d H:i:s",$c);
        $year=date("Y");
        //$chk_leap=is_leapyear($year);

        //$year_diff=365.25;

        $x=explode("/",$doj);
        $y1=explode("/",$now);

        $yy=$x[2];
        $mm=$x[0];
        $dd=$x[1];

        $yy1=$y1[2];
        $mm1=$y1[0];
        $dd1=$y1[1];
        $mn=0;
        $mn1=0;
        $ye=0;
        if($mm1>$mm)
        {
            $mn=$mm1-$mm;
            if($dd1<$dd)
            {
                $mn=$mn-1;
            }
            $ye=$yy1-$yy;
        }
        else if($mm1<$mm)
        {
            $mn=12-$mm;
            //$mn=$mn;

            if($mm!=1)
            {
                $mn1=$mm1-1;
            }

            $mn+=$mn1;
            if($dd1>$dd)
            {
                $mn+=1;
            }

            $yy=$yy+1;
            $ye=$yy1-$yy;
        }
        else
        {
            $ye=$yy1-$yy;
            $ye=$ye-1;

            $mn=12-1;

            if($dd1>$dd)
            {
                $ye+=1;
                $mn=0;
            }
        }

        $to=$ye." year and ".$mn." months";
        return $ye.".".$mn;

        /*return daysDiff($x[2],$x[0],$x[1]);
         $days=dateDiff("/",$now,$doj)/$year_diff;
        $days_exp=explode(".",$days);
        return $years_exp=$days; //number of years exp*/
    }
?>

$day1 = "2006-04-12 12:30:00"
$day1 = strtotime($day1);
$day2 = "2006-04-14 11:30:00"
$day2 = strtotime($day2);

$diffHours = round(($day2 - $day1) / 3600);

私はstrtotime()関数がこの日付形式を受け入れると思います。


<?
     $day1 = "2014-01-26 11:30:00";
     $day1 = strtotime($day1);
     $day2 = "2014-01-26 12:30:00";
     $day2 = strtotime($day2);

   $diffHours = round(($day2 - $day1) / 3600);

   echo $diffHours;

?>

$t1 = StrToTime ( '2006-04-14 11:30:00' );
$t2 = StrToTime ( '2006-04-12 12:30:00' );
$diff = $t1 - $t2;
$hours = $diff / ( 60 * 60 );

http://carbon.nesbot.com/はおそらくもっとうまくいくでしょう。

彼らのウェブサイトから:

DateTimeのためのシンプルなPHP API拡張。 http://carbon.nesbot.com/

例:

use Carbon\Carbon;

//...

$day1 = Carbon::createFromFormat('Y-m-d H:i:s', '2006-04-12 12:30:00');
$day2 = Carbon::createFromFormat('Y-m-d H:i:s', '2006-04-14 11:30:00');

echo $day1->diffInHours($day2); //47

//...

CarbonはDateTimeクラスを拡張し、 diff()を含むメソッドを継承します。 diffInHoursdiffInMintutesdiffInSecondsなどの素敵な糖分を追加します。


DatePeriod別のメソッドを提供する。

日付間の秒数または時間数を計算することなく、適用可能なタイムゾーンで夏時間を考慮に入れます。

カウント時間 (例: https://3v4l.org/Vom6N : https://3v4l.org/Vom6N

$date1 = new \DateTime('2006-04-12T12:30:00');
$date2 = new \DateTime('2006-04-14T11:30:00');

//determine what interval should be used - can change to weeks, months, etc
$interval = new \DateInterval('PT1H');

//create periods every hour between the two dates
$periods = new \DatePeriod($date1, $interval, $date2);

//count the number of objects within the periods
$hours = iterator_count($periods);
echo $hours . ' hours'; 

結果

47 hours

夏時間のカウント時間 (例: https://3v4l.org/eO9KE : https://3v4l.org/eO9KE

//set timezone to UTC to disregard daylight savings
ini_set('date.timezone', 'America/New_York'); 
$date1 = new \DateTime('2006-01-01T12:00:00');
$date2 = new \DateTime('2006-06-01T12:00:00');
$interval = new \DateInterval('PT1H');

$periods = new \DatePeriod($date1, $interval, $date2);
$hours = iterator_count($periods);
echo $hours . ' hours';

結果

3623 hours

同じ方法を使用して、給与期間を決定し、それらを数える代わりに検索することができます。

支払い期間 (例: https://3v4l.org/WQoh5 : https://3v4l.org/WQoh5

$interval = new \DateInterval('P2W');
$payPeriodStart = new \DateTime('2012-08-12T00:00:00');
$today = new \DateTime('2016-03-04T12:00:00');
$today->add($interval);
$payPeriods = new \DatePeriod($payPeriodStart, $interval, $today);
$payPeriods = array_reverse(iterator_to_array($payPeriods));

$recent = [
   'current' => [
       'start' => $payPeriods[1]->format('Y-m-d'),
       'end' => $payPeriods[0]->format('Y-m-d')
   ],
   'previous' => [
       'start' => $payPeriods[2]->format('Y-m-d'),
       'end' => $payPeriods[1]->format('Y-m-d')
   ]
];
var_dump($recent);

結果

array(2) {
  ["current"]=>
  array(2) {
    ["start"]=>
    string(10) "2016-02-21"
    ["end"]=>
    string(10) "2016-03-06"
  }
  ["previous"]=>
  array(2) {
    ["start"]=>
    string(10) "2016-02-07"
    ["end"]=>
    string(10) "2016-02-21"
  }
}

宇宙船オペレーター<=> (PHP 7で追加)

<=>宇宙船オペレータの例(PHP 7、ソース:PHP Manual):

変数の3方向比較のための整数、浮動小数点数、文字列、配列およびオブジェクト

// Integers
echo 10 <=> 10; // 0
echo 10 <=> 20; // -1
echo 20 <=> 10; // 1

// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1

// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1

echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1

// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1

// Objects
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 0

$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "c"]; 
echo $a <=> $b; // -1

$a = (object) ["a" => "c"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 1

// only values are compared
$a = (object) ["a" => "b"]; 
$b = (object) ["b" => "b"]; 
echo $a <=> $b; // 1




php datetime