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

标签 php datetime

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

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

我正在检查所有这些并将它们转换为新的 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 构造函数是否仅使用日期(没有时间)调用?

最佳答案

我不认为 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

关于php - 检测 DateTime 对象中是否指定了时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22180959/

相关文章:

c# - 如何将 Unix 时间戳转换为 DateTime,反之亦然?

c# - 比较 C# 中 DateTime 的二进制表示形式

php - SQL查询按给定日期范围对记录进行分组

php - 更改 fork 项目中的 PHP 命名空间?以及如何在没有 PHP 命名空间的情况下打开 pull 请求?

PHP/MySQL : How to verify properly escaped data?

java - 如何处理 Java 8/JSR 310/threeten.org 中 ISO-8601 时间戳中的 'optional' T?

javascript - 这个时间计算脚本中的奇怪错误?

mysql - 仅来自日期时间列的时间

php - UTF-8 数据库问题

php - 使用 PHP 获取数据库备份