CascadiaPHP 2024

IntlDateFormatter::localtime

datefmt_localtime

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

IntlDateFormatter::localtime -- datefmt_localtimeInterpreta uma string para um valor de horário baseado em campos

Descrição

Estilo orientado a objetos

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

Estilo procedural

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

Converte o valor da string para um valor de horário baseado em campos (um array com vários campos), iniciando em offset e consumindo o máximo possível do valor de entrada.

Parâmetros

formatter

O recurso do formatador

string

A string a ser convertida para um horário

offset

Posição na qual a interpretação da string será iniciada (baseada em zero). Se não ocorrer erros antes que a string seja consumida, offset conterá -1, caso contrário conterá a posição na qual a interpretação terminou. Se offset > strlen(string), a interpretação falha imediatamente.

Valor Retornado

Array de inteiros compatível com o horário da localidade: contém valor de hora no formato de 24 horas no campo tm_hour, ou false em caso de falha.

Exemplos

Exemplo #1 Exemplo de datefmt_localtime()

<?php

$fmt
= datefmt_create(
'pt_BR',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Sao_Paulo',
IntlDateFormatter::GREGORIAN
);
$arr = datefmt_localtime($fmt, 'Quarta-feira, 23 de novembro de 1977 16:10:00 GMT-03:00');
echo
'Valor interpretado: ';
if (
$arr) {
foreach (
$arr as $key => $value) {
echo
"$key : $value , ";
}
}

?>

Exemplo #2 Exemplo OO

<?php
$fmt
= new IntlDateFormatter(
'pt_BR',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Sao_Paulo',
IntlDateFormatter::GREGORIAN
);
$arr = $fmt->localtime('Quarta-feira, 23 de novembro de 1977 16:10:00 GMT-03:00');
echo
'Valor interpretado: ';
if (
$arr) {
foreach (
$arr as $key => $value) {
echo
"$key : $value , ";
}
}

?>

O exemplo acima produzirá:

Valor interpretado: tm_sec : 0 , tm_min : 10 , tm_hour : 16 , tm_year : 77 ,
tm_mday : 23 , tm_wday : 3 , tm_yday : 327 , tm_mon : 10 , tm_isdst : 0 ,

Veja Também

add a note

User Contributed Notes 2 notes

up
0
Patanjali
7 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
7 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