• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • IntlDateFormatter::localtime()

    datefmt_localtime

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

    Parse string to a field-based time value

    说明

    面向对象风格
    publicIntlDateFormatter::localtime(string $value[,int &$position]): array
    过程化风格
    datefmt_localtime(IntlDateFormatter$fmt,string $value[,int &$position]): array

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

    参数

    $fmt

    The formatter resource

    $value

    string to convert to a time

    $position

    Position at which to start the parsing in $value(zero-based). If no error occurs before $value is consumed,$parse_pos will contain -1 otherwise it will contain the position at which parsing ended . If $parse_pos > strlen($value), the parse fails immediately.

    返回值

    Localtime compatible array of integers : contains 24 hour clock value in tm_hour field

    范例

    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 4:00:00 PM PT', 0);
    echo 'First parsed output is ';
    if ($arr) {
        foreach ($arr as $key => $value) {
            echo "$key : $value , ";
        }
    }
    ?>
    

    OO example

    <?php
    $fmt = new IntlDateFormatter(
        'en_US',
        IntlDateFormatter::FULL,
        IntlDateFormatter::FULL,
        'America/Los_Angeles',
        IntlDateFormatter::GREGORIAN
    );
    $arr = $fmt->localtime('Wednesday, December 31, 1969 4:00:00 PM PT', 0);
    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 : 1969 , 
    tm_mday : 31 , tm_wday : 4 , tm_yday : 365 , tm_mon : 11 , tm_isdst : 0 , 
    

    参见

    • datefmt_create() Create a date formatter
    • datefmt_format() Format the date/time value as a string
    • datefmt_parse() Parse string to a timestamp value
    • datefmt_get_error_code() Get the error code from last operation
    • datefmt_get_error_message() Get the error text from the last operation
    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
     ...
    }
    ?>
    
    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
     ...
    }
    ?>