summaryrefslogtreecommitdiff
path: root/lib/PINGDOMFETCH/DateHelper.pm
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2015-01-02 13:27:02 +0100
committerPaul Buetow <paul@buetow.org>2015-01-02 13:27:02 +0100
commit336c6c8a415603c772f97ccd63912d05209f3795 (patch)
tree1a0febb81031d77fa8bec857333cce0a6d87436e /lib/PINGDOMFETCH/DateHelper.pm
initial1.0.0
Diffstat (limited to 'lib/PINGDOMFETCH/DateHelper.pm')
-rw-r--r--lib/PINGDOMFETCH/DateHelper.pm179
1 files changed, 179 insertions, 0 deletions
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;