Skip to content

Convert durations of time between colon-formatted, human-readable, and seconds

License

Notifications You must be signed in to change notification settings

kevinkhill/php-duration

Folders and files

NameName
Last commit message
Last commit date

Latest commit

dcb222f · Mar 17, 2021

History

54 Commits
Mar 15, 2021
Feb 14, 2019
Apr 5, 2016
Mar 15, 2021
Apr 5, 2016
Feb 14, 2019
Mar 15, 2021
Mar 15, 2021
Apr 5, 2016

Repository files navigation

PHP-Duration

Convert durations between colon formatted time, human-readable time and seconds

Total Downloads License Minimum PHP Version PayPal

Current Release Build Status Coverage Status

This package was created with a very specific goal in mind, to enable an easy way for users to input how long something took, as a duration of time.

The library can accept either in colon separated format, like 2:43 for 2 minutes and 43 seconds OR written as human readable or abbreviated time, such as 6m21s for 6 minutes and 21 seconds.

Both can be converted into seconds and minutes with precision for easy storage into a database.

Seconds, colon separated, abbreviated, all three can be parsed and interchanged.

  • supports hours, minutes, and seconds (with microseconds)
  • humanized input supports any form of the words "hour", "minute", "seconds"
    • Example, you could input 1h4m2s or 4 Hr. 32 Min.

Install

composer require khill/php-duration:~1.0

Usage

use Khill\Duration\Duration;


$duration = new Duration('7:31');

echo $duration->humanize();  // 7m 31s
echo $duration->formatted(); // 7:31
echo $duration->toSeconds(); // 451
echo $duration->toMinutes(); // 7.5166
echo $duration->toMinutes(null, 0); // 8
echo $duration->toMinutes(null, 2); // 7.52
$duration = new Duration('1h 2m 5s');

echo $duration->humanize();  // 1h 2m 5s
echo $duration->formatted(); // 1:02:05
echo $duration->toSeconds(); // 3725
echo $duration->toMinutes(); // 62.0833
echo $duration->toMinutes(null, 0); // 62
// Configured for 6 hours per day
$duration = new Duration('1.5d 1.5h 2m 5s', 6);

echo $duration->humanize();  // 1d 4h 32m 5s
echo $duration->formatted(); // 10:32:05
echo $duration->toSeconds(); // 37925
echo $duration->toMinutes(); // 632.083333333
echo $duration->toMinutes(null, 0); // 632
$duration = new Duration('4293');

echo $duration->humanize();  // 1h 11m 33s
echo $duration->formatted(); // 1:11:33
echo $duration->toSeconds(); // 4293
echo $duration->toMinutes(); // 71.55
echo $duration->toMinutes(null, 0); // 72

Note

You do not have to create a new object for each conversion, you can also pass any of the three forms into any of the methods to get the immediate output.

$duration = new Duration;

echo $duration->humanize('1h 2m 5s');  // 1h 2m 5s
echo $duration->formatted('1h 2m 5s'); // 1:02:05
echo $duration->toSeconds('1h 2m 5s'); // 3725
echo $duration->toMinutes('1h 2m 5s'); // 62.0833
echo $duration->toMinutes('1h 2m 5s', true); // 62