0

タイムスパンが部分的または完全に別のタイムスパン内にあるかどうかを判断する方法を見つけようとしています。例えば:

私は次の時間エントリを持っています:

  • 月曜日18:30:00から火曜日05:00:00、
  • 月曜日23:00:00から火曜日05:00:00、
  • 月曜日20:00:00から火曜日08:00:00、
  • 月曜日00:00:00から火曜日08:00:00、

そして、それぞれについて、22:00:00から06:00:00のタイムスパン内にある時間の長さを見つける必要があります。出力は次のようになります。

07:00:00、06:00:00、08:00:00、06:00:00。

4

1 に答える 1

1

あなたが探しているのDateTime::diffは、インスタンスを返すものですDateInterval

ここに少し例があります:

$d1 = new DateTime("Monday 18:30:00");
$d2 = new DateTime("Tuesday 05:00:00");

$limit1 = new DateTime("Monday 22:00:00");
$limit2 = new DateTime("Tuesday 06:00:00");

$within1 = $d1->getTimestamp() < $limit1->getTimestamp() ? $limit1 : $d1;
$within2 = $d2->getTimestamp() < $limit2->getTimestamp() ? $d2 : $limit2;

$interval = $within1->diff($within2);

print_r($interval);

print_r($interval);

出力:

DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 0
    [h] => 7
    [i] => 0
    [s] => 0
    [invert] => 0
    [days] => 0
)

この属性を直接読み取ることも、DateInterval :: format()を使用することもできます。

于 2013-02-01T07:34:05.523 に答える