IntlDateFormatter::localtime

datefmt_localtime

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

IntlDateFormatter::localtime -- datefmt_localtimeAnaliza una cadena y la convierte en tiempo

Descripción

Estilo orientado a objetos

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

Estilo procedimental

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

Convierte string en una fecha descompuesta (un array de campos), comenzando en offset y consumiendo tantos caracteres del string de entrada como sea posible.

Parámetros

formatter

El objeto IntlDateFormatter.

string

El string a convertir en un tiempo.

offset

La posición desde la cual comenzar el análisis en string (basada en cero). Al regresar, offset contiene la posición en la que terminó el análisis, independientemente de si el análisis tuvo éxito o no. Si offset es negativo o mayor que strlen($string), el análisis falla inmediatamente y offset queda sin cambios.

Valores devueltos

Un array asociativo de enteros cuyas claves son las de localtime(), con la hora en formato de 24 horas en tm_hour o false si ocurre un error. Nótese que tm_yday empieza en 1 aquí, mientras que localtime() lo devuelve empezando en 0.

Ejemplos

Ejemplo #1 Ejemplo con datefmt_localtime()

<?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 'Resultado del análisis ';
if ($arr) {
    foreach ($arr as $key => $value) {
        echo "$key : $value , ";
    }
}

?>

Ejemplo #2 Ejemplo orientado a objetos

<?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 'Resultado del análisis ';
if ($arr) {
    foreach ($arr as $key => $value) {
        echo "$key : $value , ";
    }
}

?>

El ejemplo anterior mostrará:

Resultado del análisis 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 ,

Véase también

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
 ...
}
?>