日付の期間を扱いやすくする PHP ライブラリ DateRange を作りました

ある日付がある期間に含まれているかどうかやある期間とある期間が重なっているかどうかを検査したりする機能を提供するライブラリを作りました。

GitHub
https://github.com/suzuki86/DateRange

GitHub Page
http://suzuki86.github.io/DateRange/

使い方

DateRange::includes()

ある日付がある期間に含まれているかどうかを確かめます。

$dateRange = new DateRange(
  strtotime('2015-10-01'),
  strtotime('2015-10-20')
);
$result = $dateRange->includes(strtotime('2015-10-10'));

var_dump($result); // bool(true)

DateRange::overlaps()

ある期間とある期間が重なっているかどうかを確かめます。

$dateRange = new DateRange(
  strtotime('2015-10-01'),
  strtotime('2015-10-20')
);
$target = new DateRange(
  strtotime('2015-10-10'),
  strtotime('2015-10-25')
);
$result = $dateRange->overlaps($target);

var_dump($result); // bool(true)

DateRange::extract()

期間に含まれる全ての日付を返します。

$dateRange = new DateRange(
  strtotime('2015-10-01'),
  strtotime('2015-10-05')
);
$result = $dateRange->extract();

echo date('Y-m-d', $result[0]); // '2015-10-01'
echo date('Y-m-d', $result[1]); // '2015-10-02'
echo date('Y-m-d', $result[2]); // '2015-10-03'
// ...

DateRange::getOverlap()

2つの期間の重なっている日付を返します。

$dateRange = new DateRange(
  strtotime('2015-10-01'),
  strtotime('2015-10-05')
);
$target = new DateRange(
  strtotime('2015-10-03'),
  strtotime('2015-10-07')
);
$resultDateRange = $dateRange->getOverlap($target);
echo strtotime('Y-m-d', $resultDateRange->startDate); // '2015-10-03'
echo strtotime('Y-m-d', $resultDateRange->endDate); // '2015-10-05'

DateRange::merge()

2つの期間を1つの期間に結合します。

$dateRange = new DateRange(
  strtotime('2015-10-01'),
  strtotime('2015-10-05')
);
$target = new DateRange(
  strtotime('2015-10-03'),
  strtotime('2015-10-07')
);
$resultDateRange = $dateRange->merge($target);
echo strtotime('Y-m-d', $resultDateRange->startDate); // '2015-10-01'
echo strtotime('Y-m-d', $resultDateRange->endDate); // '2015-10-07'