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 )