IntlDateFormatter::localtime
datefmt_localtime
(PHP 5 >= 5.3.0, PECL intl >= 1.0.0)
IntlDateFormatter::localtime -- datefmt_localtime — Parse string to a field-based time value
Description
Object oriented style
$value
[, int &$position
] )Procedural style
Converts string $value to a field-based time value ( an array of various fields), starting at $parse_pos and consuming as much of the input value as possible.
Parameters
-
fmt
-
The formatter resource
-
value
-
string to convert to a time
-
position
-
Position at which to start the parsing in $value (zero-based). If no error occurs before $value is consumed, $parse_pos will contain -1 otherwise it will contain the position at which parsing ended . If $parse_pos > strlen($value), the parse fails immediately.
Return Values
Localtime compatible array of integers : contains 24 hour clock value in tm_hour field
Examples
Example #1 datefmt_localtime() example
<?php
$fmt = datefmt_create(
'en_US',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Los_Angeles',
IntlDateFormatter::GREGORIAN
);
$arr = datefmt_localtime($fmt, 'Wednesday, December 31, 1969 4:00:00 PM PT', 0);
echo 'First parsed output is ';
if ($arr) {
foreach ($arr as $key => $value) {
echo "$key : $value , ";
}
}
?>
Example #2 OO example
<?php
$fmt = new IntlDateFormatter(
'en_US',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Los_Angeles',
IntlDateFormatter::GREGORIAN
);
$arr = $fmt->localtime('Wednesday, December 31, 1969 4:00:00 PM PT', 0);
echo 'First parsed output is ';
if ($arr) {
foreach ($arr as $key => $value) {
echo "$key : $value , ";
}
}
?>
The above example will output:
First parsed output is tm_sec : 0 , tm_min : 0 , tm_hour : 16 , tm_year : 1969 , tm_mday : 31 , tm_wday : 4 , tm_yday : 365 , tm_mon : 11 , tm_isdst : 0 ,
See Also
- datefmt_create() - Create a date formatter
- datefmt_format() - Format the date/time value as a string
- datefmt_parse() - Parse string to a timestamp value
- datefmt_get_error_code() - Get the error code from last operation
- datefmt_get_error_message() - Get the error text from the last operation.
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Поддержка языков и кодировок
- Internationalization Functions
- Функция IntlDateFormatter::create() - Create a date formatter
- Функция IntlDateFormatter::format() - Format the date/time value as a string
- Функция IntlDateFormatter::formatObject() - Formats an object
- Функция IntlDateFormatter::getCalendar() - Get the calendar type used for the IntlDateFormatter
- Функция IntlDateFormatter::getDateType() - Get the datetype used for the IntlDateFormatter
- Функция IntlDateFormatter::getErrorCode() - Get the error code from last operation
- Функция IntlDateFormatter::getErrorMessage() - Get the error text from the last operation.
- Функция IntlDateFormatter::getLocale() - Get the locale used by formatter
- Функция IntlDateFormatter::getPattern() - Get the pattern used for the IntlDateFormatter
- Функция IntlDateFormatter::getTimeType() - Get the timetype used for the IntlDateFormatter
- Функция IntlDateFormatter::getTimeZoneId() - Get the timezone-id used for the IntlDateFormatter
- Функция IntlDateFormatter::getCalendarObject() - Get copy of formatterʼs calendar object
- Функция IntlDateFormatter::getTimeZone() - Get formatterʼs timezone
- Функция IntlDateFormatter::isLenient() - Get the lenient used for the IntlDateFormatter
- Функция IntlDateFormatter::localtime() - Parse string to a field-based time value
- Функция IntlDateFormatter::parse() - Parse string to a timestamp value
- Функция IntlDateFormatter::setCalendar() - Sets the calendar type used by the formatter
- Функция IntlDateFormatter::setLenient() - Set the leniency of the parser
- Функция IntlDateFormatter::setPattern() - Set the pattern used for the IntlDateFormatter
- Функция IntlDateFormatter::setTimeZoneId() - Sets the time zone to use
- Функция IntlDateFormatter::setTimeZone() - Sets formatterʼs timezone
Коментарии
You can use datefmt_localtime to convert a user's time string, input using their locale's script, into standard numbers for checking, using a simple HTML input element.
This avoids using clunky HTML select elements formatted with hour and minute options in the locale's script to capture user input.
<?php
// Specify locale of user
$sLocale = 'en-us'; // US English user
$sLocale = 'ar-ye'; // Yemen Arab user
// Create a date formatter for the user's locale
$oIDF = datefmt_create($sLocale, IntlDateFormatter::NONE, IntlDateFormatter::SHORT);
// Simulate a user's time input string
$sTime = datefmt_format($oIDF, ['tm_hour'=>15, 'tm_min'=>25]);
// For a US English user, $sTime = '3:25 PM'
// For a Yemen Arab user, $sTime = '٣:٢٥ م'
// Specify datefmt_locale parsing start at the beginning of the user input
$nPosition = 0;
// Convert input time string to array of standard numeric values, as per localtime() output (function.localtime)
$aTime = datefmt_localtime($oIDF, $sTime, $nPosition);
// If no errors, $nPosition set to -1 after parsing, else character position of error
// If valid string
if($nPosition = -1){
// Use 'tm_hour' and 'tm_min' from the $aTime array for checking against other time values
...
}else{
// Invalid string
...
}
?>
Learning lesson here: Never trust the PHP documentation. Test everything!
$position does not work as described, at least in PHP 7. After parsing without errors, it does not contain -1.
You can still use it to set the parsing start character position, but not necessarily whether any errors occurred.
To test for errors, replace my $nPosition test code in the other note with:
<?php
// Check if errors
$bError = intl_is_failure(datefmt_get_error_code(oIDF));
// If no error
if(!$bError){
// Use 'tm_hour' and 'tm_min' from the $aTime array for checking against other time values
...
}else{
// Invalid string
...
}
?>