use strict; use warnings; use DateTime::Format::DateParse qw( ); sub same_date_anywhere { my ($dt1, $dt2) = @_; ($dt1, $dt2) = ($dt2, $dt1) if $dt1 < $dt2; $dt1 = $dt1->clone(); $dt1->subtract( hours => 24 ); return $dt1 < $dt2; } sub same_date_somewhere { my ($dt1, $dt2, $tz) = @_; for my $dt ($dt1, $dt2) { ( $dt = $dt->clone() ) ->set_time_zone($tz) ->truncate( to => 'days' ); } return $dt1 == $dt2; } my $dt1 = DateTime::Format::DateParse->parse_datetime("Fri, 26 Aug 2011 14:34:55 GMT"); my $dt2 = DateTime::Format::DateParse->parse_datetime("Sat, 27 Aug 2011 07:03:02 +1000"); say(same_date_anyhere($dt1, $dt2) ?1:0); say(same_date_somewhere($dt1, $dt2, $dt1->time_zone) ?1:0); say(same_date_somewhere($dt1, $dt2, $dt2->time_zone) ?1:0); say(same_date_somewhere($dt1, $dt2, "America/New_York") ?1:0); say(same_date_somewhere($dt1, $dt2, "UTC") ?1:0);