Interval calculator to help sum up multiple time intervals and display the total elapsed days/hours/minutes/seconds

1.0.1 2018-06-28 07:23 UTC

README

Time interval calculator.

Allows interval to be summed up and provides easy access the number of seconds/minutes/hours/days included in the interval.

Installation

Using Composer:

composer require savvywombat/ahora

Usage

Creation

You can simply create a new interval which has zero time by creating a new instance:

use SavvyWombat\Ahora\Interval;

$interval = new Interval();

echo $interval->seconds; // outputs 0

Alternatively, you can create an interval from a PHP DateInterval, or from an ISO8601 interval specification:

use SavvyWombat\Ahora\Interval;

$date1 = new \DateTime("now");
$date2 = new \DateTime("2018-01-01");

$interval = Interval::createFromDateInterval($date1->diff($date2));

// or

$interval = Interval::createFromIntervalSpec("P28DT6H42M12S");

Interval math

Once you have an interval, you can easily add a number of seconds, minutes, hours, or days:

$interval = new Interval();

$interval->addSeconds(60); // equivalent to $interval->addMinutes(1);
$interval->addMinutes(60); // equivalent to $interval->addHours(1);
$interval->addHours(24); // equivalent to $interval->addDays(1);
$interval->addDays(7);

It is also possible to add intervals together:

$firstInterval = new Interval();
$firstInterval->addSeconds(45);

$secondInterval = new Interval();
$secondInterval->addSeconds(70);

$firstInterval->addInterval($secondInterval);

echo $firstInterval->seconds; // outputs 55
echo $firstInterval->minutes; // outputs 1

echo $firstInterval->realSeconds; // outputs 115

Units and factors

It is possible to inject additional units into the interval (such as weeks).

You can even modify or completely replace the units that the interval uses - with the limitation that one unit must be a multiple of seconds

$interval = new Interval();
$interval->addDays(10);

echo $interval->days; // outputs 10

$interval->setFactor('weeks', [7, 'days']);

echo $interval->realHours; // outputs 240
echo $interval->days; // outputs 3
echo $interval->weeks; // outputs 1


$interval->setFactor('days', [8, 'hours']);
$interval->setFactor('weeks', [5, 'days']);

echo $interval->realHours; // outputs 240
echo $interval->days; // outputs 2
echo $interval->weeks; // outputs 4

Obviously, changing these multipliers can have some drastic effects on the interval's outputs.

$interval = new Interval();

$oldFactors = $interval->getFactors(); // [ 
                                       //   'minutes' => [60, 'seconds'], 
                                       //   'hours' => [60, 'minutes'],
                                       //   'days' => [24, 'hours'],
                                       // ]

$interval->setFactors([
    'microts' => [1, 'seconds'], // one unit must be related to seconds
    'arns' => [3600, 'microts'],
    'days' => [24, 'arns'],
    'cycles' => [360, 'days'],
]);

$interval->addDays(400);

echo $interval->cycles; // outputs 1
echo $interval->days; // outputs 40

Support

If you are having general issues with this repository, please contact us via the SavvyWombat website.

Please report issues using the GitHub issue tracker. You are also welcome to fork the repository and submit a pull request.

If you're using this repository, we'd love to hear your thoughts. Thanks!

Licence

Ahora is licensed under The MIT License (MIT).