Index: core/install/cache/class_structure.php =================================================================== --- core/install/cache/class_structure.php +++ core/install/cache/class_structure.php @@ -44,6 +44,7 @@ 'CustomDataEventHandler' => '/core/units/custom_data/custom_data_event_handler.php', 'CustomFieldsEventHandler' => '/core/units/custom_fields/custom_fields_event_handler.php', 'CustomFieldsTagProcessor' => '/core/units/custom_fields/custom_fields_tag_processor.php', + 'DateHelper' => '/core/units/helpers/date_helper.php', 'Debugger' => '/core/kernel/utility/debugger.php', 'DebuggerUtil' => '/core/kernel/utility/debugger.php', 'DeploymentHelper' => '/core/units/helpers/deployment_helper.php', @@ -604,6 +605,13 @@ 0 => 'kDBTagProcessor', ), ), + 'DateHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), 'Debugger' => array( 'type' => 1, 'modifiers' => 0, Index: core/install/english.lang =================================================================== --- core/install/english.lang +++ core/install/english.lang @@ -1747,6 +1747,7 @@ V2luZG93cw== eWVhcg== WWVz + YWdv U3ViLXNlY3Rpb25zIFF1YW50aXR5 TmF2aWdhdGlvbiBCYXI= UmF0aW5n @@ -1779,6 +1780,7 @@ SXRlbSBJcyBhIFRvcCBTZWxsZXI= VVJM b2Y= + c2luY2U= SW52YWxpZA== Tm90IFZhbGlkYXRlZA== VmFsaWQ= Index: core/kernel/utility/formatters/date_formatter.php =================================================================== --- core/kernel/utility/formatters/date_formatter.php +++ core/kernel/utility/formatters/date_formatter.php @@ -24,6 +24,13 @@ var $language = null; /** + * Date helper. + * + * @var DateHelper + */ + protected $dateHelper; + + /** * Create date formatter * * @access public @@ -293,6 +300,30 @@ return date($format, $value); } + /** + * Formats value as relation to current time. + * + * @param integer $from Date. + * @param integer $level_of_detail Level of details. + * + * @return string + */ + protected function relativeFormat($from, $level_of_detail) + { + if ( !isset($this->dateHelper) ) { + $this->dateHelper = $this->Application->recallObject('DateHelper'); + } + + if ( $from == TIMENOW ) { + $from = TIMENOW - 1; + } + + $suffix = $this->Application->Phrase($from > TIMENOW ? 'lc_since' : 'lc_ago'); + $res = $this->dateHelper->getHumanTime(abs($from - TIMENOW), $level_of_detail); + + return $res . ' ' . $suffix; + } + function HumanFormat($format) { $patterns = Array('/m/', @@ -510,6 +541,12 @@ return $value; } + 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 gmmktime($hour, $minute, $second, $month, $day, $year); }