检测是否在DateTime对象中指定了时间

时间:2014-03-04 19:18:14

标签: php datetime

我有一个日期列表,其中一些有时间:

01/03/2014
02/01/2014 02:00 PM
02/02/2014 1:00 PM
03/01/2014

我正在浏览所有这些并将它们转换为new DateTime个对象,将它们发送到JavaScript,然后使用moment.js来显示它们。

moment(data.date).format('L LT')

以下列格式显示日期:

01/03/2014 12:00 AM
02/01/2014 02:00 PM
02/02/2014 01:00 PM
03/01/2014 12:00 AM

有没有办法检测,没有正则表达式(或任何字符串操作),使用 日期(没有时间)调用DateTime构造函数?

1 个答案:

答案 0 :(得分:2)

我不认为DateTime类提供了一种方法来检测对象是否实际上是从 日期创建的。创建对象后,该信息将丢失。一项小工作是使用date_parse()检查缺少的日期时间字段(如评论中提到的 @salathe )。

如果DateTime不包含小时,分钟或秒部分,则表示它只有一个日期部分。使用上面的逻辑,您的代码将如下所示:

$datetimes = [
    '01/03/2014',
    '02/01/2014 02:00 PM',
    '02/02/2014 1:00 PM',
    '03/01/2014'
];

$withTime = array();
$withoutTime = array();

foreach ($datetimes as $dt) {

    $parts = date_parse($dt);

    if ($parts['hour']   === FALSE &&
        $parts['minute'] === FALSE &&
        $parts['second'] === FALSE) {
        $withoutTime[] = $dt;
    } else {
        $withTime[] = $dt;
    }

}

print_r($withTime);
print_r($withoutTime);

输出:

Array
(
    [0] => 02/01/2014 02:00 PM
    [1] => 02/02/2014 1:00 PM
)

Array
(
    [0] => 01/03/2014
    [1] => 03/01/2014
)

Demo