Skip to content

Commit 4a98afb

Browse files
authored
Merge pull request #13 from 1ed/support-immutable-datetime
Add `DateTimeImmutable` support
2 parents 0be5d7d + 04eb9d2 commit 4a98afb

File tree

3 files changed

+25
-5
lines changed

3 files changed

+25
-5
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
/vendor/
2+
.phpunit.result.cache
3+
composer.lock

src/Ranger.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
use IntlDateFormatter;
1111
use DateTime;
12+
use DateTimeImmutable;
1213
use RuntimeException;
1314
use InvalidArgumentException;
1415
use OpenPsa\Ranger\Provider\DefaultProvider;
@@ -233,6 +234,11 @@ private function prepare_date($input) : DateTime
233234
if ($input instanceof DateTime) {
234235
return $input;
235236
}
237+
if ($input instanceof DateTimeImmutable) {
238+
$date = new DateTime('@' . $input->getTimestamp());
239+
$date->setTimezone($input->getTimezone());
240+
return $date;
241+
}
236242
if (is_numeric($input)) {
237243
$date = new Datetime;
238244
$date->setTimestamp(intval($input));

test/RangerTest.php

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
use IntlDateFormatter;
1111
use DateTime;
12+
use DateTimeImmutable;
1213
use PHPUnit\Framework\TestCase;
1314

1415
class RangerTest extends TestCase
@@ -22,7 +23,7 @@ public function testDateRange($language, $start, $end, $expected)
2223
$this->assertEquals($expected, $formatter->format($start, $end));
2324
}
2425

25-
public function providerDateRange()
26+
public static function providerDateRange()
2627
{
2728
return [
2829
['en', '2013-10-05', '2013-10-20', 'Oct 5–20, 2013'],
@@ -44,7 +45,7 @@ public function testDateTimeRange($language, $start, $end, $expected)
4445
$this->assertEquals($expected, $formatter->format($start, $end));
4546
}
4647

47-
public function providerDateTimeRange()
48+
public static function providerDateTimeRange()
4849
{
4950
return [
5051
['en', '2013-10-05 01:01:01', '2013-10-20 00:00:00', 'Oct 5, 2013, 1:01 AM – Oct 20, 2013, 12:00 AM'],
@@ -64,7 +65,7 @@ public function testFullDateRange($language, $start, $end, $expected)
6465
$this->assertEquals($expected, $formatter->format($start, $end));
6566
}
6667

67-
public function providerFullDateRange()
68+
public static function providerFullDateRange()
6869
{
6970
return [
7071
['en', '2013-10-05', '2013-10-20', 'Saturday, October 5 – Sunday, October 20, 2013'],
@@ -86,7 +87,7 @@ public function testShortDateRange($language, $start, $end, $expected)
8687
$this->assertEquals($expected, $formatter->format($start, $end));
8788
}
8889

89-
public function providerShortDateRange()
90+
public static function providerShortDateRange()
9091
{
9192
return [
9293
['en', '2012-10-05', '2013-10-20', '10/5/12 – 10/20/13'],
@@ -135,6 +136,16 @@ public function testDateTime()
135136
$this->assertEquals('Oct 5–20, 2013', $formatted);
136137
}
137138

139+
public function testDateTimeImmutable()
140+
{
141+
$ranger = new Ranger('en');
142+
$start = new DateTimeImmutable('2013-10-05');
143+
$end = new DateTimeImmutable('2013-10-20');
144+
145+
$formatted = $ranger->format($start, $end);
146+
$this->assertEquals('Oct 5–20, 2013', $formatted);
147+
}
148+
138149
public function testTimestamp()
139150
{
140151
$ranger = new Ranger('en');
@@ -188,7 +199,7 @@ public function testNoDate($language, $start, $end, $expected)
188199
$this->assertEquals($expected, $formatter->format($start, $end));
189200
}
190201

191-
public function providerNoDate()
202+
public static function providerNoDate()
192203
{
193204
return [
194205
['en', '2013-10-05 10:00:00', '2013-10-05 13:30:00', '10:00 AM – 1:30 PM'],

0 commit comments

Comments
 (0)