我有一个日期列表,其中一些有时间:
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
构造函数?
答案 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
)