jasonjgardner / date-range
PHP 7.1|8.0的简单日期范围
1.1.0
2018-05-31 06:15 UTC
Requires
- php: ^7.1
Requires (Dev)
- phpunit/phpunit: ^6.1
This package is not auto-updated.
Last update: 2024-09-29 04:25:58 UTC
README
PHP 7.1|8.0的简单日期范围对象
较早的PHP版本:查看由brtriver创建的原始DateRange。
要求
PHP 7.1.0或更高版本
安装
使用Composer安装
$ composer require jasonjgardner/date-range
用法
创建日期范围
创建一个包含起始\DateTime
和结束\DateTime
的日期范围对象
use jasonjgardner\DateRange\DateRange; $summer = new DateRange('2017-06-20', '2017-09-22'); echo 'Summer starts on ', $summer->getStartDate()->format('F j, Y'); /// Summer starts on June 21, 2017 echo 'The last day of summer is ', $summer->getEndDate()->format('F j, Y'); /// The last day of summer is September 22, 2017
将各种变量类型传递给构造函数
/// Accepts `\DateTime` objects new DateRange(new \DateTime('today'), new \DateTime('tomorrow')); /// Accepts date strings new DateRange('2017-09-15', '10-15-2017'); /// Accepts timestamps $DateRange = new DateRange(1493886600, '1499172300'); echo $DateRange->toString('m/d/Y'); /// 05/04/2017 - 07/04/2017 /// Accepts an array of dates $dates = [ '2017-10-21', '2017-01-01', '2017-12-31', '2017-10-31' ]; $DateRange = new DateRange($dates); echo $DateRange->getStartDate()->format('M j'); /// Jan 1 echo $DateRange->getEndDate()->format('M j'); /// Dec 31 /// Only requires a start date argument $DateRange = new DateRange('12/31/2017'); echo $DateRange->getEndDate()->format('M j, Y G:i e'); /// Jan 1, 2018 0:00 UTC /// Create dates in a certain timezone $date = new \DateTime( 'March 1, 2017 3:30 PM', new \DateTimeZone('America/New_York') ); $DateRange = new DateRange( $date, null, new \DateTimeZone('Asia/Tokyo') ); echo $DateRange->getStartDate()->format('M j, Y G:i e'); /// March 2, 2017 4:30 AM Asia/Tokyo
日期范围比较
检查特定日期是否在日期范围之前、之后或期间
$aries = new DateRange('March 21', 'April 19'); $birthday = new \DateTime('April 1'); if ($aries->compare($birthday) === 0) { echo 'You are an Aries ♈'; } else if ($aries->compare('March 1') < 0) { echo 'You look like a Pisces ♓'; } else if ($aries->compare('May 1') > 0) { echo 'Are you a Taurus? ♉'; }
DateRange::compare()
方法将日期字符串、对象或时间戳与日期范围的起始和结束日期进行比较。如果日期在日期范围之前,则返回-1;如果日期在日期范围期间,则返回0;如果日期在日期范围之后,则返回1。
类常量
DateRange::COMPARE_BEFORE
、DateRange::COMPARE_BETWEEN
和DateRange::COMPARE_AFTER
分别设置为-1、0和1。
差异
找到起始和结束日期之间的差异
$DateRange = new DateRange('Nov 4', 'Nov 8'); echo $DateRange->diff()->format('%d days); /// 4 days
日期范围输出
将日期范围转换为字符串并格式化日期输出
$LaborDayWeekend = new DateRange('August 31, 2018', 'September 3, 2018'); echo $LaborDayWeekend->toString('m-d-Y'); /// 08-31-2018 - 09-03-2018 echo $LaborDayWeekend->toString('m-d-Y', 'Y-n-j'); /// 08-31-2018 - 2018-9-3 echo (string) $LaborDayWeekend; /// 2018-08-31 - 2018-09-03
日期范围作为数组
遍历前一个示例中定义的$LaborDayWeekend
日期范围
foreach ($LaborDayWeekend as $day) { echo $day->format('M j, Y'); /// Aug 31, 2018 /// Sep 1, 2018 /// Sep 2, 2018 /// Sep 3, 2018 }
转换为格式化日期字符串的数组
$week = new DateRange('Sunday', 'Saturday'); $days = $week->toArray('l'); /// $days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
排除日期
可以将类常量DateRange::EXCLUDE_END_DATE
和DateRange::EXCLUDE_START_DATE
传递给以下方法以从结果中省略起始或结束日期:
DateRange::getDatePeriod($interval, $exclude)
DateRange::compare($date, $exclude)
DateRange::toArray($format, $short, $interval, $exclude)
在从星期日到星期六跨越的DateRange
中,可以将EXCLUDE_*
常量作为$exclude
参数传递,单独或与位运算符一起传递,以修改范围,如下所示:
许可证
DateRange采用MIT许可证。