PHP date_create_from_format
函数接受不存在但格式有效的日期。
我希望此函数的行为类似于date
命令:
niloct@HP-Mini:~$ date --date="29/02/2011" +%s
date: invalid date `29/02/2011'
虽然这是在php中发生的事情:
$tmp = date_create_from_format('d/m/Y H:i:s',"29/02/2011 00:00:00", timezone_open('America/Sao_Paulo'));
var_dump($tmp);
/*
output: object(DateTime)#28 (3) { ["date"]=> string(19) "2011-03-01 00:00:00" ["timezone_type"]=> int(3) ["timezone"]=> string(17) "America/Sao_Paulo" }
*/
是否可以避免这种自动转换,在这种情况下函数会返回-1
?
niloct@HP-Mini:~$ php -v
PHP 5.3.3-1ubuntu9.3 with Suhosin-Patch (cli) (built: Jan 12 2011 16:08:14)
谢谢。
答案 0 :(得分:5)
您可以使用date_parse_from_format
和checkdate
的组合来查看它是否是有效的日历日期。
示例:
$date = date_parse_from_format('d/m/Y H:i:s',"29/02/2011 00:00:00");
if (checkdate($date['month'], $date['day'], $date['year'])) {
echo "Valid date";
}
else {
echo "Invalid date";
}
答案 1 :(得分:0)
我发现在date_get_last_errors
之后调用date_create_from_format
已经为解析后的字符串,数组warnings
和errors
以及计数器{{1}提供了所有类型的验证}和warning_count
。
所以只需检查计数器是否有零警告和错误就足够了。
修改了一些测试的代码:
error_count
上述脚本计算创建的日期时间的unix时间戳。
答案 2 :(得分:-1)
这将有效:
$format = 'd/m/Y H:i';
$date = DateTime::createFromFormat($format, Input::get('start_date'));
return $date->format('Y/m/d H:i');