From 5dd139e2769eeca6ce32baabca99f955336401e8 Mon Sep 17 00:00:00 2001 From: Adriano Ferreira Date: Thu, 8 Jun 2017 11:50:57 -0700 Subject: [PATCH 1/2] Test to_datetime() for datetimes before the epoch They currently fail because Mojo::Date->new() can't cope with negative epoch. --- t/bson.t | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/t/bson.t b/t/bson.t index 10d0d30..737c1b2 100644 --- a/t/bson.t +++ b/t/bson.t @@ -58,6 +58,10 @@ is bson_time(1360626536748), 1360626536748, 'right epoch milliseconds'; is bson_time(1360626536748)->to_epoch, 1360626536.748, 'right epoch seconds'; is bson_time(1360626536748)->to_datetime, '2013-02-11T23:48:56.748Z', 'right format'; +is bson_time(-28731600 * 1000)->to_datetime, '1969-02-02T11:00:00Z', + 'Before epoch: Boris Karloff death'; +is bson_time(-4890694522 * 1000)->to_datetime, '1815-01-08T17:44:38Z', + 'Well before epoch: Battle of New Orleans'; # Empty document my $bson = bson_encode {}; From dee3371bff076e79d31117da58c3731a50abacf7 Mon Sep 17 00:00:00 2001 From: Adriano Ferreira Date: Thu, 8 Jun 2017 12:10:57 -0700 Subject: [PATCH 2/2] Fix to_datetime() for datetimes before the epoch Work around Mojo::Date->new($epoch) choking on negative epoch. --- lib/Mango/BSON/Time.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Mango/BSON/Time.pm b/lib/Mango/BSON/Time.pm index eeae82b..d60b512 100644 --- a/lib/Mango/BSON/Time.pm +++ b/lib/Mango/BSON/Time.pm @@ -9,7 +9,7 @@ sub new { shift->SUPER::new(time => shift // int(time * 1000)) } sub TO_JSON { 0 + shift->{time} } -sub to_datetime { Mojo::Date->new(shift->to_epoch)->to_datetime } +sub to_datetime { Mojo::Date->new->epoch(shift->to_epoch)->to_datetime } sub to_epoch { shift->to_string / 1000 }