use strict;
use Time::Local qw(timelocal);
sub get_time {
my $date_time = shift;
if ($date_time =~ /(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/) {
my ($year, $mon, $day, $hour, $min, $sec)
= ( $1, $2, $3, $4, $5, $6);
# Months are 0-based in this API.
$mon =~ s/^0//;
$mon--;
return timelocal($sec, $min, $hour, $dd, $mm, $yyyy);
}
else {
die "Invalid time '$date_time'";
}
}
####
my $sec_in_week = (get_time($date_time) - $base_time)%(60*60*24*7);
####
my $base_time = get_time("20000101000000");
my @time_start;
my @time_bucket;
# We start at the beginning of the weekend.
push @time_start, 0;
push @time_bucket, "weekend";
# Monday starts with the 3rd.
push @time_start, get_time("20000103000000") - $base_time;
push @time_bucket, "19-7";
# Now fill in the week.
for $day (3..7) {
my $date = "2000010$day";
# 7 AM
push @time_start, get_time($date . "070000") - $base_time;
push @time_bucket, "7-9";
# 9 AM
push @time_start, get_time($date . "090000") - $base_time;
push @time_bucket, "9-18";
# 6 PM
push @time_start, get_time($date . "180000") - $base_time;
push @time_bucket, "18-19";
# 7 PM
push @time_start, get_time($date . "190000") - $base_time;
push @time_bucket, "19-7";
}
push @time_start, get_time("20000108000000") - $base_time;
push @time_bucket, "next week";