mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-02 13:02:24 +08:00
Added support for inverted intervals (future time) and unit tests
This commit is contained in:
@ -468,7 +468,7 @@ class Formatter extends Component
|
||||
*
|
||||
* @return string the formatted result
|
||||
*/
|
||||
public function asElapsedTime($value)
|
||||
public function asRelativeTime($value, $referenceTime=null)
|
||||
{
|
||||
if ($value === null) {
|
||||
return $this->nullDisplay;
|
||||
@ -490,41 +490,60 @@ class Formatter extends Component
|
||||
}
|
||||
} else {
|
||||
$timezone = new \DateTimeZone($this->timeZone);
|
||||
|
||||
if ($referenceTime === null) {
|
||||
$dateNow = new DateTime('now', $timezone);
|
||||
} else {
|
||||
$referenceTime = $this->normalizeDatetimeValue($referenceTime);
|
||||
$dateNow = new DateTime(null, $timezone);
|
||||
$dateNow->setTimestamp($referenceTime);
|
||||
}
|
||||
|
||||
$dateNow = new DateTime('now', $timezone);
|
||||
$dateThen = new DateTime(null, $timezone);
|
||||
$dateThen->setTimestamp($timestamp);
|
||||
|
||||
$interval = $dateNow->diff($dateThen);
|
||||
$interval = $dateThen->diff($dateNow);
|
||||
var_dump($dateThen);
|
||||
var_dump($dateNow);
|
||||
}
|
||||
}
|
||||
|
||||
if ($interval->y >= 1) {
|
||||
$delta = $interval->y;
|
||||
return Yii::t('yii', '{delta, plural, =1{a year} other{# years}} ago', ['delta' => $delta]);
|
||||
}
|
||||
if ($interval->m >= 1) {
|
||||
$delta = $interval->m;
|
||||
return Yii::t('yii', '{delta, plural, =1{a month} other{# months}} ago', ['delta' => $delta]);
|
||||
}
|
||||
if ($interval->d >= 7) {
|
||||
$delta = floor($interval->d / 7);
|
||||
return Yii::t('yii', '{delta, plural, =1{a week} other{# weeks}} ago', ['delta' => $delta]);
|
||||
}
|
||||
if ($interval->d >= 1) {
|
||||
$delta = $interval->d;
|
||||
return Yii::t('yii', '{delta, plural, =1{yesterday} other{# days ago}}', ['delta' => $delta]);
|
||||
}
|
||||
if ($interval->h >= 1) {
|
||||
$delta = $interval->h;
|
||||
return Yii::t('yii', '{delta, plural, =1{an hour} other{# hours}} ago', ['delta' => $delta]);
|
||||
}
|
||||
if ($interval->i >= 1) {
|
||||
$delta = $interval->i;
|
||||
return Yii::t('yii', '{delta, plural, =1{a minute} other{# minutes}} ago', ['delta' => $delta]);
|
||||
}
|
||||
if ($interval->invert) {
|
||||
if ($interval->y >= 1) {
|
||||
return Yii::t('yii', 'in {delta, plural, =1{a year} other{# years}}', ['delta' => $interval->y]);
|
||||
}
|
||||
if ($interval->m >= 1) {
|
||||
return Yii::t('yii', 'in {delta, plural, =1{a month} other{# months}}', ['delta' => $interval->m]);
|
||||
}
|
||||
if ($interval->d >= 1) {
|
||||
return Yii::t('yii', 'in {delta, plural, =1{a day} other{# days}}', ['delta' => $interval->d]);
|
||||
}
|
||||
if ($interval->h >= 1) {
|
||||
return Yii::t('yii', 'in {delta, plural, =1{an hour} other{# hours}}', ['delta' => $interval->h]);
|
||||
}
|
||||
if ($interval->i >= 1) {
|
||||
return Yii::t('yii', 'in {delta, plural, =1{a minute} other{# minutes}}', ['delta' => $interval->i]);
|
||||
}
|
||||
|
||||
$delta = $interval->s;
|
||||
return Yii::t('yii', '{delta, plural, =1{a second} other{# seconds}} ago', ['delta' => $delta]);
|
||||
return Yii::t('yii', 'in {delta, plural, =1{a second} other{# seconds}}', ['delta' => $interval->s]);
|
||||
} else {
|
||||
if ($interval->y >= 1) {
|
||||
return Yii::t('yii', '{delta, plural, =1{a year} other{# years}} ago', ['delta' => $interval->y]);
|
||||
}
|
||||
if ($interval->m >= 1) {
|
||||
return Yii::t('yii', '{delta, plural, =1{a month} other{# months}} ago', ['delta' => $interval->m]);
|
||||
}
|
||||
if ($interval->d >= 1) {
|
||||
return Yii::t('yii', '{delta, plural, =1{a day} other{# days}} ago', ['delta' => $interval->d]);
|
||||
}
|
||||
if ($interval->h >= 1) {
|
||||
return Yii::t('yii', '{delta, plural, =1{an hour} other{# hours}} ago', ['delta' => $interval->h]);
|
||||
}
|
||||
if ($interval->i >= 1) {
|
||||
return Yii::t('yii', '{delta, plural, =1{a minute} other{# minutes}} ago', ['delta' => $interval->i]);
|
||||
}
|
||||
|
||||
return Yii::t('yii', '{delta, plural, =1{a second} other{# seconds}} ago', ['delta' => $interval->s]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user