Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
91e4ad59
Commit
91e4ad59
authored
Mar 17, 2014
by
David Renty
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
PSR-2 compliance
parent
0fa5230c
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
854 additions
and
852 deletions
+854
-852
Formatter.php
framework/base/Formatter.php
+519
-517
FormatterTest.php
tests/unit/framework/base/FormatterTest.php
+335
-335
No files found.
framework/base/Formatter.php
View file @
91e4ad59
...
@@ -27,521 +27,523 @@ use yii\helpers\Html;
...
@@ -27,521 +27,523 @@ use yii\helpers\Html;
*/
*/
class
Formatter
extends
Component
class
Formatter
extends
Component
{
{
/**
/**
* @var string the timezone to use for formatting time and date values.
* @var string the timezone to use for formatting time and date values.
* This can be any value that may be passed to [date_default_timezone_set()](http://www.php.net/manual/en/function.date-default-timezone-set.php)
* This can be any value that may be passed to [date_default_timezone_set()](http://www.php.net/manual/en/function.date-default-timezone-set.php)
* e.g. `UTC`, `Europe/Berlin` or `America/Chicago`.
* e.g. `UTC`, `Europe/Berlin` or `America/Chicago`.
* Refer to the [php manual](http://www.php.net/manual/en/timezones.php) for available timezones.
* Refer to the [php manual](http://www.php.net/manual/en/timezones.php) for available timezones.
* If this property is not set, [[\yii\base\Application::timezone]] will be used.
* If this property is not set, [[\yii\base\Application::timezone]] will be used.
*/
*/
public
$timeZone
;
public
$timeZone
;
/**
/**
* @var string the default format string to be used to format a date using PHP date() function.
* @var string the default format string to be used to format a date using PHP date() function.
*/
*/
public
$dateFormat
=
'Y/m/d'
;
public
$dateFormat
=
'Y/m/d'
;
/**
/**
* @var string the default format string to be used to format a time using PHP date() function.
* @var string the default format string to be used to format a time using PHP date() function.
*/
*/
public
$timeFormat
=
'h:i:s A'
;
public
$timeFormat
=
'h:i:s A'
;
/**
/**
* @var string the default format string to be used to format a date and time using PHP date() function.
* @var string the default format string to be used to format a date and time using PHP date() function.
*/
*/
public
$datetimeFormat
=
'Y/m/d h:i:s A'
;
public
$datetimeFormat
=
'Y/m/d h:i:s A'
;
/**
/**
* @var string the text to be displayed when formatting a null. Defaults to '<span class="not-set">(not set)</span>'.
* @var string the text to be displayed when formatting a null. Defaults to '<span class="not-set">(not set)</span>'.
*/
*/
public
$nullDisplay
;
public
$nullDisplay
;
/**
/**
* @var array the text to be displayed when formatting a boolean value. The first element corresponds
* @var array the text to be displayed when formatting a boolean value. The first element corresponds
* to the text display for false, the second element for true. Defaults to `['No', 'Yes']`.
* to the text display for false, the second element for true. Defaults to `['No', 'Yes']`.
*/
*/
public
$booleanFormat
;
public
$booleanFormat
;
/**
/**
* @var string the character displayed as the decimal point when formatting a number.
* @var string the character displayed as the decimal point when formatting a number.
* If not set, "." will be used.
* If not set, "." will be used.
*/
*/
public
$decimalSeparator
;
public
$decimalSeparator
;
/**
/**
* @var string the character displayed as the thousands separator character when formatting a number.
* @var string the character displayed as the thousands separator character when formatting a number.
* If not set, "," will be used.
* If not set, "," will be used.
*/
*/
public
$thousandSeparator
;
public
$thousandSeparator
;
/**
/**
* @var array the format used to format size (bytes). Three elements may be specified: "base", "decimals" and "decimalSeparator".
* @var array the format used to format size (bytes). Three elements may be specified: "base", "decimals" and "decimalSeparator".
* They correspond to the base at which a kilobyte is calculated (1000 or 1024 bytes per kilobyte, defaults to 1024),
* They correspond to the base at which a kilobyte is calculated (1000 or 1024 bytes per kilobyte, defaults to 1024),
* the number of digits after the decimal point (defaults to 2) and the character displayed as the decimal point.
* the number of digits after the decimal point (defaults to 2) and the character displayed as the decimal point.
*/
*/
public
$sizeFormat
=
[
public
$sizeFormat
=
[
'base'
=>
1024
,
'base'
=>
1024
,
'decimals'
=>
2
,
'decimals'
=>
2
,
'decimalSeparator'
=>
null
,
'decimalSeparator'
=>
null
,
];
];
/**
/**
* Initializes the component.
* Initializes the component.
*/
*/
public
function
init
()
public
function
init
()
{
{
if
(
$this
->
timeZone
===
null
)
{
if
(
$this
->
timeZone
===
null
)
{
$this
->
timeZone
=
Yii
::
$app
->
timeZone
;
$this
->
timeZone
=
Yii
::
$app
->
timeZone
;
}
}
if
(
empty
(
$this
->
booleanFormat
))
{
if
(
empty
(
$this
->
booleanFormat
))
{
$this
->
booleanFormat
=
[
Yii
::
t
(
'yii'
,
'No'
),
Yii
::
t
(
'yii'
,
'Yes'
)];
$this
->
booleanFormat
=
[
Yii
::
t
(
'yii'
,
'No'
),
Yii
::
t
(
'yii'
,
'Yes'
)];
}
}
if
(
$this
->
nullDisplay
===
null
)
{
if
(
$this
->
nullDisplay
===
null
)
{
$this
->
nullDisplay
=
'<span class="not-set">'
.
Yii
::
t
(
'yii'
,
'(not set)'
)
.
'</span>'
;
$this
->
nullDisplay
=
'<span class="not-set">'
.
Yii
::
t
(
'yii'
,
'(not set)'
)
.
'</span>'
;
}
}
}
}
/**
/**
* Formats the value based on the given format type.
* Formats the value based on the given format type.
* This method will call one of the "as" methods available in this class to do the formatting.
* This method will call one of the "as" methods available in this class to do the formatting.
* For type "xyz", the method "asXyz" will be used. For example, if the format is "html",
* For type "xyz", the method "asXyz" will be used. For example, if the format is "html",
* then [[asHtml()]] will be used. Format names are case insensitive.
* then [[asHtml()]] will be used. Format names are case insensitive.
* @param mixed $value the value to be formatted
* @param mixed $value the value to be formatted
* @param string|array $format the format of the value, e.g., "html", "text". To specify additional
* @param string|array $format the format of the value, e.g., "html", "text". To specify additional
* parameters of the formatting method, you may use an array. The first element of the array
* parameters of the formatting method, you may use an array. The first element of the array
* specifies the format name, while the rest of the elements will be used as the parameters to the formatting
* specifies the format name, while the rest of the elements will be used as the parameters to the formatting
* method. For example, a format of `['date', 'Y-m-d']` will cause the invocation of `asDate($value, 'Y-m-d')`.
* method. For example, a format of `['date', 'Y-m-d']` will cause the invocation of `asDate($value, 'Y-m-d')`.
* @return string the formatting result
* @return string the formatting result
* @throws InvalidParamException if the type is not supported by this class.
* @throws InvalidParamException if the type is not supported by this class.
*/
*/
public
function
format
(
$value
,
$format
)
public
function
format
(
$value
,
$format
)
{
{
if
(
is_array
(
$format
))
{
if
(
is_array
(
$format
))
{
if
(
!
isset
(
$format
[
0
]))
{
if
(
!
isset
(
$format
[
0
]))
{
throw
new
InvalidParamException
(
'The $format array must contain at least one element.'
);
throw
new
InvalidParamException
(
'The $format array must contain at least one element.'
);
}
}
$f
=
$format
[
0
];
$f
=
$format
[
0
];
$format
[
0
]
=
$value
;
$format
[
0
]
=
$value
;
$params
=
$format
;
$params
=
$format
;
$format
=
$f
;
$format
=
$f
;
}
else
{
}
else
{
$params
=
[
$value
];
$params
=
[
$value
];
}
}
$method
=
'as'
.
$format
;
$method
=
'as'
.
$format
;
if
(
$this
->
hasMethod
(
$method
))
{
if
(
$this
->
hasMethod
(
$method
))
{
return
call_user_func_array
([
$this
,
$method
],
$params
);
return
call_user_func_array
([
$this
,
$method
],
$params
);
}
else
{
}
else
{
throw
new
InvalidParamException
(
"Unknown type:
$format
"
);
throw
new
InvalidParamException
(
"Unknown type:
$format
"
);
}
}
}
}
/**
/**
* Formats the value as is without any formatting.
* Formats the value as is without any formatting.
* This method simply returns back the parameter without any format.
* This method simply returns back the parameter without any format.
* @param mixed $value the value to be formatted
* @param mixed $value the value to be formatted
* @return string the formatted result
* @return string the formatted result
*/
*/
public
function
asRaw
(
$value
)
public
function
asRaw
(
$value
)
{
{
if
(
$value
===
null
)
{
if
(
$value
===
null
)
{
return
$this
->
nullDisplay
;
return
$this
->
nullDisplay
;
}
}
return
$value
;
return
$value
;
}
}
/**
/**
* Formats the value as an HTML-encoded plain text.
* Formats the value as an HTML-encoded plain text.
* @param mixed $value the value to be formatted
* @param mixed $value the value to be formatted
* @return string the formatted result
* @return string the formatted result
*/
*/
public
function
asText
(
$value
)
public
function
asText
(
$value
)
{
{
if
(
$value
===
null
)
{
if
(
$value
===
null
)
{
return
$this
->
nullDisplay
;
return
$this
->
nullDisplay
;
}
}
return
Html
::
encode
(
$value
);
return
Html
::
encode
(
$value
);
}
}
/**
/**
* Formats the value as an HTML-encoded plain text with newlines converted into breaks.
* Formats the value as an HTML-encoded plain text with newlines converted into breaks.
* @param mixed $value the value to be formatted
* @param mixed $value the value to be formatted
* @return string the formatted result
* @return string the formatted result
*/
*/
public
function
asNtext
(
$value
)
public
function
asNtext
(
$value
)
{
{
if
(
$value
===
null
)
{
if
(
$value
===
null
)
{
return
$this
->
nullDisplay
;
return
$this
->
nullDisplay
;
}
}
return
nl2br
(
Html
::
encode
(
$value
));
return
nl2br
(
Html
::
encode
(
$value
));
}
}
/**
/**
* Formats the value as HTML-encoded text paragraphs.
* Formats the value as HTML-encoded text paragraphs.
* Each text paragraph is enclosed within a `<p>` tag.
* Each text paragraph is enclosed within a `<p>` tag.
* One or multiple consecutive empty lines divide two paragraphs.
* One or multiple consecutive empty lines divide two paragraphs.
* @param mixed $value the value to be formatted
* @param mixed $value the value to be formatted
* @return string the formatted result
* @return string the formatted result
*/
*/
public
function
asParagraphs
(
$value
)
public
function
asParagraphs
(
$value
)
{
{
if
(
$value
===
null
)
{
if
(
$value
===
null
)
{
return
$this
->
nullDisplay
;
return
$this
->
nullDisplay
;
}
}
return
str_replace
(
'<p></p>'
,
''
,
return
str_replace
(
'<p>'
.
preg_replace
(
'/[\r\n]{2,}/'
,
"</p>
\n
<p>"
,
Html
::
encode
(
$value
))
.
'</p>'
'<p></p>'
,
);
''
,
}
'<p>'
.
preg_replace
(
'/[\r\n]{2,}/'
,
"</p>
\n
<p>"
,
Html
::
encode
(
$value
))
.
'</p>'
);
/**
}
* Formats the value as HTML text.
* The value will be purified using [[HtmlPurifier]] to avoid XSS attacks.
/**
* Use [[asRaw()]] if you do not want any purification of the value.
* Formats the value as HTML text.
* @param mixed $value the value to be formatted
* The value will be purified using [[HtmlPurifier]] to avoid XSS attacks.
* @param array|null $config the configuration for the HTMLPurifier class.
* Use [[asRaw()]] if you do not want any purification of the value.
* @return string the formatted result
* @param mixed $value the value to be formatted
*/
* @param array|null $config the configuration for the HTMLPurifier class.
public
function
asHtml
(
$value
,
$config
=
null
)
* @return string the formatted result
{
*/
if
(
$value
===
null
)
{
public
function
asHtml
(
$value
,
$config
=
null
)
return
$this
->
nullDisplay
;
{
}
if
(
$value
===
null
)
{
return
HtmlPurifier
::
process
(
$value
,
$config
);
return
$this
->
nullDisplay
;
}
}
return
HtmlPurifier
::
process
(
$value
,
$config
);
/**
}
* Formats the value as a mailto link.
* @param mixed $value the value to be formatted
/**
* @return string the formatted result
* Formats the value as a mailto link.
*/
* @param mixed $value the value to be formatted
public
function
asEmail
(
$value
)
* @return string the formatted result
{
*/
if
(
$value
===
null
)
{
public
function
asEmail
(
$value
)
return
$this
->
nullDisplay
;
{
}
if
(
$value
===
null
)
{
return
Html
::
mailto
(
Html
::
encode
(
$value
),
$value
);
return
$this
->
nullDisplay
;
}
}
return
Html
::
mailto
(
Html
::
encode
(
$value
),
$value
);
/**
}
* Formats the value as an image tag.
* @param mixed $value the value to be formatted
/**
* @return string the formatted result
* Formats the value as an image tag.
*/
* @param mixed $value the value to be formatted
public
function
asImage
(
$value
)
* @return string the formatted result
{
*/
if
(
$value
===
null
)
{
public
function
asImage
(
$value
)
return
$this
->
nullDisplay
;
{
}
if
(
$value
===
null
)
{
return
Html
::
img
(
$value
);
return
$this
->
nullDisplay
;
}
}
return
Html
::
img
(
$value
);
/**
}
* Formats the value as a hyperlink.
* @param mixed $value the value to be formatted
/**
* @return string the formatted result
* Formats the value as a hyperlink.
*/
* @param mixed $value the value to be formatted
public
function
asUrl
(
$value
)
* @return string the formatted result
{
*/
if
(
$value
===
null
)
{
public
function
asUrl
(
$value
)
return
$this
->
nullDisplay
;
{
}
if
(
$value
===
null
)
{
$url
=
$value
;
return
$this
->
nullDisplay
;
if
(
strpos
(
$url
,
'http://'
)
!==
0
&&
strpos
(
$url
,
'https://'
)
!==
0
)
{
}
$url
=
'http://'
.
$url
;
$url
=
$value
;
}
if
(
strpos
(
$url
,
'http://'
)
!==
0
&&
strpos
(
$url
,
'https://'
)
!==
0
)
{
return
Html
::
a
(
Html
::
encode
(
$value
),
$url
);
$url
=
'http://'
.
$url
;
}
}
return
Html
::
a
(
Html
::
encode
(
$value
),
$url
);
/**
}
* Formats the value as a boolean.
* @param mixed $value the value to be formatted
/**
* @return string the formatted result
* Formats the value as a boolean.
* @see booleanFormat
* @param mixed $value the value to be formatted
*/
* @return string the formatted result
public
function
asBoolean
(
$value
)
* @see booleanFormat
{
*/
if
(
$value
===
null
)
{
public
function
asBoolean
(
$value
)
return
$this
->
nullDisplay
;
{
}
if
(
$value
===
null
)
{
return
$value
?
$this
->
booleanFormat
[
1
]
:
$this
->
booleanFormat
[
0
];
return
$this
->
nullDisplay
;
}
}
return
$value
?
$this
->
booleanFormat
[
1
]
:
$this
->
booleanFormat
[
0
];
/**
}
* Formats the value as a date.
* @param integer|string|DateTime $value the value to be formatted. The following
/**
* types of value are supported:
* Formats the value as a date.
*
* @param integer|string|DateTime $value the value to be formatted. The following
* - an integer representing a UNIX timestamp
* types of value are supported:
* - a string that can be parsed into a UNIX timestamp via `strtotime()`
*
* - a PHP DateTime object
* - an integer representing a UNIX timestamp
*
* - a string that can be parsed into a UNIX timestamp via `strtotime()`
* @param string $format the format used to convert the value into a date string.
* - a PHP DateTime object
* If null, [[dateFormat]] will be used. The format string should be one
*
* that can be recognized by the PHP `date()` function.
* @param string $format the format used to convert the value into a date string.
* @return string the formatted result
* If null, [[dateFormat]] will be used. The format string should be one
* @see dateFormat
* that can be recognized by the PHP `date()` function.
*/
* @return string the formatted result
public
function
asDate
(
$value
,
$format
=
null
)
* @see dateFormat
{
*/
if
(
$value
===
null
)
{
public
function
asDate
(
$value
,
$format
=
null
)
return
$this
->
nullDisplay
;
{
}
if
(
$value
===
null
)
{
$value
=
$this
->
normalizeDatetimeValue
(
$value
);
return
$this
->
nullDisplay
;
return
$this
->
formatTimestamp
(
$value
,
$format
===
null
?
$this
->
dateFormat
:
$format
);
}
}
$value
=
$this
->
normalizeDatetimeValue
(
$value
);
return
$this
->
formatTimestamp
(
$value
,
$format
===
null
?
$this
->
dateFormat
:
$format
);
/**
}
* Formats the value as a time.
* @param integer|string|DateTime $value the value to be formatted. The following
/**
* types of value are supported:
* Formats the value as a time.
*
* @param integer|string|DateTime $value the value to be formatted. The following
* - an integer representing a UNIX timestamp
* types of value are supported:
* - a string that can be parsed into a UNIX timestamp via `strtotime()`
*
* - a PHP DateTime object
* - an integer representing a UNIX timestamp
*
* - a string that can be parsed into a UNIX timestamp via `strtotime()`
* @param string $format the format used to convert the value into a date string.
* - a PHP DateTime object
* If null, [[timeFormat]] will be used. The format string should be one
*
* that can be recognized by the PHP `date()` function.
* @param string $format the format used to convert the value into a date string.
* @return string the formatted result
* If null, [[timeFormat]] will be used. The format string should be one
* @see timeFormat
* that can be recognized by the PHP `date()` function.
*/
* @return string the formatted result
public
function
asTime
(
$value
,
$format
=
null
)
* @see timeFormat
{
*/
if
(
$value
===
null
)
{
public
function
asTime
(
$value
,
$format
=
null
)
return
$this
->
nullDisplay
;
{
}
if
(
$value
===
null
)
{
$value
=
$this
->
normalizeDatetimeValue
(
$value
);
return
$this
->
nullDisplay
;
return
$this
->
formatTimestamp
(
$value
,
$format
===
null
?
$this
->
timeFormat
:
$format
);
}
}
$value
=
$this
->
normalizeDatetimeValue
(
$value
);
return
$this
->
formatTimestamp
(
$value
,
$format
===
null
?
$this
->
timeFormat
:
$format
);
/**
}
* Formats the value as a datetime.
* @param integer|string|DateTime $value the value to be formatted. The following
/**
* types of value are supported:
* Formats the value as a datetime.
*
* @param integer|string|DateTime $value the value to be formatted. The following
* - an integer representing a UNIX timestamp
* types of value are supported:
* - a string that can be parsed into a UNIX timestamp via `strtotime()`
*
* - a PHP DateTime object
* - an integer representing a UNIX timestamp
*
* - a string that can be parsed into a UNIX timestamp via `strtotime()`
* @param string $format the format used to convert the value into a date string.
* - a PHP DateTime object
* If null, [[datetimeFormat]] will be used. The format string should be one
*
* that can be recognized by the PHP `date()` function.
* @param string $format the format used to convert the value into a date string.
* @return string the formatted result
* If null, [[datetimeFormat]] will be used. The format string should be one
* @see datetimeFormat
* that can be recognized by the PHP `date()` function.
*/
* @return string the formatted result
public
function
asDatetime
(
$value
,
$format
=
null
)
* @see datetimeFormat
{
*/
if
(
$value
===
null
)
{
public
function
asDatetime
(
$value
,
$format
=
null
)
return
$this
->
nullDisplay
;
{
}
if
(
$value
===
null
)
{
$value
=
$this
->
normalizeDatetimeValue
(
$value
);
return
$this
->
nullDisplay
;
return
$this
->
formatTimestamp
(
$value
,
$format
===
null
?
$this
->
datetimeFormat
:
$format
);
}
}
$value
=
$this
->
normalizeDatetimeValue
(
$value
);
return
$this
->
formatTimestamp
(
$value
,
$format
===
null
?
$this
->
datetimeFormat
:
$format
);
/**
}
* Normalizes the given datetime value as one that can be taken by various date/time formatting methods.
* @param mixed $value the datetime value to be normalized.
/**
* @return integer the normalized datetime value
* Normalizes the given datetime value as one that can be taken by various date/time formatting methods.
*/
* @param mixed $value the datetime value to be normalized.
protected
function
normalizeDatetimeValue
(
$value
)
* @return integer the normalized datetime value
{
*/
if
(
is_string
(
$value
))
{
protected
function
normalizeDatetimeValue
(
$value
)
return
is_numeric
(
$value
)
||
$value
===
''
?
(
int
)
$value
:
strtotime
(
$value
);
{
}
elseif
(
$value
instanceof
DateTime
)
{
if
(
is_string
(
$value
))
{
return
$value
->
getTimestamp
();
return
is_numeric
(
$value
)
||
$value
===
''
?
(
int
)
$value
:
strtotime
(
$value
);
}
else
{
}
elseif
(
$value
instanceof
DateTime
)
{
return
(
int
)
$value
;
return
$value
->
getTimestamp
();
}
}
else
{
}
return
(
int
)
$value
;
}
/**
}
* @param integer $value normalized datetime value
* @param string $format the format used to convert the value into a date string.
/**
* @return string the formatted result
* @param integer $value normalized datetime value
*/
* @param string $format the format used to convert the value into a date string.
protected
function
formatTimestamp
(
$value
,
$format
)
* @return string the formatted result
{
*/
$date
=
new
DateTime
(
null
,
new
\DateTimeZone
(
$this
->
timeZone
));
protected
function
formatTimestamp
(
$value
,
$format
)
$date
->
setTimestamp
(
$value
);
{
return
$date
->
format
(
$format
);
$date
=
new
DateTime
(
null
,
new
\DateTimeZone
(
$this
->
timeZone
));
}
$date
->
setTimestamp
(
$value
);
return
$date
->
format
(
$format
);
/**
}
* Formats the value as an integer.
* @param mixed $value the value to be formatted
/**
* @return string the formatting result.
* Formats the value as an integer.
*/
* @param mixed $value the value to be formatted
public
function
asInteger
(
$value
)
* @return string the formatting result.
{
*/
if
(
$value
===
null
)
{
public
function
asInteger
(
$value
)
return
$this
->
nullDisplay
;
{
}
if
(
$value
===
null
)
{
if
(
is_string
(
$value
)
&&
preg_match
(
'/^(-?\d+)/'
,
$value
,
$matches
))
{
return
$this
->
nullDisplay
;
return
$matches
[
1
];
}
}
else
{
if
(
is_string
(
$value
)
&&
preg_match
(
'/^(-?\d+)/'
,
$value
,
$matches
))
{
$value
=
(
int
)
$value
;
return
$matches
[
1
];
return
"
$value
"
;
}
else
{
}
$value
=
(
int
)
$value
;
}
return
"
$value
"
;
}
/**
}
* Formats the value as a double number.
* Property [[decimalSeparator]] will be used to represent the decimal point.
/**
* @param mixed $value the value to be formatted
* Formats the value as a double number.
* @param integer $decimals the number of digits after the decimal point
* Property [[decimalSeparator]] will be used to represent the decimal point.
* @return string the formatting result.
* @param mixed $value the value to be formatted
* @see decimalSeparator
* @param integer $decimals the number of digits after the decimal point
*/
* @return string the formatting result.
public
function
asDouble
(
$value
,
$decimals
=
2
)
* @see decimalSeparator
{
*/
if
(
$value
===
null
)
{
public
function
asDouble
(
$value
,
$decimals
=
2
)
return
$this
->
nullDisplay
;
{
}
if
(
$value
===
null
)
{
if
(
$this
->
decimalSeparator
===
null
)
{
return
$this
->
nullDisplay
;
return
sprintf
(
"%.
{
$decimals
}
f"
,
$value
);
}
}
else
{
if
(
$this
->
decimalSeparator
===
null
)
{
return
str_replace
(
'.'
,
$this
->
decimalSeparator
,
sprintf
(
"%.
{
$decimals
}
f"
,
$value
));
return
sprintf
(
"%.
{
$decimals
}
f"
,
$value
);
}
}
else
{
}
return
str_replace
(
'.'
,
$this
->
decimalSeparator
,
sprintf
(
"%.
{
$decimals
}
f"
,
$value
));
}
/**
}
* Formats the value as a number with decimal and thousand separators.
* This method calls the PHP number_format() function to do the formatting.
/**
* @param mixed $value the value to be formatted
* Formats the value as a number with decimal and thousand separators.
* @param integer $decimals the number of digits after the decimal point
* This method calls the PHP number_format() function to do the formatting.
* @return string the formatted result
* @param mixed $value the value to be formatted
* @see decimalSeparator
* @param integer $decimals the number of digits after the decimal point
* @see thousandSeparator
* @return string the formatted result
*/
* @see decimalSeparator
public
function
asNumber
(
$value
,
$decimals
=
0
)
* @see thousandSeparator
{
*/
if
(
$value
===
null
)
{
public
function
asNumber
(
$value
,
$decimals
=
0
)
return
$this
->
nullDisplay
;
{
}
if
(
$value
===
null
)
{
$ds
=
isset
(
$this
->
decimalSeparator
)
?
$this
->
decimalSeparator
:
'.'
;
return
$this
->
nullDisplay
;
$ts
=
isset
(
$this
->
thousandSeparator
)
?
$this
->
thousandSeparator
:
','
;
}
return
number_format
(
$value
,
$decimals
,
$ds
,
$ts
);
$ds
=
isset
(
$this
->
decimalSeparator
)
?
$this
->
decimalSeparator
:
'.'
;
}
$ts
=
isset
(
$this
->
thousandSeparator
)
?
$this
->
thousandSeparator
:
','
;
return
number_format
(
$value
,
$decimals
,
$ds
,
$ts
);
/**
}
* Formats the value in bytes as a size in human readable form.
* @param integer $value value in bytes to be formatted
/**
* @param boolean $verbose if full names should be used (e.g. bytes, kilobytes, ...).
* Formats the value in bytes as a size in human readable form.
* Defaults to false meaning that short names will be used (e.g. B, KB, ...).
* @param integer $value value in bytes to be formatted
* @return string the formatted result
* @param boolean $verbose if full names should be used (e.g. bytes, kilobytes, ...).
* @see sizeFormat
* Defaults to false meaning that short names will be used (e.g. B, KB, ...).
*/
* @return string the formatted result
public
function
asSize
(
$value
,
$verbose
=
false
)
* @see sizeFormat
{
*/
$position
=
0
;
public
function
asSize
(
$value
,
$verbose
=
false
)
{
do
{
$position
=
0
;
if
(
$value
<
$this
->
sizeFormat
[
'base'
])
{
break
;
do
{
}
if
(
$value
<
$this
->
sizeFormat
[
'base'
])
{
break
;
$value
=
$value
/
$this
->
sizeFormat
[
'base'
];
}
$position
++
;
}
while
(
$position
<
6
);
$value
=
$value
/
$this
->
sizeFormat
[
'base'
];
$position
++
;
$value
=
round
(
$value
,
$this
->
sizeFormat
[
'decimals'
]);
}
while
(
$position
<
6
);
$formattedValue
=
isset
(
$this
->
sizeFormat
[
'decimalSeparator'
])
?
str_replace
(
'.'
,
$this
->
sizeFormat
[
'decimalSeparator'
],
$value
)
:
$value
;
$params
=
[
'n'
=>
$formattedValue
];
$value
=
round
(
$value
,
$this
->
sizeFormat
[
'decimals'
]);
$formattedValue
=
isset
(
$this
->
sizeFormat
[
'decimalSeparator'
])
?
str_replace
(
'.'
,
$this
->
sizeFormat
[
'decimalSeparator'
],
$value
)
:
$value
;
switch
(
$position
)
{
$params
=
[
'n'
=>
$formattedValue
];
case
0
:
return
$verbose
?
Yii
::
t
(
'yii'
,
'{n, plural, =1{# byte} other{# bytes}}'
,
$params
)
:
Yii
::
t
(
'yii'
,
'{n} B'
,
$params
);
switch
(
$position
)
{
case
1
:
case
0
:
return
$verbose
?
Yii
::
t
(
'yii'
,
'{n, plural, =1{# kilobyte} other{# kilobytes}}'
,
$params
)
:
Yii
::
t
(
'yii'
,
'{n} KB'
,
$params
);
return
$verbose
?
Yii
::
t
(
'yii'
,
'{n, plural, =1{# byte} other{# bytes}}'
,
$params
)
:
Yii
::
t
(
'yii'
,
'{n} B'
,
$params
);
case
2
:
case
1
:
return
$verbose
?
Yii
::
t
(
'yii'
,
'{n, plural, =1{# megabyte} other{# megabytes}}'
,
$params
)
:
Yii
::
t
(
'yii'
,
'{n} MB'
,
$params
);
return
$verbose
?
Yii
::
t
(
'yii'
,
'{n, plural, =1{# kilobyte} other{# kilobytes}}'
,
$params
)
:
Yii
::
t
(
'yii'
,
'{n} KB'
,
$params
);
case
3
:
case
2
:
return
$verbose
?
Yii
::
t
(
'yii'
,
'{n, plural, =1{# gigabyte} other{# gigabytes}}'
,
$params
)
:
Yii
::
t
(
'yii'
,
'{n} GB'
,
$params
);
return
$verbose
?
Yii
::
t
(
'yii'
,
'{n, plural, =1{# megabyte} other{# megabytes}}'
,
$params
)
:
Yii
::
t
(
'yii'
,
'{n} MB'
,
$params
);
case
4
:
case
3
:
return
$verbose
?
Yii
::
t
(
'yii'
,
'{n, plural, =1{# terabyte} other{# terabytes}}'
,
$params
)
:
Yii
::
t
(
'yii'
,
'{n} TB'
,
$params
);
return
$verbose
?
Yii
::
t
(
'yii'
,
'{n, plural, =1{# gigabyte} other{# gigabytes}}'
,
$params
)
:
Yii
::
t
(
'yii'
,
'{n} GB'
,
$params
);
default
:
case
4
:
return
$verbose
?
Yii
::
t
(
'yii'
,
'{n, plural, =1{# petabyte} other{# petabytes}}'
,
$params
)
:
Yii
::
t
(
'yii'
,
'{n} PB'
,
$params
);
return
$verbose
?
Yii
::
t
(
'yii'
,
'{n, plural, =1{# terabyte} other{# terabytes}}'
,
$params
)
:
Yii
::
t
(
'yii'
,
'{n} TB'
,
$params
);
}
default
:
}
return
$verbose
?
Yii
::
t
(
'yii'
,
'{n, plural, =1{# petabyte} other{# petabytes}}'
,
$params
)
:
Yii
::
t
(
'yii'
,
'{n} PB'
,
$params
);
}
/**
}
* Formats the value as the time interval between a date and now in human readable form.
* @param integer|string|DateTime|DateInterval $value the value to be formatted. The following
/**
* types of value are supported:
* Formats the value as the time interval between a date and now in human readable form.
*
* @param integer|string|DateTime|DateInterval $value the value to be formatted. The following
* - an integer representing a UNIX timestamp
* types of value are supported:
* - a string that can be parsed into a UNIX timestamp via `strtotime()` or that can be passed to a DateInterval constructor.
*
* - a PHP DateTime object
* - an integer representing a UNIX timestamp
* - a PHP DateInterval object
* - a string that can be parsed into a UNIX timestamp via `strtotime()` or that can be passed to a DateInterval constructor.
*
* - a PHP DateTime object
* @return string the formatted result
* - a PHP DateInterval object
*/
*
public
function
asRelativeTime
(
$value
,
$referenceTime
=
null
)
* @return string the formatted result
{
*/
if
(
$value
===
null
)
{
public
function
asRelativeTime
(
$value
,
$referenceTime
=
null
)
return
$this
->
nullDisplay
;
{
}
if
(
$value
===
null
)
{
return
$this
->
nullDisplay
;
if
(
$value
instanceof
\DateInterval
)
{
}
$interval
=
$value
;
}
else
{
if
(
$value
instanceof
\DateInterval
)
{
$timestamp
=
$this
->
normalizeDatetimeValue
(
$value
);
$interval
=
$value
;
}
else
{
if
(
$timestamp
===
false
)
{
$timestamp
=
$this
->
normalizeDatetimeValue
(
$value
);
// $value is not a valid date/time value, so we try
// to create a DateInterval with it
if
(
$timestamp
===
false
)
{
try
{
// $value is not a valid date/time value, so we try
$interval
=
new
\DateInterval
(
$value
);
// to create a DateInterval with it
}
catch
(
Exception
$e
)
{
try
{
// invalid date/time and invalid interval
$interval
=
new
\DateInterval
(
$value
);
return
$this
->
nullDisplay
;
}
catch
(
Exception
$e
)
{
}
// invalid date/time and invalid interval
}
else
{
return
$this
->
nullDisplay
;
$timezone
=
new
\DateTimeZone
(
$this
->
timeZone
);
}
}
else
{
if
(
$referenceTime
===
null
)
{
$timezone
=
new
\DateTimeZone
(
$this
->
timeZone
);
$dateNow
=
new
DateTime
(
'now'
,
$timezone
);
}
else
{
if
(
$referenceTime
===
null
)
{
$referenceTime
=
$this
->
normalizeDatetimeValue
(
$referenceTime
);
$dateNow
=
new
DateTime
(
'now'
,
$timezone
);
$dateNow
=
new
DateTime
(
null
,
$timezone
);
}
else
{
$dateNow
->
setTimestamp
(
$referenceTime
);
$referenceTime
=
$this
->
normalizeDatetimeValue
(
$referenceTime
);
}
$dateNow
=
new
DateTime
(
null
,
$timezone
);
$dateNow
->
setTimestamp
(
$referenceTime
);
$dateThen
=
new
DateTime
(
null
,
$timezone
);
}
$dateThen
->
setTimestamp
(
$timestamp
);
$dateThen
=
new
DateTime
(
null
,
$timezone
);
$interval
=
$dateThen
->
diff
(
$dateNow
);
$dateThen
->
setTimestamp
(
$timestamp
);
}
}
$interval
=
$dateThen
->
diff
(
$dateNow
);
}
if
(
$interval
->
invert
)
{
}
if
(
$interval
->
y
>=
1
)
{
return
Yii
::
t
(
'yii'
,
'in {delta, plural, =1{a year} other{# years}}'
,
[
'delta'
=>
$interval
->
y
]);
if
(
$interval
->
invert
)
{
}
if
(
$interval
->
y
>=
1
)
{
if
(
$interval
->
m
>=
1
)
{
return
Yii
::
t
(
'yii'
,
'in {delta, plural, =1{a year} other{# years}}'
,
[
'delta'
=>
$interval
->
y
]);
return
Yii
::
t
(
'yii'
,
'in {delta, plural, =1{a month} other{# months}}'
,
[
'delta'
=>
$interval
->
m
]);
}
}
if
(
$interval
->
m
>=
1
)
{
if
(
$interval
->
d
>=
1
)
{
return
Yii
::
t
(
'yii'
,
'in {delta, plural, =1{a month} other{# months}}'
,
[
'delta'
=>
$interval
->
m
]);
return
Yii
::
t
(
'yii'
,
'in {delta, plural, =1{a day} other{# days}}'
,
[
'delta'
=>
$interval
->
d
]);
}
}
if
(
$interval
->
d
>=
1
)
{
if
(
$interval
->
h
>=
1
)
{
return
Yii
::
t
(
'yii'
,
'in {delta, plural, =1{a day} other{# days}}'
,
[
'delta'
=>
$interval
->
d
]);
return
Yii
::
t
(
'yii'
,
'in {delta, plural, =1{an hour} other{# hours}}'
,
[
'delta'
=>
$interval
->
h
]);
}
}
if
(
$interval
->
h
>=
1
)
{
if
(
$interval
->
i
>=
1
)
{
return
Yii
::
t
(
'yii'
,
'in {delta, plural, =1{an hour} other{# hours}}'
,
[
'delta'
=>
$interval
->
h
]);
return
Yii
::
t
(
'yii'
,
'in {delta, plural, =1{a minute} other{# minutes}}'
,
[
'delta'
=>
$interval
->
i
]);
}
}
if
(
$interval
->
i
>=
1
)
{
return
Yii
::
t
(
'yii'
,
'in {delta, plural, =1{a minute} other{# minutes}}'
,
[
'delta'
=>
$interval
->
i
]);
return
Yii
::
t
(
'yii'
,
'in {delta, plural, =1{a second} other{# seconds}}'
,
[
'delta'
=>
$interval
->
s
]);
}
}
else
{
if
(
$interval
->
y
>=
1
)
{
return
Yii
::
t
(
'yii'
,
'in {delta, plural, =1{a second} other{# seconds}}'
,
[
'delta'
=>
$interval
->
s
]);
return
Yii
::
t
(
'yii'
,
'{delta, plural, =1{a year} other{# years}} ago'
,
[
'delta'
=>
$interval
->
y
]);
}
else
{
}
if
(
$interval
->
y
>=
1
)
{
if
(
$interval
->
m
>=
1
)
{
return
Yii
::
t
(
'yii'
,
'{delta, plural, =1{a year} other{# years}} ago'
,
[
'delta'
=>
$interval
->
y
]);
return
Yii
::
t
(
'yii'
,
'{delta, plural, =1{a month} other{# months}} ago'
,
[
'delta'
=>
$interval
->
m
]);
}
}
if
(
$interval
->
m
>=
1
)
{
if
(
$interval
->
d
>=
1
)
{
return
Yii
::
t
(
'yii'
,
'{delta, plural, =1{a month} other{# months}} ago'
,
[
'delta'
=>
$interval
->
m
]);
return
Yii
::
t
(
'yii'
,
'{delta, plural, =1{a day} other{# days}} ago'
,
[
'delta'
=>
$interval
->
d
]);
}
}
if
(
$interval
->
d
>=
1
)
{
if
(
$interval
->
h
>=
1
)
{
return
Yii
::
t
(
'yii'
,
'{delta, plural, =1{a day} other{# days}} ago'
,
[
'delta'
=>
$interval
->
d
]);
return
Yii
::
t
(
'yii'
,
'{delta, plural, =1{an hour} other{# hours}} ago'
,
[
'delta'
=>
$interval
->
h
]);
}
}
if
(
$interval
->
h
>=
1
)
{
if
(
$interval
->
i
>=
1
)
{
return
Yii
::
t
(
'yii'
,
'{delta, plural, =1{an hour} other{# hours}} ago'
,
[
'delta'
=>
$interval
->
h
]);
return
Yii
::
t
(
'yii'
,
'{delta, plural, =1{a minute} other{# minutes}} ago'
,
[
'delta'
=>
$interval
->
i
]);
}
}
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
]);
}
}
}
return
Yii
::
t
(
'yii'
,
'{delta, plural, =1{a second} other{# seconds}} ago'
,
[
'delta'
=>
$interval
->
s
]);
}
}
}
}
tests/unit/framework/base/FormatterTest.php
View file @
91e4ad59
...
@@ -16,339 +16,339 @@ use DateInterval;
...
@@ -16,339 +16,339 @@ use DateInterval;
*/
*/
class
FormatterTest
extends
TestCase
class
FormatterTest
extends
TestCase
{
{
/**
/**
* @var Formatter
* @var Formatter
*/
*/
protected
$formatter
;
protected
$formatter
;
protected
function
setUp
()
protected
function
setUp
()
{
{
parent
::
setUp
();
parent
::
setUp
();
$this
->
mockApplication
();
$this
->
mockApplication
();
$this
->
formatter
=
new
Formatter
();
$this
->
formatter
=
new
Formatter
();
}
}
protected
function
tearDown
()
protected
function
tearDown
()
{
{
parent
::
tearDown
();
parent
::
tearDown
();
$this
->
formatter
=
null
;
$this
->
formatter
=
null
;
}
}
public
function
testAsRaw
()
public
function
testAsRaw
()
{
{
$value
=
'123'
;
$value
=
'123'
;
$this
->
assertSame
(
$value
,
$this
->
formatter
->
asRaw
(
$value
));
$this
->
assertSame
(
$value
,
$this
->
formatter
->
asRaw
(
$value
));
$value
=
123
;
$value
=
123
;
$this
->
assertSame
(
$value
,
$this
->
formatter
->
asRaw
(
$value
));
$this
->
assertSame
(
$value
,
$this
->
formatter
->
asRaw
(
$value
));
$value
=
'<>'
;
$value
=
'<>'
;
$this
->
assertSame
(
$value
,
$this
->
formatter
->
asRaw
(
$value
));
$this
->
assertSame
(
$value
,
$this
->
formatter
->
asRaw
(
$value
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asRaw
(
null
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asRaw
(
null
));
}
}
public
function
testAsText
()
public
function
testAsText
()
{
{
$value
=
'123'
;
$value
=
'123'
;
$this
->
assertSame
(
$value
,
$this
->
formatter
->
asText
(
$value
));
$this
->
assertSame
(
$value
,
$this
->
formatter
->
asText
(
$value
));
$value
=
123
;
$value
=
123
;
$this
->
assertSame
(
"
$value
"
,
$this
->
formatter
->
asText
(
$value
));
$this
->
assertSame
(
"
$value
"
,
$this
->
formatter
->
asText
(
$value
));
$value
=
'<>'
;
$value
=
'<>'
;
$this
->
assertSame
(
'<>'
,
$this
->
formatter
->
asText
(
$value
));
$this
->
assertSame
(
'<>'
,
$this
->
formatter
->
asText
(
$value
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asText
(
null
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asText
(
null
));
}
}
public
function
testAsNtext
()
public
function
testAsNtext
()
{
{
$value
=
'123'
;
$value
=
'123'
;
$this
->
assertSame
(
$value
,
$this
->
formatter
->
asNtext
(
$value
));
$this
->
assertSame
(
$value
,
$this
->
formatter
->
asNtext
(
$value
));
$value
=
123
;
$value
=
123
;
$this
->
assertSame
(
"
$value
"
,
$this
->
formatter
->
asNtext
(
$value
));
$this
->
assertSame
(
"
$value
"
,
$this
->
formatter
->
asNtext
(
$value
));
$value
=
'<>'
;
$value
=
'<>'
;
$this
->
assertSame
(
'<>'
,
$this
->
formatter
->
asNtext
(
$value
));
$this
->
assertSame
(
'<>'
,
$this
->
formatter
->
asNtext
(
$value
));
$value
=
"123
\n
456"
;
$value
=
"123
\n
456"
;
$this
->
assertSame
(
"123<br />
\n
456"
,
$this
->
formatter
->
asNtext
(
$value
));
$this
->
assertSame
(
"123<br />
\n
456"
,
$this
->
formatter
->
asNtext
(
$value
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asNtext
(
null
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asNtext
(
null
));
}
}
public
function
testAsParagraphs
()
public
function
testAsParagraphs
()
{
{
$value
=
'123'
;
$value
=
'123'
;
$this
->
assertSame
(
"<p>
$value
</p>"
,
$this
->
formatter
->
asParagraphs
(
$value
));
$this
->
assertSame
(
"<p>
$value
</p>"
,
$this
->
formatter
->
asParagraphs
(
$value
));
$value
=
123
;
$value
=
123
;
$this
->
assertSame
(
"<p>
$value
</p>"
,
$this
->
formatter
->
asParagraphs
(
$value
));
$this
->
assertSame
(
"<p>
$value
</p>"
,
$this
->
formatter
->
asParagraphs
(
$value
));
$value
=
'<>'
;
$value
=
'<>'
;
$this
->
assertSame
(
'<p><></p>'
,
$this
->
formatter
->
asParagraphs
(
$value
));
$this
->
assertSame
(
'<p><></p>'
,
$this
->
formatter
->
asParagraphs
(
$value
));
$value
=
"123
\n
456"
;
$value
=
"123
\n
456"
;
$this
->
assertSame
(
"<p>123
\n
456</p>"
,
$this
->
formatter
->
asParagraphs
(
$value
));
$this
->
assertSame
(
"<p>123
\n
456</p>"
,
$this
->
formatter
->
asParagraphs
(
$value
));
$value
=
"123
\n\n
456"
;
$value
=
"123
\n\n
456"
;
$this
->
assertSame
(
"<p>123</p>
\n
<p>456</p>"
,
$this
->
formatter
->
asParagraphs
(
$value
));
$this
->
assertSame
(
"<p>123</p>
\n
<p>456</p>"
,
$this
->
formatter
->
asParagraphs
(
$value
));
$value
=
"123
\n\n\n
456"
;
$value
=
"123
\n\n\n
456"
;
$this
->
assertSame
(
"<p>123</p>
\n
<p>456</p>"
,
$this
->
formatter
->
asParagraphs
(
$value
));
$this
->
assertSame
(
"<p>123</p>
\n
<p>456</p>"
,
$this
->
formatter
->
asParagraphs
(
$value
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asParagraphs
(
null
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asParagraphs
(
null
));
}
}
public
function
testAsHtml
()
public
function
testAsHtml
()
{
{
// todo: dependency on HtmlPurifier
// todo: dependency on HtmlPurifier
}
}
public
function
testAsEmail
()
public
function
testAsEmail
()
{
{
$value
=
'test@sample.com'
;
$value
=
'test@sample.com'
;
$this
->
assertSame
(
"<a href=
\"
mailto:
$value
\"
>
$value
</a>"
,
$this
->
formatter
->
asEmail
(
$value
));
$this
->
assertSame
(
"<a href=
\"
mailto:
$value
\"
>
$value
</a>"
,
$this
->
formatter
->
asEmail
(
$value
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asEmail
(
null
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asEmail
(
null
));
}
}
public
function
testAsImage
()
public
function
testAsImage
()
{
{
$value
=
'http://sample.com/img.jpg'
;
$value
=
'http://sample.com/img.jpg'
;
$this
->
assertSame
(
"<img src=
\"
$value
\"
alt=
\"\"
>"
,
$this
->
formatter
->
asImage
(
$value
));
$this
->
assertSame
(
"<img src=
\"
$value
\"
alt=
\"\"
>"
,
$this
->
formatter
->
asImage
(
$value
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asImage
(
null
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asImage
(
null
));
}
}
public
function
testAsBoolean
()
public
function
testAsBoolean
()
{
{
$value
=
true
;
$value
=
true
;
$this
->
assertSame
(
'Yes'
,
$this
->
formatter
->
asBoolean
(
$value
));
$this
->
assertSame
(
'Yes'
,
$this
->
formatter
->
asBoolean
(
$value
));
$value
=
false
;
$value
=
false
;
$this
->
assertSame
(
'No'
,
$this
->
formatter
->
asBoolean
(
$value
));
$this
->
assertSame
(
'No'
,
$this
->
formatter
->
asBoolean
(
$value
));
$value
=
"111"
;
$value
=
"111"
;
$this
->
assertSame
(
'Yes'
,
$this
->
formatter
->
asBoolean
(
$value
));
$this
->
assertSame
(
'Yes'
,
$this
->
formatter
->
asBoolean
(
$value
));
$value
=
""
;
$value
=
""
;
$this
->
assertSame
(
'No'
,
$this
->
formatter
->
asBoolean
(
$value
));
$this
->
assertSame
(
'No'
,
$this
->
formatter
->
asBoolean
(
$value
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asBoolean
(
null
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asBoolean
(
null
));
}
}
public
function
testAsDate
()
public
function
testAsDate
()
{
{
$value
=
time
();
$value
=
time
();
$this
->
assertSame
(
date
(
'Y/m/d'
,
$value
),
$this
->
formatter
->
asDate
(
$value
));
$this
->
assertSame
(
date
(
'Y/m/d'
,
$value
),
$this
->
formatter
->
asDate
(
$value
));
$this
->
assertSame
(
date
(
'Y-m-d'
,
$value
),
$this
->
formatter
->
asDate
(
$value
,
'Y-m-d'
));
$this
->
assertSame
(
date
(
'Y-m-d'
,
$value
),
$this
->
formatter
->
asDate
(
$value
,
'Y-m-d'
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asDate
(
null
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asDate
(
null
));
}
}
public
function
testAsTime
()
public
function
testAsTime
()
{
{
$value
=
time
();
$value
=
time
();
$this
->
assertSame
(
date
(
'h:i:s A'
,
$value
),
$this
->
formatter
->
asTime
(
$value
));
$this
->
assertSame
(
date
(
'h:i:s A'
,
$value
),
$this
->
formatter
->
asTime
(
$value
));
$this
->
assertSame
(
date
(
'h:i:s'
,
$value
),
$this
->
formatter
->
asTime
(
$value
,
'h:i:s'
));
$this
->
assertSame
(
date
(
'h:i:s'
,
$value
),
$this
->
formatter
->
asTime
(
$value
,
'h:i:s'
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asTime
(
null
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asTime
(
null
));
}
}
public
function
testAsDatetime
()
public
function
testAsDatetime
()
{
{
$value
=
time
();
$value
=
time
();
$this
->
assertSame
(
date
(
'Y/m/d h:i:s A'
,
$value
),
$this
->
formatter
->
asDatetime
(
$value
));
$this
->
assertSame
(
date
(
'Y/m/d h:i:s A'
,
$value
),
$this
->
formatter
->
asDatetime
(
$value
));
$this
->
assertSame
(
date
(
'Y-m-d h:i:s'
,
$value
),
$this
->
formatter
->
asDatetime
(
$value
,
'Y-m-d h:i:s'
));
$this
->
assertSame
(
date
(
'Y-m-d h:i:s'
,
$value
),
$this
->
formatter
->
asDatetime
(
$value
,
'Y-m-d h:i:s'
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asDatetime
(
null
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asDatetime
(
null
));
}
}
public
function
testAsInteger
()
public
function
testAsInteger
()
{
{
$value
=
123
;
$value
=
123
;
$this
->
assertSame
(
"
$value
"
,
$this
->
formatter
->
asInteger
(
$value
));
$this
->
assertSame
(
"
$value
"
,
$this
->
formatter
->
asInteger
(
$value
));
$value
=
123.23
;
$value
=
123.23
;
$this
->
assertSame
(
"123"
,
$this
->
formatter
->
asInteger
(
$value
));
$this
->
assertSame
(
"123"
,
$this
->
formatter
->
asInteger
(
$value
));
$value
=
'a'
;
$value
=
'a'
;
$this
->
assertSame
(
"0"
,
$this
->
formatter
->
asInteger
(
$value
));
$this
->
assertSame
(
"0"
,
$this
->
formatter
->
asInteger
(
$value
));
$value
=
-
123.23
;
$value
=
-
123.23
;
$this
->
assertSame
(
"-123"
,
$this
->
formatter
->
asInteger
(
$value
));
$this
->
assertSame
(
"-123"
,
$this
->
formatter
->
asInteger
(
$value
));
$value
=
"-123abc"
;
$value
=
"-123abc"
;
$this
->
assertSame
(
"-123"
,
$this
->
formatter
->
asInteger
(
$value
));
$this
->
assertSame
(
"-123"
,
$this
->
formatter
->
asInteger
(
$value
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asInteger
(
null
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asInteger
(
null
));
}
}
public
function
testAsDouble
()
public
function
testAsDouble
()
{
{
$value
=
123.12
;
$value
=
123.12
;
$this
->
assertSame
(
"123.12"
,
$this
->
formatter
->
asDouble
(
$value
));
$this
->
assertSame
(
"123.12"
,
$this
->
formatter
->
asDouble
(
$value
));
$this
->
assertSame
(
"123.1"
,
$this
->
formatter
->
asDouble
(
$value
,
1
));
$this
->
assertSame
(
"123.1"
,
$this
->
formatter
->
asDouble
(
$value
,
1
));
$this
->
assertSame
(
"123"
,
$this
->
formatter
->
asDouble
(
$value
,
0
));
$this
->
assertSame
(
"123"
,
$this
->
formatter
->
asDouble
(
$value
,
0
));
$value
=
123
;
$value
=
123
;
$this
->
assertSame
(
"123.00"
,
$this
->
formatter
->
asDouble
(
$value
));
$this
->
assertSame
(
"123.00"
,
$this
->
formatter
->
asDouble
(
$value
));
$this
->
formatter
->
decimalSeparator
=
','
;
$this
->
formatter
->
decimalSeparator
=
','
;
$value
=
123.12
;
$value
=
123.12
;
$this
->
assertSame
(
"123,12"
,
$this
->
formatter
->
asDouble
(
$value
));
$this
->
assertSame
(
"123,12"
,
$this
->
formatter
->
asDouble
(
$value
));
$this
->
assertSame
(
"123,1"
,
$this
->
formatter
->
asDouble
(
$value
,
1
));
$this
->
assertSame
(
"123,1"
,
$this
->
formatter
->
asDouble
(
$value
,
1
));
$this
->
assertSame
(
"123"
,
$this
->
formatter
->
asDouble
(
$value
,
0
));
$this
->
assertSame
(
"123"
,
$this
->
formatter
->
asDouble
(
$value
,
0
));
$value
=
123123.123
;
$value
=
123123.123
;
$this
->
assertSame
(
"123123,12"
,
$this
->
formatter
->
asDouble
(
$value
));
$this
->
assertSame
(
"123123,12"
,
$this
->
formatter
->
asDouble
(
$value
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asDouble
(
null
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asDouble
(
null
));
}
}
public
function
testAsNumber
()
public
function
testAsNumber
()
{
{
$value
=
123123.123
;
$value
=
123123.123
;
$this
->
assertSame
(
"123,123"
,
$this
->
formatter
->
asNumber
(
$value
));
$this
->
assertSame
(
"123,123"
,
$this
->
formatter
->
asNumber
(
$value
));
$this
->
assertSame
(
"123,123.12"
,
$this
->
formatter
->
asNumber
(
$value
,
2
));
$this
->
assertSame
(
"123,123.12"
,
$this
->
formatter
->
asNumber
(
$value
,
2
));
$this
->
formatter
->
decimalSeparator
=
','
;
$this
->
formatter
->
decimalSeparator
=
','
;
$this
->
formatter
->
thousandSeparator
=
' '
;
$this
->
formatter
->
thousandSeparator
=
' '
;
$this
->
assertSame
(
"123 123"
,
$this
->
formatter
->
asNumber
(
$value
));
$this
->
assertSame
(
"123 123"
,
$this
->
formatter
->
asNumber
(
$value
));
$this
->
assertSame
(
"123 123,12"
,
$this
->
formatter
->
asNumber
(
$value
,
2
));
$this
->
assertSame
(
"123 123,12"
,
$this
->
formatter
->
asNumber
(
$value
,
2
));
$this
->
formatter
->
thousandSeparator
=
''
;
$this
->
formatter
->
thousandSeparator
=
''
;
$this
->
assertSame
(
"123123"
,
$this
->
formatter
->
asNumber
(
$value
));
$this
->
assertSame
(
"123123"
,
$this
->
formatter
->
asNumber
(
$value
));
$this
->
assertSame
(
"123123,12"
,
$this
->
formatter
->
asNumber
(
$value
,
2
));
$this
->
assertSame
(
"123123,12"
,
$this
->
formatter
->
asNumber
(
$value
,
2
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asNumber
(
null
));
$this
->
assertSame
(
$this
->
formatter
->
nullDisplay
,
$this
->
formatter
->
asNumber
(
null
));
}
}
public
function
testFormat
()
public
function
testFormat
()
{
{
$value
=
time
();
$value
=
time
();
$this
->
assertSame
(
date
(
'Y/m/d'
,
$value
),
$this
->
formatter
->
format
(
$value
,
'date'
));
$this
->
assertSame
(
date
(
'Y/m/d'
,
$value
),
$this
->
formatter
->
format
(
$value
,
'date'
));
$this
->
assertSame
(
date
(
'Y/m/d'
,
$value
),
$this
->
formatter
->
format
(
$value
,
'DATE'
));
$this
->
assertSame
(
date
(
'Y/m/d'
,
$value
),
$this
->
formatter
->
format
(
$value
,
'DATE'
));
$this
->
assertSame
(
date
(
'Y-m-d'
,
$value
),
$this
->
formatter
->
format
(
$value
,
[
'date'
,
'Y-m-d'
]));
$this
->
assertSame
(
date
(
'Y-m-d'
,
$value
),
$this
->
formatter
->
format
(
$value
,
[
'date'
,
'Y-m-d'
]));
$this
->
setExpectedException
(
'\yii\base\InvalidParamException'
);
$this
->
setExpectedException
(
'\yii\base\InvalidParamException'
);
$this
->
assertSame
(
date
(
'Y-m-d'
,
$value
),
$this
->
formatter
->
format
(
$value
,
'data'
));
$this
->
assertSame
(
date
(
'Y-m-d'
,
$value
),
$this
->
formatter
->
format
(
$value
,
'data'
));
}
}
private
function
buildDateSubIntervals
(
$referenceDate
,
$intervals
)
private
function
buildDateSubIntervals
(
$referenceDate
,
$intervals
)
{
{
$date
=
new
DateTime
(
$referenceDate
);
$date
=
new
DateTime
(
$referenceDate
);
foreach
(
$intervals
as
$interval
)
{
foreach
(
$intervals
as
$interval
)
{
$date
->
sub
(
$interval
);
$date
->
sub
(
$interval
);
}
}
return
$date
;
return
$date
;
}
}
public
function
testAsRelativeTime
()
public
function
testAsRelativeTime
()
{
{
$interval_1_second
=
new
DateInterval
(
"PT1S"
);
$interval_1_second
=
new
DateInterval
(
"PT1S"
);
$interval_244_seconds
=
new
DateInterval
(
"PT244S"
);
$interval_244_seconds
=
new
DateInterval
(
"PT244S"
);
$interval_1_minute
=
new
DateInterval
(
"PT1M"
);
$interval_1_minute
=
new
DateInterval
(
"PT1M"
);
$interval_33_minutes
=
new
DateInterval
(
"PT33M"
);
$interval_33_minutes
=
new
DateInterval
(
"PT33M"
);
$interval_1_hour
=
new
DateInterval
(
"PT1H"
);
$interval_1_hour
=
new
DateInterval
(
"PT1H"
);
$interval_6_hours
=
new
DateInterval
(
"PT6H"
);
$interval_6_hours
=
new
DateInterval
(
"PT6H"
);
$interval_1_day
=
new
DateInterval
(
"P1D"
);
$interval_1_day
=
new
DateInterval
(
"P1D"
);
$interval_89_days
=
new
DateInterval
(
"P89D"
);
$interval_89_days
=
new
DateInterval
(
"P89D"
);
$interval_1_month
=
new
DateInterval
(
"P1M"
);
$interval_1_month
=
new
DateInterval
(
"P1M"
);
$interval_5_months
=
new
DateInterval
(
"P5M"
);
$interval_5_months
=
new
DateInterval
(
"P5M"
);
$interval_1_year
=
new
DateInterval
(
"P1Y"
);
$interval_1_year
=
new
DateInterval
(
"P1Y"
);
$interval_12_years
=
new
DateInterval
(
"P12Y"
);
$interval_12_years
=
new
DateInterval
(
"P12Y"
);
// Pass a DateInterval
// Pass a DateInterval
$this
->
assertSame
(
'a second ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_second
));
$this
->
assertSame
(
'a second ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_second
));
$this
->
assertSame
(
'244 seconds ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_244_seconds
));
$this
->
assertSame
(
'244 seconds ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_244_seconds
));
$this
->
assertSame
(
'a minute ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_minute
));
$this
->
assertSame
(
'a minute ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_minute
));
$this
->
assertSame
(
'33 minutes ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_33_minutes
));
$this
->
assertSame
(
'33 minutes ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_33_minutes
));
$this
->
assertSame
(
'an hour ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_hour
));
$this
->
assertSame
(
'an hour ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_hour
));
$this
->
assertSame
(
'6 hours ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_6_hours
));
$this
->
assertSame
(
'6 hours ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_6_hours
));
$this
->
assertSame
(
'a day ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_day
));
$this
->
assertSame
(
'a day ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_day
));
$this
->
assertSame
(
'89 days ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_89_days
));
$this
->
assertSame
(
'89 days ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_89_days
));
$this
->
assertSame
(
'a month ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_month
));
$this
->
assertSame
(
'a month ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_month
));
$this
->
assertSame
(
'5 months ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_5_months
));
$this
->
assertSame
(
'5 months ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_5_months
));
$this
->
assertSame
(
'a year ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_year
));
$this
->
assertSame
(
'a year ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_year
));
$this
->
assertSame
(
'12 years ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_12_years
));
$this
->
assertSame
(
'12 years ago'
,
$this
->
formatter
->
asRelativeTime
(
$interval_12_years
));
// Pass a DateInterval string
// Pass a DateInterval string
$this
->
assertSame
(
'a year ago'
,
$this
->
formatter
->
asRelativeTime
(
'2007-03-01T13:00:00Z/2008-05-11T15:30:00Z'
));
$this
->
assertSame
(
'a year ago'
,
$this
->
formatter
->
asRelativeTime
(
'2007-03-01T13:00:00Z/2008-05-11T15:30:00Z'
));
$this
->
assertSame
(
'a year ago'
,
$this
->
formatter
->
asRelativeTime
(
'2007-03-01T13:00:00Z/P1Y2M10DT2H30M'
));
$this
->
assertSame
(
'a year ago'
,
$this
->
formatter
->
asRelativeTime
(
'2007-03-01T13:00:00Z/P1Y2M10DT2H30M'
));
$this
->
assertSame
(
'a year ago'
,
$this
->
formatter
->
asRelativeTime
(
'P1Y2M10DT2H30M/2008-05-11T15:30:00Z'
));
$this
->
assertSame
(
'a year ago'
,
$this
->
formatter
->
asRelativeTime
(
'P1Y2M10DT2H30M/2008-05-11T15:30:00Z'
));
$this
->
assertSame
(
'a year ago'
,
$this
->
formatter
->
asRelativeTime
(
'P1Y2M10DT2H30M'
));
$this
->
assertSame
(
'a year ago'
,
$this
->
formatter
->
asRelativeTime
(
'P1Y2M10DT2H30M'
));
$this
->
assertSame
(
'94 months ago'
,
$this
->
formatter
->
asRelativeTime
(
'P94M'
));
$this
->
assertSame
(
'94 months ago'
,
$this
->
formatter
->
asRelativeTime
(
'P94M'
));
// Force the reference time and pass a past DateTime
// Force the reference time and pass a past DateTime
$dateNow
=
new
DateTime
(
'2014-03-13'
);
$dateNow
=
new
DateTime
(
'2014-03-13'
);
$this
->
assertSame
(
'a second ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_second
]),
$dateNow
));
$this
->
assertSame
(
'a second ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_second
]),
$dateNow
));
$this
->
assertSame
(
'4 minutes ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_244_seconds
]),
$dateNow
));
$this
->
assertSame
(
'4 minutes ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_244_seconds
]),
$dateNow
));
$this
->
assertSame
(
'a minute ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_minute
]),
$dateNow
));
$this
->
assertSame
(
'a minute ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_minute
]),
$dateNow
));
$this
->
assertSame
(
'33 minutes ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_33_minutes
]),
$dateNow
));
$this
->
assertSame
(
'33 minutes ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_33_minutes
]),
$dateNow
));
$this
->
assertSame
(
'an hour ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_hour
]),
$dateNow
));
$this
->
assertSame
(
'an hour ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_hour
]),
$dateNow
));
$this
->
assertSame
(
'6 hours ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_6_hours
]),
$dateNow
));
$this
->
assertSame
(
'6 hours ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_6_hours
]),
$dateNow
));
$this
->
assertSame
(
'a day ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_day
]),
$dateNow
));
$this
->
assertSame
(
'a day ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_day
]),
$dateNow
));
$this
->
assertSame
(
'2 months ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_89_days
]),
$dateNow
));
$this
->
assertSame
(
'2 months ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_89_days
]),
$dateNow
));
$this
->
assertSame
(
'a month ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_month
]),
$dateNow
));
$this
->
assertSame
(
'a month ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_month
]),
$dateNow
));
$this
->
assertSame
(
'5 months ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_5_months
]),
$dateNow
));
$this
->
assertSame
(
'5 months ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_5_months
]),
$dateNow
));
$this
->
assertSame
(
'a year ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_year
]),
$dateNow
));
$this
->
assertSame
(
'a year ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_year
]),
$dateNow
));
$this
->
assertSame
(
'12 years ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_12_years
]),
$dateNow
));
$this
->
assertSame
(
'12 years ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_12_years
]),
$dateNow
));
// Tricky 31-days month stuff
// Tricky 31-days month stuff
// See: http://www.gnu.org/software/tar/manual/html_section/Relative-items-in-date-strings.html
// See: http://www.gnu.org/software/tar/manual/html_section/Relative-items-in-date-strings.html
$dateNow
=
new
DateTime
(
'2014-03-31'
);
$dateNow
=
new
DateTime
(
'2014-03-31'
);
$dateThen
=
new
DateTime
(
'2014-03-03'
);
$dateThen
=
new
DateTime
(
'2014-03-03'
);
$this
->
assertSame
(
'28 days ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-31'
,
[
$interval_1_month
]),
$dateNow
));
$this
->
assertSame
(
'28 days ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-31'
,
[
$interval_1_month
]),
$dateNow
));
$this
->
assertSame
(
'28 days ago'
,
$this
->
formatter
->
asRelativeTime
(
$dateThen
,
$dateNow
));
$this
->
assertSame
(
'28 days ago'
,
$this
->
formatter
->
asRelativeTime
(
$dateThen
,
$dateNow
));
$dateThen
=
new
DateTime
(
'2014-02-28'
);
$dateThen
=
new
DateTime
(
'2014-02-28'
);
$this
->
assertSame
(
'a month ago'
,
$this
->
formatter
->
asRelativeTime
(
$dateThen
,
$dateNow
));
$this
->
assertSame
(
'a month ago'
,
$this
->
formatter
->
asRelativeTime
(
$dateThen
,
$dateNow
));
// Relative to current time tests (can't test with seconds though
)
// Relative to current time tests (can't test with seconds though due to the tests computation time
)
$this
->
assertSame
(
'4 minutes ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_244_seconds
])));
$this
->
assertSame
(
'4 minutes ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_244_seconds
])));
$this
->
assertSame
(
'a minute ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_minute
])));
$this
->
assertSame
(
'a minute ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_minute
])));
$this
->
assertSame
(
'33 minutes ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_33_minutes
])));
$this
->
assertSame
(
'33 minutes ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_33_minutes
])));
$this
->
assertSame
(
'an hour ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_hour
])));
$this
->
assertSame
(
'an hour ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_hour
])));
$this
->
assertSame
(
'6 hours ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_6_hours
])));
$this
->
assertSame
(
'6 hours ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_6_hours
])));
$this
->
assertSame
(
'a day ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_day
])));
$this
->
assertSame
(
'a day ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_day
])));
$this
->
assertSame
(
'2 months ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_89_days
])));
$this
->
assertSame
(
'2 months ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_89_days
])));
$this
->
assertSame
(
'a month ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_month
])));
$this
->
assertSame
(
'a month ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_month
])));
$this
->
assertSame
(
'5 months ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_5_months
])));
$this
->
assertSame
(
'5 months ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_5_months
])));
$this
->
assertSame
(
'a year ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_year
])));
$this
->
assertSame
(
'a year ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_year
])));
$this
->
assertSame
(
'12 years ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_12_years
])));
$this
->
assertSame
(
'12 years ago'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_12_years
])));
// Invert all the DateIntervals
// Invert all the DateIntervals
$interval_1_second
->
invert
=
true
;
$interval_1_second
->
invert
=
true
;
$interval_244_seconds
->
invert
=
true
;
$interval_244_seconds
->
invert
=
true
;
$interval_1_minute
->
invert
=
true
;
$interval_1_minute
->
invert
=
true
;
$interval_33_minutes
->
invert
=
true
;
$interval_33_minutes
->
invert
=
true
;
$interval_1_hour
->
invert
=
true
;
$interval_1_hour
->
invert
=
true
;
$interval_6_hours
->
invert
=
true
;
$interval_6_hours
->
invert
=
true
;
$interval_1_day
->
invert
=
true
;
$interval_1_day
->
invert
=
true
;
$interval_89_days
->
invert
=
true
;
$interval_89_days
->
invert
=
true
;
$interval_1_month
->
invert
=
true
;
$interval_1_month
->
invert
=
true
;
$interval_5_months
->
invert
=
true
;
$interval_5_months
->
invert
=
true
;
$interval_1_year
->
invert
=
true
;
$interval_1_year
->
invert
=
true
;
$interval_12_years
->
invert
=
true
;
$interval_12_years
->
invert
=
true
;
// Pass a inverted DateInterval
// Pass a inverted DateInterval
$this
->
assertSame
(
'in a second'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_second
));
$this
->
assertSame
(
'in a second'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_second
));
$this
->
assertSame
(
'in 244 seconds'
,
$this
->
formatter
->
asRelativeTime
(
$interval_244_seconds
));
$this
->
assertSame
(
'in 244 seconds'
,
$this
->
formatter
->
asRelativeTime
(
$interval_244_seconds
));
$this
->
assertSame
(
'in a minute'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_minute
));
$this
->
assertSame
(
'in a minute'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_minute
));
$this
->
assertSame
(
'in 33 minutes'
,
$this
->
formatter
->
asRelativeTime
(
$interval_33_minutes
));
$this
->
assertSame
(
'in 33 minutes'
,
$this
->
formatter
->
asRelativeTime
(
$interval_33_minutes
));
$this
->
assertSame
(
'in an hour'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_hour
));
$this
->
assertSame
(
'in an hour'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_hour
));
$this
->
assertSame
(
'in 6 hours'
,
$this
->
formatter
->
asRelativeTime
(
$interval_6_hours
));
$this
->
assertSame
(
'in 6 hours'
,
$this
->
formatter
->
asRelativeTime
(
$interval_6_hours
));
$this
->
assertSame
(
'in a day'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_day
));
$this
->
assertSame
(
'in a day'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_day
));
$this
->
assertSame
(
'in 89 days'
,
$this
->
formatter
->
asRelativeTime
(
$interval_89_days
));
$this
->
assertSame
(
'in 89 days'
,
$this
->
formatter
->
asRelativeTime
(
$interval_89_days
));
$this
->
assertSame
(
'in a month'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_month
));
$this
->
assertSame
(
'in a month'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_month
));
$this
->
assertSame
(
'in 5 months'
,
$this
->
formatter
->
asRelativeTime
(
$interval_5_months
));
$this
->
assertSame
(
'in 5 months'
,
$this
->
formatter
->
asRelativeTime
(
$interval_5_months
));
$this
->
assertSame
(
'in a year'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_year
));
$this
->
assertSame
(
'in a year'
,
$this
->
formatter
->
asRelativeTime
(
$interval_1_year
));
$this
->
assertSame
(
'in 12 years'
,
$this
->
formatter
->
asRelativeTime
(
$interval_12_years
));
$this
->
assertSame
(
'in 12 years'
,
$this
->
formatter
->
asRelativeTime
(
$interval_12_years
));
// Pass a inverted DateInterval string
// Pass a inverted DateInterval string
$this
->
assertSame
(
'in a year'
,
$this
->
formatter
->
asRelativeTime
(
'2008-05-11T15:30:00Z/2007-03-01T13:00:00Z'
));
$this
->
assertSame
(
'in a year'
,
$this
->
formatter
->
asRelativeTime
(
'2008-05-11T15:30:00Z/2007-03-01T13:00:00Z'
));
// Force the reference time and pass a future DateTime
// Force the reference time and pass a future DateTime
$dateNow
=
new
DateTime
(
'2014-03-13'
);
$dateNow
=
new
DateTime
(
'2014-03-13'
);
$this
->
assertSame
(
'in a second'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_second
]),
$dateNow
));
$this
->
assertSame
(
'in a second'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_second
]),
$dateNow
));
$this
->
assertSame
(
'in 4 minutes'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_244_seconds
]),
$dateNow
));
$this
->
assertSame
(
'in 4 minutes'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_244_seconds
]),
$dateNow
));
$this
->
assertSame
(
'in a minute'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_minute
]),
$dateNow
));
$this
->
assertSame
(
'in a minute'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_minute
]),
$dateNow
));
$this
->
assertSame
(
'in 33 minutes'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_33_minutes
]),
$dateNow
));
$this
->
assertSame
(
'in 33 minutes'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_33_minutes
]),
$dateNow
));
$this
->
assertSame
(
'in an hour'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_hour
]),
$dateNow
));
$this
->
assertSame
(
'in an hour'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_hour
]),
$dateNow
));
$this
->
assertSame
(
'in 6 hours'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_6_hours
]),
$dateNow
));
$this
->
assertSame
(
'in 6 hours'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_6_hours
]),
$dateNow
));
$this
->
assertSame
(
'in a day'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_day
]),
$dateNow
));
$this
->
assertSame
(
'in a day'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_day
]),
$dateNow
));
$this
->
assertSame
(
'in 2 months'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_89_days
]),
$dateNow
));
$this
->
assertSame
(
'in 2 months'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_89_days
]),
$dateNow
));
$this
->
assertSame
(
'in a month'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_month
]),
$dateNow
));
$this
->
assertSame
(
'in a month'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_month
]),
$dateNow
));
$this
->
assertSame
(
'in 5 months'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_5_months
]),
$dateNow
));
$this
->
assertSame
(
'in 5 months'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_5_months
]),
$dateNow
));
$this
->
assertSame
(
'in a year'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_year
]),
$dateNow
));
$this
->
assertSame
(
'in a year'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_1_year
]),
$dateNow
));
$this
->
assertSame
(
'in 12 years'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_12_years
]),
$dateNow
));
$this
->
assertSame
(
'in 12 years'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-13'
,
[
$interval_12_years
]),
$dateNow
));
// Tricky 31-days month stuff
// Tricky 31-days month stuff
// See: http://www.gnu.org/software/tar/manual/html_section/Relative-items-in-date-strings.html
// See: http://www.gnu.org/software/tar/manual/html_section/Relative-items-in-date-strings.html
$dateNow
=
new
DateTime
(
'2014-03-03'
);
$dateNow
=
new
DateTime
(
'2014-03-03'
);
$dateThen
=
new
DateTime
(
'2014-03-31'
);
$dateThen
=
new
DateTime
(
'2014-03-31'
);
$this
->
assertSame
(
'in a month'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-03'
,
[
$interval_1_month
]),
$dateNow
));
$this
->
assertSame
(
'in a month'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'2014-03-03'
,
[
$interval_1_month
]),
$dateNow
));
$this
->
assertSame
(
'in 28 days'
,
$this
->
formatter
->
asRelativeTime
(
$dateThen
,
$dateNow
));
$this
->
assertSame
(
'in 28 days'
,
$this
->
formatter
->
asRelativeTime
(
$dateThen
,
$dateNow
));
// Relative to current time tests (can't test with seconds though
)
// Relative to current time tests (can't test with seconds though due to the tests computation time
)
// We add 5 seconds to compensate for tests computation time
// We add 5 seconds to compensate for tests computation time
$interval_5_seconds
=
new
DateInterval
(
'PT5S'
);
$interval_5_seconds
=
new
DateInterval
(
'PT5S'
);
$interval_5_seconds
->
invert
=
true
;
$interval_5_seconds
->
invert
=
true
;
$this
->
assertSame
(
'in 4 minutes'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_244_seconds
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in 4 minutes'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_244_seconds
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in a minute'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_minute
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in a minute'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_minute
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in 33 minutes'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_33_minutes
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in 33 minutes'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_33_minutes
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in an hour'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_hour
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in an hour'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_hour
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in 6 hours'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_6_hours
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in 6 hours'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_6_hours
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in a day'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_day
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in a day'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_day
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in 2 months'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_89_days
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in 2 months'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_89_days
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in a month'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_month
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in a month'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_month
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in 5 months'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_5_months
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in 5 months'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_5_months
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in a year'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_year
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in a year'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_1_year
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in 12 years'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_12_years
,
$interval_5_seconds
])));
$this
->
assertSame
(
'in 12 years'
,
$this
->
formatter
->
asRelativeTime
(
$this
->
buildDateSubIntervals
(
'now'
,
[
$interval_12_years
,
$interval_5_seconds
])));
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment