%init>
use strict;
use warnings;
BEGIN { push @INC,'/home/rendler/www/lib' };
use JSON;
use CGI qw(:standard);
use POSIX qw(strftime);
use Date::Parse qw(str2time);
use WWWDBI;
my $www = WWWDBI->new();
my $dob = $www->dob();
my %entries = (
time => strftime('%A %d %B %Y %H:%M:%S %Z', localtime),
andrea => howOld($dob->{andrea}->{dob}),
nicky => howOld($dob->{nicky}->{dob})
);
$r->content_type('application/json');
print JSON->new->encode(\%entries);
sub howOld {
my $dob = str2time($_[0]);
my $now = str2time(strftime("%Y:%m:%d %H:%M:%S%z", localtime));
my ($days, $weeks, $months, $years, $remain) = (0)x5;
my $diff = $now - $dob;
$days = $diff / 86400000 * 1000;
$weeks = $days / 7;
$months = $days / 30.4375;
$years = $days / 365.24;
$remain = ($days - int($years) * 365.24) / 30.4375;
$days = rUp ($days * 10 / 10);
$weeks = $weeks * 10 / 10;
$months = $months * 10 / 10;
$remain = $remain * 10 / 10;
my @text;
if ($years >= 1) {
push @text, sprintf "%i %s", $years, ($years >= 2 ? 'years' : 'Year');
if ($remain >= 1) {
push @text, sprintf "and %i %s", $remain, ($remain >= 2 ? 'months' : 'month');
}
} elsif ($months >= 1) {
push @text, sprintf "and %i %s", $months, ($months >= 2 ? "months" : "month"), $months;
} elsif ($days >= 0) {
push @text, sprintf "and %i %s", $days, ($days >= 2 ? "days" : "day"), $days;
}
return join ' ', @text, " old. Which was $diff seconds ago.\n";
}
sub rUp {
my $n = shift;
return(($n == int($n)) ? $n : int($n + 1))
}
%init>