my $dt = DateTime->today;
say $dt, " = ", $dt->jd;
$dt->subtract(days => $dt->jd, hours => 12); # days implicitly truncated to int
say $dt, " = ", $dt->jd;
####
2015-06-29T00:00:00 = 2457202.5
-4713-11-24T12:00:00 = 0
####
my $jd_to_convert = 2457205.09613609;
my $dt = DateTime->new(year => -4713, month => 11, day =>24, hour => 12)->add(days => $jd_to_convert);
say $dt, " = ", $dt->jd;
####
2015-07-01T12:00:00 = 2457205
####
sub jd2dt {
# convert JD to DateTime
my $jd_to_convert = shift;
my $days = int $jd_to_convert;
# that odd date is "julian day zero", converted to "proleptic" gregorian calendar
my $dt = DateTime->new(year => -4713, month => 11, day =>24, hour => 12, time_zone => DateTime::TimeZone->new( name => 'UTC' ))->add(days => $days);
$dt->add(hours => 24 * ($jd_to_convert - $days));
return $dt; # 2017-06-13 added this line for clarity
}