Page MenuHomeIn-Portal Phabricator

D229.id536.diff
No OneTemporary

File Metadata

Created
Mon, Jan 6, 7:27 AM

D229.id536.diff

Index: core/install/english.lang
===================================================================
--- core/install/english.lang
+++ core/install/english.lang
@@ -1747,6 +1747,7 @@
<PHRASE Label="la_Windows" Module="Core" Type="1">V2luZG93cw==</PHRASE>
<PHRASE Label="la_year" Module="Core" Type="1">eWVhcg==</PHRASE>
<PHRASE Label="la_Yes" Module="Core" Type="1">WWVz</PHRASE>
+ <PHRASE Label="lc_ago" Module="Core" Type="2">YWdv</PHRASE>
<PHRASE Label="lc_field_CachedDescendantCatsQty" Module="Core" Type="2">U3ViLXNlY3Rpb25zIFF1YW50aXR5</PHRASE>
<PHRASE Label="lc_field_CachedNavBar" Module="Core" Type="2">TmF2aWdhdGlvbiBCYXI=</PHRASE>
<PHRASE Label="lc_field_cachedrating" Module="Core" Type="2">UmF0aW5n</PHRASE>
@@ -1779,6 +1780,7 @@
<PHRASE Label="lc_field_topseller" Module="Core" Type="2">SXRlbSBJcyBhIFRvcCBTZWxsZXI=</PHRASE>
<PHRASE Label="lc_field_url" Module="Core" Type="2">VVJM</PHRASE>
<PHRASE Label="lc_of" Module="Core" Type="2">b2Y=</PHRASE>
+ <PHRASE Label="lc_since" Module="Core" Type="2">c2luY2U=</PHRASE>
<PHRASE Label="lc_Text_Invalid" Module="Core" Type="2">SW52YWxpZA==</PHRASE>
<PHRASE Label="lc_Text_Not_Validated" Module="Core" Type="2">Tm90IFZhbGlkYXRlZA==</PHRASE>
<PHRASE Label="lc_Text_Valid" Module="Core" Type="2">VmFsaWQ=</PHRASE>
Index: core/kernel/utility/formatters/date_formatter.php
===================================================================
--- core/kernel/utility/formatters/date_formatter.php
+++ core/kernel/utility/formatters/date_formatter.php
@@ -264,6 +264,12 @@
$options['format'] = $options['input_format'];
}
+ if ( preg_match('/^relative(.*)/', $options['format'], $regs) ) {
+ $detalization_level = trim($regs[1], ':');
+
+ return $this->RelativeFormat($value, ($detalization_level < 1) ? 1 : $detalization_level);
+ }
+
if (!$options['use_timezone']) {
return gmdate($options['format'], $value);
}
@@ -278,6 +284,53 @@
return date($format, $value);
}
+ /**
+ * Formats value as relation to current time;
+ *
+ * @param integer $from Date.
+ * @param integer $detalization_level Detalization level.
+ *
+ * @return string
+ */
+ protected function RelativeFormat($from, $detalization_level)
+ {
+ if ( $from == TIMENOW ) {
+ $from = TIMENOW - 1;
+ }
+
+ $units = array(
+ 'year' => 29030400, // Seconds in a year (12 months).
+ 'month' => 2419200, // Seconds in a month (4 weeks).
+ 'week' => 604800, // Seconds in a week (7 days).
+ 'day' => 86400, // Seconds in a day (24 hours).
+ 'hour' => 3600, // Seconds in an hour (60 minutes).
+ 'minute' => 60, // Seconds in a minute (60 seconds).
+ 'second' => 1, // 1 second.
+ );
+
+ $diff = abs($from - TIMENOW);
+ $res = '';
+ $current_detalization_level = 0;
+
+ foreach ( $units as $unit => $multiplier ) {
+ if ( $diff >= $multiplier ) {
+ $and = (!$res || $multiplier != 1) ? '' : 'and ';
+ $res .= ', ' . $and . intval($diff / $multiplier);
+ $res .= ' ' . $unit . (intval($diff / $multiplier) == 1 ? '' : 's');
+ $diff -= intval($diff / $multiplier) * $multiplier;
+ $current_detalization_level++;
+
+ if ( $current_detalization_level >= $detalization_level ) {
+ break;
+ }
+ }
+ }
+
+ $suffix = $this->Application->Phrase($from > TIMENOW ? 'lc_since' : 'lc_ago');
+
+ return substr($res . ' ' . $suffix, strlen(', '));
+ }
+
function HumanFormat($format)
{
$patterns = Array('/m/',
@@ -506,4 +559,4 @@
{
return $this->Format( time(), $field, $object, $options['input_format']);
}
-}
\ No newline at end of file
+}

Event Timeline