允许PHP date()函数识别dd-mm-yy格式

时间:2012-10-17 10:20:00

标签: php regex date

我希望稍微修改PHP date()功能,以便识别英国6位数格式的dd / mm / yy或dd-mm-yy。可以理解的是,它会认为这种形式的日期是国际(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];
}

2 个答案:

答案 0 :(得分:5)

此功能可让您检查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格式。

答案 1 :(得分: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

希望有所帮助。