【问题标题】:Allow PHP date() function to recognise dd-mm-yy format允许 PHP date() 函数识别 dd-mm-yy 格式
【发布时间】:2012-10-17 10:20:00
【问题描述】:

我希望稍微修改 PHP date() 函数,以便它能够识别 dd/mm/yy 或 dd-mm-yy 的英国 6 位数字格式。可以理解的是,它会认为采用这种形式的日期是国际(yy-mm-dd)格式。

我仍然希望将其传递给日期函数,因为这将允许它识别其他格式,但由于我在英国,人们最有可能将其放入英国格式。

有什么想法吗?我怀疑 Regex 参与了这个问题的解决方案......

更新 - 我的解决方案

使用下面答案中的部分,这就是我能够在 dd/mm/yy 的情况下更改它的方式:

$s_date = str_replace('/', '-', $s_date);

preg_match('^(.*)[-](.*)[-](.*)$^', $s_date, $matches);
if ($matches) {
    if (strlen($matches[3]) == 2) {
        $matches[3] = '20'.$matches[3];
    }
    $s_date = $matches[1].'-'.$matches[2].'-'.$matches[3];
}

【问题讨论】:

  • 您是要实际修改 date() 函数(这需要更改 PHP 核心)还是只是编写一个将 dd/mm/yy 或 dd-mm-yy 转换为 yy-mm 的函数-dd?
  • 抱歉,澄清一下,我并不是真的要修改核心,只是真的是在这种格式下返回的变量。

标签: php regex date


【解决方案1】:

此功能将允许您检查 dd-mm-yy 和 dd/mm/yy。

通过使用 str 替换 - 您强制日期始终采用“dd-mm-yy”格式。 strtotime 将带有“-”的日期解释为您想要的格式。

// Is this a valid date?
    function valid_date($str) 
    {
        $str = str_replace('/', '-', $str);
        if ($arr = strtotime($str))
        {
            $arr = explode("-", date("d-m-Y", strtotime($str)));
            $yyyy = $arr[2];
            $mm = $arr[1];
            $dd = $arr[0];
            if (is_numeric($yyyy) && is_numeric($mm) && is_numeric($dd))
            {
                return checkdate($mm, $dd, $yyyy);
            }
        }
        return false;
    }

Quote from strtotime:

如果分隔符是斜杠 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或点 (.),则假定为欧洲 d-m-y 格式。

【讨论】:

  • 不幸的是,它仍然将dd-mm-yy 解释为yy-mm-dd。有什么想法可以阻止这种解释,同时仍然允许date() 理解像2 November 2013 这样的字符串?
【解决方案2】:

询问date() 函数是在找错树。

date() 函数输出一个日期字符串,而不是输入。 date() 的输入是一个整数时间戳值。您无法让date() 识别任何类型的字符串输入。

如果您正在处理作为字符串输入的日期字段,date() 函数不是您想要使用的; PHP为此提供了不同的功能。

有多种选择,但最好的选择是使用the DateTime class,更具体地说,使用DateTime::createFromFormat() method

这告诉程序导入日期字符串,并以您期望的格式处理它。这消除了输入中任何可能的歧义(即程序知道输入是 dd-mm-yy 而不必猜测 dd、mm 和 yy 部分是哪一个方向):

$date = DateTime::createFromFormat('d-m-y', '09-04-12');

完成此操作后,您可以使用在上面一行中创建的$date 对象来处理代码中的日期,并以您喜欢的任何格式输出它。例如:

echo $date->format('j-M-Y');   //prints 9-Apr-2012

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2022-01-25
    相关资源
    最近更新 更多