IntlDateFormatter::localtime

datefmt_localtime

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

IntlDateFormatter::localtime -- datefmt_localtime将字符串解析为基于字段的时间值

描述

面向对象风格

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

过程式风格

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

将字符串 $value 转换为基于字段的时间值(一个包含各种字段的数组),从 $parse_pos 开始,尽可能多地消耗输入值。

参数

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

?>

示例 #2 OO 示例

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

参见

添加笔记

用户贡献的笔记 2 笔记

Patanjali
7 年前
从这里吸取教训:永远不要相信 PHP 文档。测试所有内容!

$position 无法按描述工作,至少在 PHP 7 中是这样。解析完成后没有错误,它不包含 -1。

您仍然可以使用它来设置解析开始字符位置,但不一定能确定是否发生了任何错误。

要测试错误,请在其他笔记中用我的 $nPosition 测试代码替换为
<?php
// 检查错误
$bError = intl_is_failure(datefmt_get_error_code(oIDF));

// 如果没有错误
if(!$bError){
// 使用 $aTime 数组中的“tm_hour”和“tm_min”与其他时间值进行比较
...
}else{
// 无效字符串
...
}
?>
Patanjali
7 年前
您可以使用 datefmt_localtime 将用户使用其语言环境的脚本输入的时间字符串转换为标准数字以进行检查,使用简单的 HTML 输入元素。

这避免使用笨拙的 HTML 选择元素,这些元素使用语言环境脚本中的小时和分钟选项来捕获用户输入。

<?php
// 指定用户的区域设置
$sLocale = 'en-us'; // 美式英语用户
$sLocale = 'ar-ye'; // 也门阿拉伯用户

// 为用户的区域设置创建日期格式化器
$oIDF = datefmt_create($sLocale, IntlDateFormatter::NONE, IntlDateFormatter::SHORT);

// 模拟用户的时间输入字符串
$sTime = datefmt_format($oIDF, ['tm_hour'=>15, 'tm_min'=>25]);
// 对于美式英语用户,$sTime = '3:25 PM'
// 对于也门阿拉伯用户,$sTime = '٣:٢٥ م'

// 指定 datefmt_locale 解析从用户输入的开头开始
$nPosition = 0;

// 将输入的时间字符串转换为标准数值数组,与 localtime() 输出相同 (https://php.net/manual/en/function.localtime.php)
$aTime = datefmt_localtime($oIDF, $sTime, $nPosition);
// 如果没有错误,$nPosition 在解析后设置为 -1,否则为错误的字符位置

// 如果是有效的字符串
if($nPosition = -1){
// 使用 $aTime 数组中的 'tm_hour' 和 'tm_min' 来检查其他时间值
...
}else{
// 无效的字符串
...
}
?>
To Top