如何使用DateTime类将'02/31/2010'作为无效日期捕获?

nib*_*bot 3 php datetime date

我一直在PHP中使用DateTime类,因为date()具有Unix时间戳的缺点.但是,这两种方法都没有检测到没有31天的月份的无效日期,但是尝试使用第31天.

示例代码:

try {
    $date = new DateTime('02/31/2018');
    $formattedDate = $date->format('Y-m-d');
}
catch (Exception $e) {
}
echo $formattedDate;
Run Code Online (Sandbox Code Playgroud)

示例输出:

2018-03-03
Run Code Online (Sandbox Code Playgroud)

更新1:

要使用checkdate(),我需要日期的组成部分.为此,我需要使用日期字符串作为构造函数来实例化DateTime对象.在'02/31/2018'的情况下,它将在实例化时将其转换为'03/03/2018'.此时,通过checkdate()运行组件月,日,年将为时已晚.解决办法是什么?

更新2:

如果我强制使用特定格式(例如mm/dd/yyyy),那么获取组件部分日期很容易,但如果我接受strtotime()接受的所有格式,则在通过strtotime()运行之前我无法执行checkdate - > date()或DateTime :: __ construct - > DateTime :: format().

我一直在PHP中使用DateTime类,因为date()具有Unix时间戳的缺点.但是,这两种方法都没有检测到没有31天的月份的无效日期,但是尝试使用第31天.

示例代码:

try {
    $date = new DateTime('02/31/2018');
    $formattedDate = $date->format('Y-m-d');
}
catch (Exception $e) {
}
echo $formattedDate;
Run Code Online (Sandbox Code Playgroud)

示例输出:

2018-03-03
Run Code Online (Sandbox Code Playgroud)

更新1:

要使用checkdate(),我需要日期的组成部分.为此,我需要使用日期字符串作为构造函数来实例化DateTime对象.在'02/31/2018'的情况下,它将在实例化时将其转换为'03/03/2018'.此时,通过checkdate()运行组件月,日,年将为时已晚.解决办法是什么?

更新2:

如果我强制使用特定格式(例如mm/dd/yyyy),那么获取组件部分日期很容易,但如果我接受strtotime()接受的所有格式,则在通过strtotime()运行之前我无法执行checkdate - > date()或DateTime :: __ construct - > DateTime :: format().

And*_*are 6

试试这个checkdate功能.

检查参数形成的日期的有效性.如果正确定义了每个参数,则认为日期有效.

参数

月份介于1到12之间.

这一天在给定月份的允许天数内. 闰年被考虑在内.

年份介于1到32767之间.