API Platform Conference 2026 - Lille (France) & Online

IntlDateFormatter::localtime

datefmt_localtime

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)

IntlDateFormatter::localtime -- datefmt_localtimeParse string to a field-based time value

Опис

Об'єктно-орієнтований стиль

public function IntlDateFormatter::localtime(string $string, int &$offset = null): array|false

Процедурний стиль

function datefmt_localtime(IntlDateFormatter $formatter, string $string, int &$offset = null): array|false

Converts string to a field-based time value (an array of various fields), starting at offset and consuming as much of the input string as possible.

Параметри

formatter

The IntlDateFormatter object.

string

String to convert to a time.

offset

Position at which to start the parsing in string (zero-based). On return, offset holds the position at which parsing ended, whether or not the parse succeeded. If offset is negative or greater than strlen($string), the parse fails immediately and offset is left unchanged.

Значення, що повертаються

An associative array of integers whose keys are those of localtime(), with the hour given on a 24-hour clock in tm_hour або false в разі помилки. Note that tm_yday is 1-based here, whereas localtime() returns it 0-based.

Приклади

Приклад #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 at 4:00:00 PM Pacific Standard Time', $offset);

echo 'First parsed output is ';
if ($arr) {
    foreach ($arr as $key => $value) {
        echo "$key : $value , ";
    }
}

?>

Приклад #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 at 4:00:00 PM Pacific Standard Time', $offset);

echo 'First parsed output is ';
if ($arr) {
    foreach ($arr as $key => $value) {
        echo "$key : $value , ";
    }
}

?>

Поданий вище приклад виведе:

First parsed output is tm_sec : 0 , tm_min : 0 , tm_hour : 16 , tm_year : 69 ,
tm_mday : 31 , tm_wday : 3 , tm_yday : 365 , tm_mon : 11 , tm_isdst : 0 ,

Прогляньте також

add a note

User Contributed Notes 2 notes

up
0
Patanjali
9 years ago
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
 ...
}
?>
up
0
Patanjali
9 years ago
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 (http://php.net/manual/en/function.localtime.php)
$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
 ...
}
?>
To Top