Raku Land

Interval

zef:lizmat

NAME

Interval - a DateTime that has intervals

SYNOPSIS

use Interval;          # just export the Interval class

my $a = Interval.new(2020,1,1,0,0,0);   # from 2020, interval of 1 hour
say $a;  # 2020-01-01T00:00:00Z
$a++;    # 2020-01-01T01:00:00Z         # one hour later
say $a.seconds;  # 3600

my $b = Interval[60].new(time);         # from now, interval of 1 minute
say $b;  # 2020-04-03T11:42:09Z
$b += 10;
say $b;  # 2020-04-03T11:52:09Z         # ten minutes later

use Interval :refine;   # lexical refinement of the DateTime class

my $c = DateTime[60].new(time);         # from now, interval of 1 minute
say $c;  # 2020-04-03T11:42:09Z
$c += 10;
say $c;  # 2020-04-03T11:52:09Z         # ten minutes later

DESCRIPTION

The Interval class is a parameterizable subclass of DateTime that incorporates interval information (in seconds), and the .succ and .pred methods, which allow it to be used as endpoints in Range (aka ..) or series (aka ...). Or allow it to be incremented or decremented to get to after the interval. Or add / subtract a given number of intervals.

The parameterization value is in seconds and defaults to 3600, aka 1 hour.

LEXICAL REFINEMENT

You can also use the Interval class with the :refine parameter. This will "augment" the DateTime class in the lexical scope in which the use statement is located. This allows one to not to have to change existing code using the DateTime class, while still having the added functionality of the Interval class.

Please note that the use of lexical refinement is an experiment for now, until it has proven its worth.

METHODS

succ

Produces the "next" Interval object.

pred

Produces the "previous" Interval object.

seconds

Returns the number of seconds of the interval.

OPERATORS

infix:<+>

my $b = Interval[60].new(time);         # from now, interval of 1 minute
say $b;  # 2020-04-03T11:42:09Z
$b += 10;
say $b;  # 2020-04-03T11:52:09Z         # ten minutes later

Allows adding a number of steps of the interval;

infix:<->

Allows subtracting a number of steps of the interval;

AUTHOR

Elizabeth Mattijsen liz@raku.rocks

Source can be located at: https://github.com/lizmat/Interval . Comments and Pull Requests are welcome.

COPYRIGHT AND LICENSE

Copyright 2020, 2021 Elizabeth Mattijsen

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.