Unverified Commit 736415ef authored by Stas's avatar Stas Committed by GitHub

Merge pull request #2028 from DoSomething/millisecond-date-bug

Fix issue parsing millisecond-precision dates before 1970.
parents 3d58b4b3 2f926542
......@@ -99,7 +99,13 @@ abstract class Model extends BaseModel
{
// Convert UTCDateTime instances.
if ($value instanceof UTCDateTime) {
return Date::createFromTimestampMs($value->toDateTime()->format('Uv'));
$date = $value->toDateTime();
$seconds = $date->format('U');
$milliseconds = abs($date->format('v'));
$timestampMs = sprintf('%d%03d', $seconds, $milliseconds);
return Date::createFromTimestampMs($timestampMs);
}
return parent::asDateTime($value);
......
......@@ -425,6 +425,14 @@ class ModelTest extends TestCase
$user = User::create(['name' => 'Jane Doe', 'birthday' => '2005-08-08']);
$this->assertInstanceOf(Carbon::class, $user->birthday);
// test millisecond-precision dates after 1970:
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('2010-08-08 04.08.37.324')]);
$this->assertInstanceOf(Carbon::class, $user->birthday);
// test millisecond-precision dates before 1970:
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('1965-08-08 04.08.37.324')]);
$this->assertInstanceOf(Carbon::class, $user->birthday);
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => '2005-08-08']]);
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment