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

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

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

formatter

IntlDateFormatter ă‚Șブゾェクト。

string

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

offset

string ăźăƒ‘ăƒŒă‚čă‚’é–‹ć§‹ă™ă‚‹äœçœź (ă‚Œăƒ­ă‹ă‚‰æ•°ăˆăŸă™)。 ć‘Œăłć‡șă—ćŸŒăŻă€ăƒ‘ăƒŒă‚čăŒæˆćŠŸă—ăŸă‹ă©ă†ă‹ă«ă‹ă‹ă‚ă‚‰ăšă€ offset ă«ăƒ‘ăƒŒă‚čăŒç”‚äș†ă—ăŸäœçœźăŒæ ŒçŽă•ă‚ŒăŸă™ă€‚ offset がèČ ăźć€€ăźć Žćˆă€ăŸăŸăŻ strlen($string) ă‚ˆă‚Šć€§ăă„ć ŽćˆăŻă€ăƒ‘ăƒŒă‚čは捳ćș§ă«ć€±æ•—し、 offset ăŻć€‰æ›Žă•ă‚ŒăŸă›ă‚“ă€‚

æˆ»ă‚Šć€€

localtime() ăšćŒă˜ă‚­ăƒŒă‚’æŒă€ă€æ•Žæ•°ć€€ăźé€Łæƒłé…ćˆ—ă‚’èż”ă—ăŸă™ă€‚ 24 æ™‚é–“ćˆ¶ăźæ™‚é–“ăŒ tm_hour ă«æ ŒçŽă•ă‚ŒăŸă™ă€‚ć€±æ•—ă—ăŸć Žćˆă« false ă‚’èż”ă—ăŸă™ă€‚ tm_yday は、localtime() が 0 ă‹ă‚‰ć§‹ăŸă‚‹ć€€ă‚’èż”ă™ăźă«ćŻŸă—ă€ ここでは 1 ă‹ă‚‰ć§‹ăŸă‚‹ç‚čă«æłšæ„ă—ăŠăă ă•ă„ă€‚

䟋

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