NAME
Mojar::Cron::Date - Integer arithmetic for ISO dates
SYNOPSIS
say
Mojar::Cron::Date->
$_
for
qw(yesterday today tomorrow)
;
DESCRIPTION
Methods for manipulating simple dates.
First, make a date. That should either be using your machine's local timezone:
$local_date
= Mojar::Cron::Date->yesterday;
$local_date
= Mojar::Cron::Date->today;
$local_date
= Mojar::Cron::Date->tomorrow;
or using UTC:
$utc_date
= Mojar::Cron::Date->current->previous;
$utc_date
= Mojar::Cron::Date->current;
$utc_date
= Mojar::Cron::Date->current->
next
;
or via a literal value:
$date
= Mojar::Cron::Date->new(
'2005-02-14'
);
or by copying:
$copied_date
=
$date
->new;
Then once you have a date, it is timezone-neutral -- you simply roll forwards or backwards.
$date
->roll(1);
$date
->roll_back(1);
$date
->roll_back(7);
$date
->roll(-7);
$date
->roll_to(0);
Or you can go non-mutating by creating fresh dates equal to those values.
$future_date
=
$date
->
next
;
$past_date
=
$date
->previous;
$past_date
=
$date
->
before
(7);
$past_date
=
$date
->
after
(-7);
$soon_date
=
$date
->new->roll_to(0);
PORTABILITY CAVEAT
This module makes heavy use of POSIX::strftime
and is not expected to work on platforms where that is missing or faulty. It is tested regularly on linux.
CONSTRUCTORS
current
The date of the current UTC time.
$utc_date
= Mojar::Cron::Date->current;
today
The date of the current local time.
$local_date
= Mojar::Cron::Date->today;
tomorrow
The date after today.
$local_date
= Mojar::Cron::Date->tomorrow;
yesterday
The date before today.
$local_date
= Mojar::Cron::Date->yesterday;
METHODS
after
A non-mutating generator for a fresh date that is this many nights after the source (invoker) date.
$future_date
=
$date
->
after
(28);
before
A non-mutating generator for a fresh date that is this many nights before the source (invoker) date.
$past_date
=
$date
->
before
(28);
dow
The numeric weekday of this date.
$date
->roll_to(1);
# Now on a Monday
my
$dow_id
=
$date
->dow;
# 1 : Mon
The answer will a number from 0 to 6, with 0 indicating Sunday and 6 Saturday.
format
$epoch_seconds
=
$date
->
format
(
'%s'
)
$month_name
=
$date
->
format
(
'%B'
)
Format the date to a string.
is_weekend
next
previous
roll
Roll date forwards by a number of nights.
$date
->roll(1);
# next day
$date
->roll(7);
# week later
roll_back
Roll date backwards by a number of nights.
$date
->roll_back(1);
# previous day
$date
->roll_back(7);
# week earlier
which are equivalent to
$date
->roll(-1);
$date
->roll(-7);
roll_to
Roll date forwards by the least amount to make it the specified weekday. The most it can roll forwards is 6 nights.
$date
->roll_to(0);
# 0 : Sun
$date
->roll_to(1);
# 1 : Mon
...
$date
->roll_to(6);
# 6 : Sat
If $date
is a Monday, then $date-
roll_to(1)> will make no change since it is already on a Monday. On the other hand, $date-
roll_to(0)> will make it roll forwards 6 nights to get to the following Sunday.
Like the other roll*
methods, roll_to
is also a mutator. For the non-mutating equivalent, first copy with new
.
$soon
=
$date
->new->roll_to(0);
sleeps (*linux only*)
How many sleeps till the specified date? The answer will be positive if given a future date, negative if given a past date.
$sleeps
=
$date
->sleeps(
$my_next_birthday
);
FUNCTIONS
sort
@sorted
=
sort
{
$a
cmp
$b
}
@dates
@reverse
=
sort
{
$b
cmp
$a
}
@dates
@sorted
=
sort
{
$a
<=>
$b
}
@dates
@reverse
=
sort
{
$b
<=>
$a
}
@dates
Built-in forward and reverse sorting works, giving the same result with either operator.
COPYRIGHT AND LICENCE
Copyright (C) 2016--2022, Nic Sandfield.
This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.