首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IntlDateFormatter解析不适用于特定的参数

IntlDateFormatter解析不适用于特定的参数
EN

Stack Overflow用户
提问于 2015-09-16 09:28:39
回答 1查看 582关注 0票数 2

一些奇怪的数据1990-03-25Asia/尼科西亚

代码语言:javascript
复制
IntlDateFormatter->parse

给出

PHP 5.6.11-1+deb.sury.org~utopic+1 intl-3.0.0

代码语言:javascript
复制
<?php
$intlDateFormatter = new IntlDateFormatter(
    'en_US',
    2,
    -1,
    'Asia/Nicosia',
    1,
    'yyyy-MM-dd'
);
$intlDateFormatter->setLenient(false);

$date = '1990-03-24';
$res = $intlDateFormatter->parse($date);
echo "$date - $res\n"; // 1990-03-24 - 638229600

$date = '1990-03-25';
$res = $intlDateFormatter->parse($date);
echo "$date - $res\n"; // 1990-03-25 - 

$date = '1990-03-26';
$res = $intlDateFormatter->parse($date);
echo "$date - $res\n"; // 1990-03-26 - 638398800
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-16 10:24:16

编辑

所以这和跳转到DST有关。1990年3月25日是DST启动的时候,所以3月25日的午夜实质上是不存在的。尼科西亚在1998年修改了欧盟关于DST变化的规则( DST在凌晨3点+1小时,返回非DST时在凌晨4点-1小时)。

这意味着您必须使用“1990-03-2501”作为该日期,或者将解析器设置为非严格的,以自动解决此问题。

或者,只对简单的数字输出使用DateTime的解析器而不是Intl。

原始答案

出于某种原因,它似乎认为1990-03-25不符合您提供的格式化程序。设置$intlDateFormatter->setLenient(true);允许它解析该格式。我确实注意到你把它设置为在顶部显式错误,注意。

如果没有宽大设置,格式化程序给出的错误(用getErrorCodegetErrorMessage检查)是“日期解析失败: U_PARSE_ERROR”--表示它认为格式与提供的字符串不匹配。parse()中的第二个参数可以用来查看它在试图解析日期时退出哪个字符。在这种情况下,它存在于第一个字符上。

虽然这不能给你一个确切的答案,为什么它认为模式不匹配,但它至少给你一些基本的方向,什么可能是问题。我会考虑将它作为一个bug提交给PHP,然后看看响应是什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32604670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档