PHP日期时间是否接受多种格式?

PHP日期时间是否接受多种格式?,php,datetime,Php,Datetime,我正在尝试用多种可接受的格式构造DateTime对象 根据DateTime::createFromFormatdocs,第一个参数(格式)必须是字符串。我想知道是否有办法创建FromFormats 在我的情况下,我希望格式的年份是可选的: DateTime::createFromFormat('Y-m-d', $date); DateTime::createFromFormat('m-d', $date); 因此,用户只需输入“m-d”,年份假定为2013年。如果我想要多个可接受的格式,是否每

我正在尝试用多种可接受的格式构造DateTime对象

根据
DateTime::createFromFormat
docs,第一个参数(格式)必须是字符串。我想知道是否有办法创建FromFormats

在我的情况下,我希望格式的年份是可选的:

DateTime::createFromFormat('Y-m-d', $date);
DateTime::createFromFormat('m-d', $date);
因此,用户只需输入“m-d”,年份假定为2013年。如果我想要多个可接受的格式,是否每次都必须调用createFromFormat

对于我的场景,最短的事情是:

DateTime::createFromFormat('m-d', $date) ?: DateTime::createFromFormat('Y-m-d', $date);

您可以创建自己的扩展DateTime的类,并添加自己的方法:

class EasyDateTime extends DateTime {

    public static function createFromFormat($string){   
        if (count(explode("-", $string)) === 2) {
            $string = date('Y')."-".$string;
        }
        return parent::createFromFormat('Y-m-d',$string);
    }
}

var_dump( EasyDateTime::createFromFormat('01-01') );
// object(DateTime)#1 (3) { ["date"]=> string(19) "2013-01-01 05:11:03" ["timezone_type"]=> int(3) ["timezone"]=> string(11) "Europe/Oslo" }

你查过了吗?有没有一种方法可以完全满足您的需要?@zerkms我已经检查了很多次,但似乎没有任何类似于
createFromFormats
的方法。我也在stackoverflow和网络上搜索过,没有找到任何东西,甚至没有一个问题。ooo复合格式?我不确定。所以,如果它不在那里-你不能自己回答你的问题吗?:-)@虫族我可以,但我会用我的余生思考是否有这样做的诀窍。我不知道种族条件意味着什么,但我想说:如果格式一开始就无效怎么办?@zerkms请解释why@John史密斯:那么它将返回false。我明白了,我想这是我最接近正确答案的一次了。我不打算扩展,我只打算使用这个漂亮的
计数(explode…
,因为我可能不会经常使用它。