Skip to content

Commit 736415e

Browse files
authored
Merge pull request #2028 from DoSomething/millisecond-date-bug
Fix issue parsing millisecond-precision dates before 1970.
2 parents 3d58b4b + 2f92654 commit 736415e

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

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

+7-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,13 @@ protected function asDateTime($value)
9999
{
100100
// Convert UTCDateTime instances.
101101
if ($value instanceof UTCDateTime) {
102-
return Date::createFromTimestampMs($value->toDateTime()->format('Uv'));
102+
$date = $value->toDateTime();
103+
104+
$seconds = $date->format('U');
105+
$milliseconds = abs($date->format('v'));
106+
$timestampMs = sprintf('%d%03d', $seconds, $milliseconds);
107+
108+
return Date::createFromTimestampMs($timestampMs);
103109
}
104110

105111
return parent::asDateTime($value);

Diff for: tests/ModelTest.php

+8
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,14 @@ public function testDates(): void
425425
$user = User::create(['name' => 'Jane Doe', 'birthday' => '2005-08-08']);
426426
$this->assertInstanceOf(Carbon::class, $user->birthday);
427427

428+
// test millisecond-precision dates after 1970:
429+
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('2010-08-08 04.08.37.324')]);
430+
$this->assertInstanceOf(Carbon::class, $user->birthday);
431+
432+
// test millisecond-precision dates before 1970:
433+
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('1965-08-08 04.08.37.324')]);
434+
$this->assertInstanceOf(Carbon::class, $user->birthday);
435+
428436
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => '2005-08-08']]);
429437
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
430438

0 commit comments

Comments
 (0)