App-TimelogTxt
view release on metacpan or search on metacpan
lib/App/TimelogTxt/Utils.pm view on Meta::CPAN
sub fmt_date
{
my ( $time ) = @_;
return strftime( $DATE_FMT, localtime $time );
}
sub is_today
{
my ($day) = @_;
return (!$day or $day eq $TODAY or $day eq today_stamp());
}
sub is_stop_cmd
{
my ($task) = @_;
return $task eq STOP_CMD();
}
sub has_project
{
my ($task) = @_;
return scalar( $task =~ /(?: |\A)\+\w+/ );
}
sub today_stamp
{
return App::TimelogTxt::Utils::fmt_date( time );
}
sub day_end
{
my ( $stamp ) = @_;
return unless defined $stamp;
return App::TimelogTxt::Utils::fmt_date( stamp_to_localtime( $stamp ) + $ONE_DAY );
}
sub stamp_to_localtime
{
my ( $stamp ) = @_;
return unless is_datestamp( $stamp );
my @date = split /-/, $stamp;
return unless @date == 3;
$date[0] -= 1900;
--$date[1];
return timelocal( 59, 59, 23, reverse @date );
}
sub prev_stamp
{
my ($stamp) = @_;
my $epoch = stamp_to_localtime( $stamp ) - 12 * 3600; # noon today
return fmt_date( $epoch - 86400 ); # noon yesterday
}
sub day_stamp
{
my ( $day ) = @_;
return today_stamp() if is_today( $day );
# Parse the string to generate a reasonable guess for the day.
return canonical_datestamp( $day ) if is_datestamp( $day );
$day = lc $day;
return unless grep { $day eq $_ } $YESTERDAY, @DAYS;
my $now = time;
my $delta = 0;
if( $day eq $YESTERDAY )
{
$delta = 1;
}
else
{
my $index = day_num_from_name( $day );
return if $index < 0;
my $wday = ( localtime $now )[6];
$delta = $wday - $index;
$delta += 7 if $delta < 1;
}
return fmt_date( $now - $ONE_DAY * $delta );
}
sub day_num_from_name
{
my ($day) = @_;
$day = lc $day;
my $index = 0;
foreach my $try ( @DAYS )
{
return $index if $try eq $day;
++$index;
}
return -1;
}
sub is_datestamp
{
my ($stamp) = @_;
return scalar ($stamp =~ m/\A$LAX_DATE_RE\z/);
}
sub canonical_datestamp
{
my ($stamp) = @_;
$stamp =~ tr{/}{-};
return $stamp;
}
1;
__END__
=head1 NAME
App::TimelogTxt::Utils - Utility functions for the App::TimelogTxt modules.
=head1 VERSION
This document describes App::TimelogTxt::Utils version 0.22
=head1 SYNOPSIS
( run in 1.704 second using v1.01-cache-2.11-cpan-39bf76dae61 )