IntlDateFormatter::localtime

datefmt_localtime

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

IntlDateFormatter::localtime -- datefmt_localtime — æ–‡ć­—ćˆ—ă‚’ăƒ‘ăƒŒă‚čă—ăŠă€ăƒ•ă‚ŁăƒŒăƒ«ăƒ‰ăƒ™ăƒŒă‚čăźæ™‚ćˆ»ć€€ă«ă™ă‚‹

èȘŹæ˜Ž

ă‚Șăƒ–ă‚žă‚§ă‚ŻăƒˆæŒ‡ć‘ćž‹

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

æ‰‹ç¶šăćž‹

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

æ–‡ć­—ćˆ— $value ă‚’ć€‰æ›ă—ă€ăƒ•ă‚ŁăƒŒăƒ«ăƒ‰ăƒ™ăƒŒă‚čăźæ™‚ćˆ»ć€€ (ć„ăƒ•ă‚ŁăƒŒăƒ«ăƒ‰ă‚’ć«ă‚€é…ćˆ—) ă«ă—ăŸă™ă€‚$parse_pos ă‹ă‚‰ăƒ‘ăƒŒă‚čă‚’é–‹ć§‹ă—ă€ć…„ćŠ›ć€€ă‚’ćŻèƒœăȘé™ă‚Šäœżç”šă—ăŸă™ă€‚

ăƒ‘ăƒ©ăƒĄăƒŒă‚ż

formatter

Formatter ăƒȘă‚œăƒŒă‚č。

string

æ™‚é–“ă«ć€‰æ›ă™ă‚‹æ–‡ć­—ćˆ—ă€‚

offset

$value ăźăƒ‘ăƒŒă‚čă‚’é–‹ć§‹ă™ă‚‹äœçœź (ă‚Œăƒ­ă‹ă‚‰æ•°ăˆăŸă™)。 $value ă‚’ć‡Šç†ă™ă‚‹ć‰ă«ă‚šăƒ©ăƒŒăŒç™ș生しどいăȘい栮搈は $parse_pos は -1 ずăȘă‚ŠăŸă™ă€‚ăă‚Œä»„ć€–ăźć ŽćˆăŻăƒ‘ăƒŒă‚čăŒç”‚äș†ă—ăŸäœçœźăšăȘă‚ŠăŸă™ (ăă—ăŠă‚šăƒ©ăƒŒăŒç™șç”Ÿă—ăŸă™)。 ă“ăźć€‰æ•°ă«ăŻă€ăƒ‘ăƒŒă‚čăŒć€±æ•—ă—ăŸć Žćˆă«ăăźç”‚äș†äœçœźăŒć«ăŸă‚ŒăŸă™ă€‚ $parse_pos > strlen($value) ăźć Žćˆă€ăƒ‘ăƒŒă‚čăŻćłæ™‚ă«ć€±æ•—ă—ăŸă™ă€‚

æˆ»ă‚Šć€€

Localtime äș’æ›ăźă€æ•Žæ•°ć€€ăźé…ćˆ—ă‚’èż”ă—ăŸă™ă€‚ tm_hour ăƒ•ă‚ŁăƒŒăƒ«ăƒ‰ć†…ăźă€24 æ™‚é–“ćˆ¶ăźæ™‚ćˆ»ăźć€€ă‚’ć«ăżăŸă™ă€‚ ć€±æ•—ă—ăŸć Žćˆă« false ă‚’èż”ă—ăŸă™

䟋

䟋1 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
'First parsed output is ';
if (
$arr) {
foreach (
$arr as $key => $value) {
echo
"$key : $value , ";
}
}

?>

䟋2 ă‚Șăƒ–ă‚žă‚§ă‚ŻăƒˆæŒ‡ć‘ăźäŸ‹

<?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 ,

ć‚è€ƒ

  • datefmt_create() - Date Formatter ă‚’äœœæˆă™ă‚‹
  • datefmt_format() - 旄付/æ™‚ćˆ» ăźć€€ă‚’æ–‡ć­—ćˆ—ăšă—ăŠăƒ•ă‚©ăƒŒăƒžăƒƒăƒˆă™ă‚‹
  • datefmt_parse() - æ–‡ć­—ćˆ—ă‚’ăƒ‘ăƒŒă‚čă—ăŠă‚żă‚€ăƒ ă‚čă‚żăƒłăƒ—ă«ă™ă‚‹
  • datefmt_get_error_code() - ç›Žèż‘ăźæ“äœœăźă‚šăƒ©ăƒŒă‚łăƒŒăƒ‰ă‚’ć–ćŸ—ă™ă‚‹
  • datefmt_get_error_message() - ç›Žèż‘ăźæ“äœœăźă‚šăƒ©ăƒŒăƒ†ă‚­ă‚čăƒˆă‚’ć–ćŸ—ă™ă‚‹
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
 ...
}
?>