From 31e1c15db722d8363ceab6c97da14d703badb4f5 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Wed, 2 Oct 2013 15:44:44 +0200 Subject: [PATCH] Added dateOnly argument to relative_modified_date Improved the template function relative_modified_date by adding an optional dateOnly argument which will output "today" or "yesterday" or "x days ago". --- lib/private/template/functions.php | 40 ++++++++++++++++++++++++------ lib/public/template.php | 4 +-- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/lib/private/template/functions.php b/lib/private/template/functions.php index 501f8081bf..f0fd9999d9 100644 --- a/lib/private/template/functions.php +++ b/lib/private/template/functions.php @@ -85,22 +85,46 @@ function human_file_size( $bytes ) { return OC_Helper::humanFileSize( $bytes ); } -function relative_modified_date($timestamp) { +/** + * @brief Strips the timestamp of its time value + * @param int $timestamp UNIX timestamp to strip + * @return $timestamp without time value + */ +function strip_time($timestamp){ + $date = new \DateTime("@{$timestamp}"); + $date->setTime(0, 0, 0); + return intval($date->format('U')); +} + +/** + * @brief Formats timestamp relatively to the current time using + * a human-friendly format like "x minutes ago" or "yesterday" + * @param int $timestamp timestamp to format + * @param bool $dateOnly whether to strip time information + * @return formatted timestamp + */ +function relative_modified_date($timestamp, $dateOnly = false) { $l=OC_L10N::get('lib'); - $timediff = time() - $timestamp; + $time = time(); + if ($dateOnly){ + $time = strip_time($time); + $timestamp = strip_time($timestamp); + } + $timediff = $time - $timestamp; $diffminutes = round($timediff/60); $diffhours = round($diffminutes/60); $diffdays = round($diffhours/24); $diffmonths = round($diffdays/31); + \OC_Log::write('functions', '################ ' . $timediff . ' ' . $diffhours, \OC_Log::DEBUG); - if($timediff < 60) { return $l->t('seconds ago'); } - else if($timediff < 3600) { return $l->n('%n minute ago', '%n minutes ago', $diffminutes); } - else if($timediff < 86400) { return $l->n('%n hour ago', '%n hours ago', $diffhours); } - else if((date('G')-$diffhours) > 0) { return $l->t('today'); } - else if((date('G')-$diffhours) > -24) { return $l->t('yesterday'); } + if(!$dateOnly && $timediff < 60) { return $l->t('seconds ago'); } + else if(!$dateOnly && $timediff < 3600) { return $l->n('%n minute ago', '%n minutes ago', $diffminutes); } + else if(!$dateOnly && $timediff < 86400) { return $l->n('%n hour ago', '%n hours ago', $diffhours); } + else if((date('G', $time)-$diffhours) >= 0) { return $l->t('today'); } + else if((date('G', $time)-$diffhours) >= -24) { return $l->t('yesterday'); } else if($timediff < 2678400) { return $l->n('%n day go', '%n days ago', $diffdays); } else if($timediff < 5184000) { return $l->t('last month'); } - else if((date('n')-$diffmonths) > 0) { return $l->n('%n month ago', '%n months ago', $diffmonths); } + else if((date('n', $time)-$diffmonths) > 0) { return $l->n('%n month ago', '%n months ago', $diffmonths); } else if($timediff < 63113852) { return $l->t('last year'); } else { return $l->t('years ago'); } } diff --git a/lib/public/template.php b/lib/public/template.php index 3b1a4ed490..b3bffaf1af 100644 --- a/lib/public/template.php +++ b/lib/public/template.php @@ -90,8 +90,8 @@ function human_file_size( $bytes ) { * @param $timestamp unix timestamp * @returns human readable interpretation of the timestamp */ -function relative_modified_date($timestamp) { - return(\relative_modified_date($timestamp)); +function relative_modified_date($timestamp, $dateOnly = false) { + return(\relative_modified_date($timestamp, $dateOnly)); }