jasonjgardner/date-range

PHP 7.1|8.0的简单日期范围

1.1.0 2018-05-31 06:15 UTC

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_BEFOREDateRange::COMPARE_BETWEENDateRange::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_DATEDateRange::EXCLUDE_START_DATE传递给以下方法以从结果中省略起始或结束日期:

  • DateRange::getDatePeriod($interval, $exclude)
  • DateRange::compare($date, $exclude)
  • DateRange::toArray($format, $short, $interval, $exclude)

在从星期日到星期六跨越的DateRange中,可以将EXCLUDE_*常量作为$exclude参数传递,单独或与位运算符一起传递,以修改范围,如下所示:

许可证

DateRange采用MIT许可证。