Skip to content

Commit f78cb25

Browse files
committedApr 30, 2021
Merge pull request mongodb#2239 from jeromegamez/date-time-interface
Check dates against `DateTimeInterface` instead of `DateTime`
2 parents fd0a837 + f0db3ee commit f78cb25

File tree

4 files changed

+36
-6
lines changed

4 files changed

+36
-6
lines changed
 

Diff for: ‎src/Jenssegers/Mongodb/Eloquent/Model.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Jenssegers\Mongodb\Eloquent;
44

5-
use DateTime;
5+
use DateTimeInterface;
66
use Illuminate\Contracts\Queue\QueueableCollection;
77
use Illuminate\Contracts\Queue\QueueableEntity;
88
use Illuminate\Database\Eloquent\Model as BaseModel;
@@ -85,7 +85,7 @@ public function fromDateTime($value)
8585
}
8686

8787
// Let Eloquent convert the value to a DateTime instance.
88-
if (!$value instanceof DateTime) {
88+
if (!$value instanceof DateTimeInterface) {
8989
$value = parent::asDateTime($value);
9090
}
9191

Diff for: ‎src/Jenssegers/Mongodb/Query/Builder.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Jenssegers\Mongodb\Query;
44

55
use Closure;
6-
use DateTime;
6+
use DateTimeInterface;
77
use Illuminate\Database\Query\Builder as BaseBuilder;
88
use Illuminate\Database\Query\Expression;
99
use Illuminate\Support\Arr;
@@ -929,18 +929,18 @@ protected function compileWheres()
929929
if (isset($where['value'])) {
930930
if (is_array($where['value'])) {
931931
array_walk_recursive($where['value'], function (&$item, $key) {
932-
if ($item instanceof DateTime) {
932+
if ($item instanceof DateTimeInterface) {
933933
$item = new UTCDateTime($item->format('Uv'));
934934
}
935935
});
936936
} else {
937-
if ($where['value'] instanceof DateTime) {
937+
if ($where['value'] instanceof DateTimeInterface) {
938938
$where['value'] = new UTCDateTime($where['value']->format('Uv'));
939939
}
940940
}
941941
} elseif (isset($where['values'])) {
942942
array_walk_recursive($where['values'], function (&$item, $key) {
943-
if ($item instanceof DateTime) {
943+
if ($item instanceof DateTimeInterface) {
944944
$item = new UTCDateTime($item->format('Uv'));
945945
}
946946
});

Diff for: ‎tests/ModelTest.php

+3
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,9 @@ public function testDates(): void
497497
$user->setAttribute('birthday', new DateTime('1965-08-08 04.08.37.324'));
498498
$this->assertInstanceOf(Carbon::class, $user->birthday);
499499

500+
$user->setAttribute('birthday', new DateTimeImmutable('1965-08-08 04.08.37.324'));
501+
$this->assertInstanceOf(Carbon::class, $user->birthday);
502+
500503
//Test with create and array property
501504
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => time()]]);
502505
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));

Diff for: ‎tests/QueryBuilderTest.php

+27
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,33 @@ public function testDates()
574574
$this->assertCount(2, $users);
575575
}
576576

577+
public function testImmutableDates()
578+
{
579+
DB::collection('users')->insert([
580+
['name' => 'John Doe', 'birthday' => new UTCDateTime(Date::parse("1980-01-01 00:00:00")->format('Uv'))],
581+
['name' => 'Robert Roe', 'birthday' => new UTCDateTime(Date::parse("1982-01-01 00:00:00")->format('Uv'))],
582+
]);
583+
584+
$users = DB::collection('users')->where('birthday', '=', new DateTimeImmutable("1980-01-01 00:00:00"))->get();
585+
$this->assertCount(1, $users);
586+
587+
$users = DB::collection('users')->where('birthday', new DateTimeImmutable("1980-01-01 00:00:00"))->get();
588+
$this->assertCount(1, $users);
589+
590+
$users = DB::collection('users')->whereIn('birthday', [
591+
new DateTimeImmutable("1980-01-01 00:00:00"),
592+
new DateTimeImmutable("1982-01-01 00:00:00")
593+
])->get();
594+
$this->assertCount(2, $users);
595+
596+
$users = DB::collection('users')->whereBetween('birthday', [
597+
new DateTimeImmutable("1979-01-01 00:00:00"),
598+
new DateTimeImmutable("1983-01-01 00:00:00")
599+
])->get();
600+
601+
$this->assertCount(2, $users);
602+
}
603+
577604
public function testOperators()
578605
{
579606
DB::collection('users')->insert([

0 commit comments

Comments
 (0)