2012-11-26 226 views
1

PHP DateTime类PHP的日期和时间日期

$x = '23120-7-7'; 
$x = new \DateTime($x); 
var_dump($x); 

的奇怪行为给出

object(DateTime)#988 (3) { 
    ["date"]=> 
    string(19) "2000-07-07 23:12:00" 
    ["timezone_type"]=> 
    int(3) 
    ["timezone"]=> 
    string(3) "UTC" 
} 

我想验证日期,但没有在PHP只DateTime类。我如何检查

我的日期有效吗?

+0

使用正则表达式?我发现这个在线测试工具非常易于使用:http://gskinner.com/RegExr/然后看看屏幕右侧,查看comunity选项卡,并找到适合您的日期格式的正则表达式。或者你自己打一个。这个正则表达式可以帮助你:(19 [0-9] {2} | 2 [0-9] {3}) - (0 [1-9] | 1 [012]) - ([123] 0 | [ 012] [1-9] | 31)$它的日期时间格式,如YYYY-MM-DD –

回答

2

使用date_create_from_format

$x = '23120-7-7'; 
$x = \DateTime::createFromFormat('Y-m-d', $x); 
var_dump($x); 

输出:

bool(false) 

要查看错误细节:

$errors = DateTime::getLastErrors(); 
var_dump($errors); 

输出:

array(4) { 
    ["warning_count"]=> 
    int(1) 
    ["warnings"]=> 
    array(1) { 
    [7]=> 
    string(27) "The parsed date was invalid" 
    } 
    ["error_count"]=> 
    int(2) 
    ["errors"]=> 
    array(2) { 
    [4]=> 
    string(40) "The separation symbol could not be found" 
    [7]=> 
    string(13) "Trailing data" 
    } 
} 
0

如果您想直接回答,可以使用“checkdate”方法。首先使用短划线( - )爆炸日期,或许,我不知道你使用的是什么样的日期,然后使用checkdate。

0

尝试将其转换为timestamp然后设置一个新的日期与您需要的格式日期(“Y-M-d”,时间戳),你检查错误