gpt4 book ai didi

php date_parse ("Feb 2010") 给出 day == 1

转载 作者:搜寻专家 更新时间:2023-10-31 20:39:21 25 4
gpt4 key购买 nike

当没有日期时,我称之为 date_parse 中的错误。 $d = date_parse("Feb 2010") 将给出 $d["day"] == 1

请参阅 the date_parse manual page 上对此的评论.

这个问题有什么好的解决方法吗? :-)

更新日期来自已发表的研究报告。不幸的是,这意味着他们可以以不同的方式看待。我想在显示引用时将它们转换为更标准的 ISO 格式。为了帮助读者,我希望始终只包含给定的字段(年、月、日)。所以这应该是有效的(只给我年份):

2010

这应该是有效的,但只要给我 2010-02 就可以这么说:

Feb 2010

更新 2到目前为止,我已经在 date_parse 中看到了两个错误。它无法解析 2010。尽管 Feb 2010 没有一天,但它给出了一天。

我当然可以为此编写修复程序,但肯定有人已经这样做了,或者???

最佳答案

上面的错误修复例程很棒,Leo,谢谢。不幸的是,它仍然在一月份旅行,认为 2014-01 与 2014-01-01 相同 --- 我们已经完成了十二分之一。

PHP 可以解析的日期格式, 包含日期,似乎是(在 php_src:date/lib/parse_date.re 中):

gnudateshorter   = year4 "-" month;
datenoday = monthtext ([ .\t-])* year4;
datenodayrev = year4 ([ .\t-])* monthtext;

很少,很方便。我们可以在 $dateRaw 上运行相同的正则表达式,本质上是对解析器的决定进行逆向工程。

(旁注:以上不包括像 5/2016 这样的格式,它被解析为“20 May,最后有一些额外的字符”;它们也类似于一年中的一天和一年中的一周的格式,所以我们会尽量不被那些绊倒。)

function date_parse_bugfix($dateRaw) {
$dateRaw = trim($dateRaw);
// Check for just-the-year:
if (strlen($dateRaw) === 4 && preg_match("/\d{4}/", $dateRaw) === 1) {
$da = date_parse($dateRaw . "-01-01");
$da["month"] = false;
$da["day"] = false;
}
else {
$da = date_parse($dateRaw);
if ($da) {
// If we have a suspicious "day 1", check for the three formats above:
if ($da["day"] === 1) {
// Hat tip to http://regex101.com
// We're not actually matching to monthtext (which is looooong),
// just looking for alphabetic characters
if ((preg_match("/^\d{4}\-(0?[0-9]|1[0-2])$/", $dateRaw) === 1) ||
(preg_match("/^[a-zA-Z]+[ .\t-]*\d{4}$/", $dateRaw) === 1) ||
(preg_match("/^\d{4}[ .\t-]*[a-zA-Z]+$/", $dateRaw) === 1)) {
$da["day"] = false;
}
}
}
}
return $da;
}

关于php date_parse ("Feb 2010") 给出 day == 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27052374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com