Maplat
view release on metacpan or search on metacpan
lib/Maplat/Helpers/DateStrings.pm view on Meta::CPAN
package Maplat::Helpers::DateStrings;
use strict;
use warnings;
use 5.008000;
use Maplat::Helpers::Padding qw(doFPad);
use Date::Manip qw(Date_Init UnixDate);
use Date::Parse;
use Readonly;
use base qw(Exporter);
our @EXPORT = qw(getISODate getFileDate getUniqueFileDate getDateAndTime fixDateField parseNaturalDate getShortFiledate getCurrentHour getCurrentDay getISODate_nDaysOffset offsetISODate setmylocaltime); ## no critic (Modules::ProhibitAutomaticExporta...
our $VERSION = 0.995;
Readonly my $YEARBASEOFFSET => 1900;
my $lastUniqueDate = "";
my $UniqueDateCounter = 0;
my %timemap = (
morning => "06:00:00",
premorning => "05:45:00",
afternoon => "14:00:00",
preafternoon => "13:45:00",
evening => "22:00:00",
preevening => "21:45:00",
night => "22:00:00",
prenight => "21:45:00",
noon => "12:00:00",
midnight => "23:59:59",
christmas => "THISYEAR-12-24",
"new year" => "NEXTYEAR-01-01",
"new years eve" => "THISYEAR-12-31",
);
my $timemap_updated = "";
my $timezoneoffset = 0;
sub setmylocaltime {
my ($lt) = @_;
$timezoneoffset = $lt;
return 1;
}
sub getmylocaltime {
return localtime ($timezoneoffset + time);
}
sub updateTimeMap {
# calculate some variable date and time strings
# atm, we need to run only once a day, so return quickly
# it is the same date as last run
my ($currentDate, undef) = getDateAndTime();
if($timemap_updated eq $currentDate) {
return;
}
$timemap_updated = $currentDate;
Date_Init("TZ=CET");
my ($sec,$min, $hour, $mday,$mon, $year, $wday,$ yday, $isdst) = getmylocaltime();
$year += $YEARBASEOFFSET;
$mon += 1;
my $nextyear = $year+1;
my $lastyear = $year-1;
# a number of variable dates
my %vardates = (
"sysadmin day" => "last friday in june",
"towel day" => "25th may",
"new years eve" => "31st december",
"new year" => "1st january",
"christmas eve" => "24th december",
"christmas" => "25th december",
"rene(s)* birthday" => "9th november",
"frank(s)* birthday" => "6th september",
);
foreach my $varkey (keys %vardates) {
my $varval = $vardates{$varkey};
my $lastYearDay = UnixDate($varval . " $lastyear", "%Y-%m-%d");
my $currentYearDay = UnixDate($varval . " $year", "%Y-%m-%d");
my $nextYearDay = UnixDate($varval . " $nextyear", "%Y-%m-%d");
my ($tmpyear, $tmpmon, $tmpday) = split/\-/, $currentYearDay;
# normal
if($mon < $tmpmon || ($mon == $tmpmon && $mday <= $tmpday)) {
$timemap{$varkey} = $currentYearDay;
} else {
$timemap{$varkey} = $nextYearDay;
}
# "last ..."
my $lastvarkey = "last " . $varkey;
if($mon < $tmpmon || ($mon == $tmpmon && $mday <= $tmpday)) {
$timemap{$lastvarkey} = $lastYearDay;
} else {
$timemap{$lastvarkey} = $currentYearDay;
}
}
return;
}
sub getISODate {
my ($sec,$min, $hour, $mday,$mon, $year, $wday,$ yday, $isdst) = getmylocaltime();
$year += $YEARBASEOFFSET;
$mon += 1;
$mon = doFPad($mon, 2);
$mday = doFPad($mday, 2);
$hour = doFPad($hour, 2);
$min = doFPad($min, 2);
$sec = doFPad($sec, 2);
return "$year-$mon-$mday $hour:$min:$sec";
}
sub getISODate_nDaysOffset {
my ($nDays) = @_;
( run in 2.499 seconds using v1.01-cache-2.11-cpan-99c4e6809bf )