From 336c6c8a415603c772f97ccd63912d05209f3795 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Fri, 2 Jan 2015 13:27:02 +0100 Subject: initial --- lib/PINGDOMFETCH/DateHelper.pm | 179 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 lib/PINGDOMFETCH/DateHelper.pm (limited to 'lib/PINGDOMFETCH/DateHelper.pm') diff --git a/lib/PINGDOMFETCH/DateHelper.pm b/lib/PINGDOMFETCH/DateHelper.pm new file mode 100644 index 0000000..43c2499 --- /dev/null +++ b/lib/PINGDOMFETCH/DateHelper.pm @@ -0,0 +1,179 @@ +package PINGDOMFETCH::DateHelper; + +use strict; +use warnings; + +use Date::Format; +use Time::ParseDate; + +use PINGDOMFETCH::Config; +use PINGDOMFETCH::Display; +use PINGDOMFETCH::Utils; + +our @ISA = ('PINGDOMFETCH::Display'); + +use overload '""' => sub { + my ($self) = @_; + $self->full_str(); +}; + +sub new ($;$) { + my ( $class, $config, $time ) = @_; + + my $self = bless { config => $config }, $class; + + $self->time($time); + + return $self; +} + +sub time { + my ( $self, $time ) = @_; + + my $config = $self->{config}; + + $time = $self->{time} if not defined $time or $time eq ''; + + if ( not defined $time or $time eq '' ) { + $time //= time(); + return $self->{time} = $time; + + } + elsif ( $time !~ /^\d+$/ ) { + my $parsed = parsedate($time); + $self->error("Can't parse time '$time'") unless defined $parsed; + $time = $parsed; + } + + return $self->{time} = $time; +} + +sub flatten { + my ( $self, $flatten ) = @_; + + if ( $flatten eq 'bod' ) { + return $self->begin_of_day(); + } + elsif ( $flatten eq 'eod' ) { + return $self->end_of_day(); + } + elsif ( $flatten eq 'boh' ) { + return $self->begin_of_hour(); + } + elsif ( $flatten eq 'eoh' ) { + return $self->end_of_hour(); + } + else { + $self->error("Can't parse flatten method '$flatten'"); + } +} + +sub localtime { + my ( $self, $time ) = @_; + + return localtime( $self->time($time) ); +} + +sub prev_day { + my ( $self, $time ) = @_; + + return $self->time( $self->time($time) - 86400 ); +} + +sub next_day { + my ( $self, $time ) = @_; + + return $self->time( $self->time($time) + 86400 ); +} + +sub begin_of_day { + my ( $self, $time ) = @_; + + my @localtime = $self->localtime($time); + my ( $sec, $min, $hour, @rest ) = @localtime; + + return $self->time( $self->time() - $sec - 60 * ( $min + 60 * $hour ) ); +} + +sub end_of_day { + my ( $self, $time ) = @_; + + my @localtime = $self->localtime($time); + my ( $sec, $min, $hour, @rest ) = @localtime; + + return $self->time( $self->begin_of_day() + 86399 ); +} + +sub begin_of_hour { + my ( $self, $time ) = @_; + + my @localtime = $self->localtime($time); + my ( $sec, $min, $hour, @rest ) = @localtime; + + return $self->time( $self->time() - $sec - 60 * $min ); +} + +sub end_of_hour { + my ( $self, $time ) = @_; + + return $self->time( $self->begin_of_hour() + 59 * ( 1 + 60 ) ); +} + +sub is_a_day { + my ($self) = @_; + + return $self->time() == 86400; +} + +sub is_begin_of_a_day { + my ($self) = @_; + + my @localtime = $self->localtime( $self->time() ); + my ( $sec, $min, $hour, @rest ) = @localtime; + + return $sec == 0 and $min == 0 and $hour == 0; +} + +sub is_in_future { + my ($self) = @_; + + my $dh = PINGDOMFETCH::DateHelper->new( $self->{config} ); + + return $self->time() > $dh->time() ? 1 : 0; +} + +sub days_until { + my ( $self, $dh ) = @_; + + return ( $dh->time() - $self->time() ) / 86400; +} + +sub day_str { + my ( $self, $time ) = @_; + + my @localtime = $self->localtime($time); + + #return strftime( "%D", @localtime ); + return strftime( "%d.%m.%Y", @localtime ); +} + +sub full_str { + my ( $self, $time ) = @_; + + my @localtime = $self->localtime($time); + + #return strftime( "%c", @localtime ); + return strftime( "%d.%m.%Y %H:%M:%S", @localtime ); +} + +sub print { + my ( $self, $time ) = @_; + + $self->time($time); + + say $self->full_str(); + + return undef; +} + +1; -- cgit v1.2.3