Duration Phases

Usage

You can convert a number of seconds into a phrase displaying time distances in the past (how long is it ago) or future (how long will it take).
You can also convert a UNIX timestamp, stored in variable $timestamp, to a duration phrase. $duration = time() - $timestamp; $phraser = new Alg_Time_DurationPhraser( $ranges ); $phrase = $phraser->getPhraseFromSeconds( $duration ); Forget the first line if you already have the duration is seconds.

Random Durations

secondsdateconvertedphrase
909225016.04 06:37:302525:37:30Array
417777218.02 09:29:321160:29:32Array
688097321.03 16:22:531911:22:53Array
56307967.03 05:06:361564:06:36Array
132102412.06 22:30:413669:30:41Array
767570930.03 21:08:292132:08:29Array
228588227.01 11:58:02634:58:02Array
90523411.01 12:27:14251:27:14Array
993430126.04 00:31:412759:31:41Array
950766121.04 02:01:012641:01:01Array

Intitially you need to define ranges before phrasing.
Range phrases can be defined as array... <?php $min = 60; $hour = 60 * $min; $day = 24 * $hour; $week = 7 * $day; $month = 30.4375 * $day; $year = 365.25 * $day; $ranges = array( array( 'from' => 0, 'to' => 2, 'label' => "1 second", ), array( 'from' => 2, 'to' => 1 * $min, 'label' => "{s} seconds", ), array( 'from' => 1 * $min, 'to' => 2 * $min, 'label' => "1 minute", ), array( 'from' => 2 * $min, 'to' => 15 * $min, 'label' => "{m} minutes", ), array( 'from' => 15 * $min, 'to' => 30 * $min, 'label' => "a quarter hour", ), array( 'from' => 30 * $min, 'to' => 45 * $min, 'label' => "half an hour", ), array( 'from' => 45 * $min, 'to' => 1 * $hour, 'label' => "nearly 1 hour", ), array( 'from' => 1 * $hour, 'to' => 2 * $hour, 'label' => "1 hour", ), array( 'from' => 2 * $hour, 'to' => 1 * $day, 'label' => "{h} hours", ), array( 'from' => 1 * $day, 'to' => 2 * $day, 'label' => "1 day", ), array( 'from' => 2 * $day, 'to' => 6 * $day, 'label' => "{D} days", ), array( 'from' => 6 * $day, 'to' => 1 * $week, 'label' => "nearly 1 week", ), array( 'from' => 1 * $week, 'to' => 2 * $week, 'label' => "1 week", ), array( 'from' => 2 * $week, 'to' => 3 * $week, 'label' => "{W} weeks", ), array( 'from' => 3 * $week, 'to' => 1 * $month, 'label' => "nearly 1 month", ), array( 'from' => 1 * $month, 'to' => 2 * $month, 'label' => "1 month", ), array( 'from' => 2 * $month, 'to' => 4 * $month, 'label' => "{M} months", ), array( 'from' => 4 * $month, 'to' => 6 * $month, 'label' => "a quarter year", ), array( 'from' => 6 * $month, 'to' => 9 * $month, 'label' => "half a year", ), array( 'from' => 9 * $month, 'to' => 1 * $year, 'label' => "nearly 1 year", ), array( 'from' => 1 * $year, 'to' => 2 * $year, 'label' => "1 year", ), array( 'from' => 1 * $year, 'to' => 30 * $year, 'label' => "{Y} years", ), ); ?>
... or imported from a list file... 0|2|1 second 2|60|{s} seconds 60|120|1 minute 120|900|{m} minutes 900|1800|a quarter hour 1800|2700|half an hour 2700|3600|nearly 1 hour 3600|7200|1 hour 7200|86400|{h} hours 86400|172800|1 day 172800|518400|{D} days 518400|604800|nearly 1 week 604800|1209600|1 week 1209600|1814400|{W} weeks 1814400|2629800|nearly 1 month 2629800|5259600|1 month 5259600|10519200|{M} months 10519200|15778800|a quarter year 15778800|23668200|half a year 23668200|31557600|nearly 1 year 31557600|63115200|1 year 31557600|946728000|{Y} years ... using Alg_Time_DurationPhraseRanges.

Duration phrases defined in duration.php5

secondsdateconvertedphrase
11.01 01:00:0100:00:01Array
21.01 01:00:0200:00:02Array
151.01 01:00:1500:00:15Array
301.01 01:00:3000:00:30Array
451.01 01:00:4500:00:45Array
601.01 01:01:0000:01:00Array
1151.01 01:01:5500:01:55Array
1201.01 01:02:0000:02:00Array
1501.01 01:02:3000:02:30Array
1801.01 01:03:0000:03:00Array
3001.01 01:05:0000:05:00Array
6001.01 01:10:0000:10:00Array
12001.01 01:20:0000:20:00Array
18001.01 01:30:0000:30:00Array
27001.01 01:45:0000:45:00Array
36001.01 02:00:0001:00:00Array
54001.01 02:30:0001:30:00Array
72001.01 03:00:0002:00:00Array
126001.01 04:30:0003:30:00Array
360001.01 11:00:0010:00:00Array
720001.01 21:00:0020:00:00Array
864002.01 01:00:0024:00:00Array
1296002.01 13:00:0036:00:00Array
1728003.01 01:00:0048:00:00Array
4320006.01 01:00:00120:00:00Array
5184007.01 01:00:00144:00:00Array
6048008.01 01:00:00168:00:00Array
6912009.01 01:00:00192:00:00Array
112320014.01 01:00:00312:00:00Array
120960015.01 01:00:00336:00:00Array
241920029.01 01:00:00672:00:00Array
262980031.01 11:30:00730:30:00Array
52596002.03 22:00:001461:00:00Array
78894002.04 08:30:002191:30:00Array
105192002.05 19:00:002922:00:00Array
131490002.06 05:30:003652:30:00Array
157788002.07 16:00:004383:00:00Array

rendered in 3.6ms