brtriver / date-range
PHP的简单日期范围
v1.1
2015-12-29 16:32 UTC
Requires
- php: >=5.4.0
This package is not auto-updated.
Last update: 2024-09-14 18:09:45 UTC
README
DateRange是PHP中日期范围的简单表示。
要求
DateRange与PHP 5.4.0或更高版本兼容。
安装
推荐使用composer安装date-range。
$ composer require brtriver/date-range
使用
实例
传递以下两个日期(开始和结束)参数
use Brtriver\DateRange\DateRange; $range = new DateRange('2015-12-01', '2015-12-31');
或传递日期数组
$range = new DateRange(['2015-12-01', '2015-12-31']);
不仅接受字符串格式,也接受DateTime对象
$start = new DateTime('2012-12-01'); $end = new DateTime('2012-12-31'); $range = new DateRange([$start, $end]);
异常
如果DateRange无法接受构造参数,它将抛出InvalidArgumentException异常。因此,在短范围内,您必须捕获该异常。
try { $range = new DateRange('tomorrow', 'today'); } catch (\InvalidArgumentException $e) { echo $e->getMessage(); // end date is the day before than start date }
访问两个日期
DateRange有2个日期作为DateTime对象。您可以使用getter方法访问它们。
# if you get start DateTime object. $start = $range->getStart(); # if you get end DateTime object. $end = $range->getEnd();
包含
## check contains specific date var_dump($range->contains('2015-12-10')); // bool(true) var_dump($range->contains('2017-01-10')); // bool(false)
差值
获取开始和结束日期之间的DateInterval以调用diff
$range = new DateRange('2015-12-01', '2015-12-03'); $range->diff()->format('%R%a days'); // +2 days
toString
获取开始和结束日期字符串以输出实例
$range = new DateRange('2015-12-01', '2015-12-03'); echo $range; // '2015-12-01 ~ 2015-12-03'
如果您想更改格式,请使用您的格式和分隔符调用toString方法
$range = new DateRange('2015-12-01', '2015-12-03'); echo $range->toString('Y/m/d', '-'); // '2015/12/01 - 2015/12/03'
周期
您可以在foreach中使用DateRange。
foreach ($range as $d) { echo $d->format('Y-m-d') . PHP_EOL; }
如果您直接使用DatePeriod对象,您也可以通过以下方式通过getDatePeriod获取DatePeriod对象
foreach ($range->getDatePeriod() as $d) { echo $d->format('Y-m-d') . PHP_EOL; } // 2015-12-01 // 2015-12-02 // 2015-12-03 // 2015-12-04 // ... // 2015-12-28 // 2015-12-29 // 2015-12-30 // 2015-12-31
默认间隔设置为P1D。如果您想更改间隔,请调用setInterval
## if you want to change interval, use setInterval() $start = new DateTime('2012-12-01'); $end = new DateTime('2020-12-31'); $range = new DateRange([$start, $end]); $range->setInterval(new DateInterval('P1Y')); // change from 'P1D' (Default) foreach ($range->getDatePeriod() as $d) { echo $d->format('Y-m-d') . PHP_EOL; } // 2012-12-01 // 2013-12-01 // 2014-12-01 // 2015-12-01 // 2016-12-01 // 2017-12-01 // 2018-12-01 // 2019-12-01 // 2020-12-01
排除开始或结束日期
如果您想排除范围中的开始(结束)日期,请调用以下方式中的excludeStartDate()或excludeEndDate()
// exclude start date $range = new DateRange('2015-12-01', '2015-12-03'); $range->excludeStartDate(); foreach ($range => $d) { echo $d->format('Y-m-d') . PHP_EOL; } // 2015-12-02 // 2015-12-03 // exclude end date $range = new DateRange('2015-12-01', '2015-12-03'); $range->excludeEndDate(); foreach ($range => $d) { echo $d->format('Y-m-d') . PHP_EOL; } // 2015-12-01 // 2015-12-02
尝试演示
如果您要显示演示,只需运行make demo。
cd ./vendor/brtriver/date-range
make setup
make install
make demo
许可协议
DateRange采用MIT许可协议。