php date_parse("2010 年 2 月") 给出日期 == 1

2024-05-19

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

请参阅对此的评论date_parse 手册页 http://php.net/manual/en/function.date-parse.php#100055.

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

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

2010

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

Feb 2010

UPDATE 2到目前为止我已经看到两个错误date_parse。无法解析2010。它给出了一天,尽管里面没有一天Feb 2010.

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


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

PHP 可以解析的日期格式,即don't包含一个月中的某一天,似乎是(在php_src:日期/lib/parse_date.re https://github.com/php/php-src/blob/250938e2d35fc54161a18167b7901c5e3b574371/ext/date/lib/parse_date.re):

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

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

(侧面观察:上面排除了像 5/2016 这样的格式,它被解析为“5 月 20 日,末尾有一些额外的字符”;它们也类似于一年中的某一天和一年中的一周格式,所以我们'我会尽量不要被那些绊倒。)

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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php date_parse("2010 年 2 月") 给出日期 == 1 的相关文章

随机推荐