summaryrefslogtreecommitdiffstats
path: root/system
diff options
context:
space:
mode:
authorRoger Herbert <rogerlherbert@gmail.com>2012-03-11 12:48:50 +0100
committerRoger Herbert <rogerlherbert@gmail.com>2012-03-11 12:48:50 +0100
commit03dbcf0669abdddf6bb459a423b99e7aed73e453 (patch)
tree825c79edc3fe9af0459bbe6d354b6defcc24060d /system
parentcbdec6a863eaebf4e3edf5bffc49853cc54c8e0a (diff)
Make timespan() helper show fuzzier periods if required
Diffstat (limited to 'system')
-rw-r--r--system/helpers/date_helper.php131
1 files changed, 86 insertions, 45 deletions
diff --git a/system/helpers/date_helper.php b/system/helpers/date_helper.php
index 2a34cf93e..9f8e05bb9 100644
--- a/system/helpers/date_helper.php
+++ b/system/helpers/date_helper.php
@@ -163,7 +163,7 @@ if ( ! function_exists('standard_date'))
*/
if ( ! function_exists('timespan'))
{
- function timespan($seconds = 1, $time = '')
+ function timespan($seconds = 1, $time = '', $units = '')
{
$CI =& get_instance();
$CI->lang->load('date');
@@ -178,83 +178,124 @@ if ( ! function_exists('timespan'))
$time = time();
}
- $seconds = ($time <= $seconds) ? 1 : $time - $seconds;
+ if ( ! is_numeric($units))
+ {
+ $units = 999;
+ }
+
+ if ($time <= $seconds)
+ {
+ $seconds = 1;
+ }
+ else
+ {
+ $seconds = $time - $seconds;
+ }
- $str = '';
- $years = floor($seconds / 31557600);
+ $str = array();
+
+ // years
+
+ $years = floor($seconds / 31536000);
if ($years > 0)
{
- $str .= $years.' '.$CI->lang->line((($years > 1) ? 'date_years' : 'date_year')).', ';
+ $str[] = $years.' '.$CI->lang->line((($years > 1) ? 'date_years' : 'date_year'));
}
- $seconds -= $years * 31557600;
- $months = floor($seconds / 2629743);
+ $seconds -= $years * 31536000;
- if ($years > 0 OR $months > 0)
- {
- if ($months > 0)
+ // months
+
+ if (count($str) < $units) {
+ $months = floor($seconds / 2628000);
+
+ if ($years > 0 OR $months > 0)
{
- $str .= $months.' '.$CI->lang->line((($months > 1) ? 'date_months' : 'date_month')).', ';
- }
+ if ($months > 0)
+ {
+ $str[] = $months.' '.$CI->lang->line((($months > 1) ? 'date_months' : 'date_month'));
+ }
- $seconds -= $months * 2629743;
+ $seconds -= $months * 2628000;
+ }
}
- $weeks = floor($seconds / 604800);
+ // weeks
+
+ if (count($str) < $units) {
+ $weeks = floor($seconds / 604800);
- if ($years > 0 OR $months > 0 OR $weeks > 0)
- {
- if ($weeks > 0)
+ if ($years > 0 OR $months > 0 OR $weeks > 0)
{
- $str .= $weeks.' '.$CI->lang->line((($weeks > 1) ? 'date_weeks' : 'date_week')).', ';
- }
+ if ($weeks > 0)
+ {
+ $str[] = $weeks.' '.$CI->lang->line((($weeks > 1) ? 'date_weeks' : 'date_week'));
+ }
- $seconds -= $weeks * 604800;
+ $seconds -= $weeks * 604800;
+ }
}
- $days = floor($seconds / 86400);
+ // days
- if ($months > 0 OR $weeks > 0 OR $days > 0)
- {
- if ($days > 0)
+ if (count($str) < $units) {
+ $days = floor($seconds / 86400);
+
+ if ($months > 0 OR $weeks > 0 OR $days > 0)
{
- $str .= $days.' '.$CI->lang->line((($days > 1) ? 'date_days' : 'date_day')).', ';
- }
+ if ($days > 0)
+ {
+ $str[] = $days.' '.$CI->lang->line((($days > 1) ? 'date_days' : 'date_day'));
+ }
- $seconds -= $days * 86400;
+ $seconds -= $days * 86400;
+ }
}
- $hours = floor($seconds / 3600);
+ // hours
- if ($days > 0 OR $hours > 0)
- {
- if ($hours > 0)
+ if (count($str) < $units) {
+
+ $hours = floor($seconds / 3600);
+
+ if ($days > 0 OR $hours > 0)
{
- $str .= $hours.' '.$CI->lang->line((($hours > 1) ? 'date_hours' : 'date_hour')).', ';
- }
+ if ($hours > 0)
+ {
+ $str[] = $hours.' '.$CI->lang->line((($hours > 1) ? 'date_hours' : 'date_hour'));
+ }
- $seconds -= $hours * 3600;
+ $seconds -= $hours * 3600;
+ }
}
- $minutes = floor($seconds / 60);
+ // minutes
- if ($days > 0 OR $hours > 0 OR $minutes > 0)
- {
- if ($minutes > 0)
+ if (count($str) < $units) {
+
+ $minutes = floor($seconds / 60);
+
+ if ($days > 0 OR $hours > 0 OR $minutes > 0)
{
- $str .= $minutes.' '.$CI->lang->line((($minutes > 1) ? 'date_minutes' : 'date_minute')).', ';
- }
+ if ($minutes > 0)
+ {
+ $str[] = $minutes.' '.$CI->lang->line((($minutes > 1) ? 'date_minutes' : 'date_minute'));
+ }
- $seconds -= $minutes * 60;
+ $seconds -= $minutes * 60;
+ }
}
- if ($str == '')
- {
- $str .= $seconds.' '.$CI->lang->line((($seconds > 1) ? 'date_seconds' : 'date_second')).', ';
+ // seconds
+
+ if (count($str) == 0) {
+ {
+ $str[] = $seconds.' '.$CI->lang->line((($seconds > 1) ? 'date_seconds' : 'date_second'));
+ }
}
- return substr(trim($str), 0, -1);
+ return strtolower(implode(', ', $str));
}
}