#!/usr/bin/perl

use POSIX;
use strict;
#require Time::Local;
#my $tz = $Time::Local::tzmin/60;
my(@epoch) = localtime(0);
my($tzmin) = $epoch[2] * 60 + $epoch[1];    # minutes east of GMT
if ($tzmin > 0) {
    $tzmin = 24 * 60 - $tzmin;              # minutes west of GMT
    $tzmin -= 24 * 60 if $epoch[5] == 70;   # account for the date line
}
my $tz = (0 - $tzmin/60);
my ($mday,$mon,$year);
if (@ARGV == 3) {
    if ($ARGV[1] > 12) { # month day year
	$mday = $ARGV[1];
	$mon = $ARGV[0];
	$year = $ARGV[2];
    } elsif ($ARGV[0] > 31) { # year month day
	$mday = $ARGV[2];
	$mon = $ARGV[1];
	$year = $ARGV[0];
    } else { #day month year
	$mday = $ARGV[0];
	$mon = $ARGV[1];
	$year = $ARGV[2];
    }
} elsif (@ARGV == 1 && $ARGV[0] =~ /(\d+)\/(\d+)\/(\d+)/) {
    $mon = $1;
    $mday = $2;
    $year = $3;
} else {
    print "usage: mktime <day> <month> <year>\n";
    print " or    mktime <month>/<day>/<year>\n";
    exit;
}

my $year_full = $year;
if ($year > 1900) {
    $year -= 1900;
} elsif ($year < 38) {
    $year += 100;
    $year_full += 2000;
} elsif ($year < 138) {
    $year_full += 1900;
} else {
    print "Warning! year $year does not make sense. " .
	"The year should be between 1900 and 2038.\n";
}
print "month: $mon day: $mday year: $year_full\n";
my $ltime = mktime(0,0,0,$mday,$mon - 1,$year);
my $time = $ltime + (3600*$tz);
print "$time\n";
print "local: " . ctime($time);
@_ = gmtime($time);
print strftime("GMT:   %a %b %d %H:%M:%S %Y\n",@_);

my $tdiff = (time() - $ltime)/(24*3600);
$tdiff = $1 if $tdiff =~ /(\d+)\.\d+/;
my $wago = $tdiff/7;
$wago = $1 if $wago =~ /(\d+\.\d)\d+/;

print "\nThis was $tdiff days ago or $wago weeks ago.\n";
