PHP DateTime解析时间而不是日期

时间:2014-07-14 03:06:30

标签: php mysql datetime

我正在尝试用PHP编写MySQL查询。我的问题是PHP将日期与MySQL区别对待。

在MySQL'2000'中是2000年,在PHP中它是晚上8点。

$date1 = new DateTime('2000-01-01');
echo $date1->format("Y-m-d H:i:s"); // 2000-01-01 00:00:00
$date2 = new DateTime('2000-01');
echo $date2->format("Y-m-d H:i:s"); // 2000-01-01 00:00:00

// This gets 8 PM instead of the year 2000
$date3 = new DateTime('2000');
echo $date3->format("Y-m-d H:i:s"); // 2014-07-14 20:00:00

$date4 = DateTime::createFromFormat("Y-m-d H:i:s", '2000');
echo $date4->format("Y-m-d H:i:s"); // PHP Fatal error:  Call to a member function format() on a non-object

如果在日期之后包含时间,我只想要解析时间。

有没有办法告诉它在PHP中优先解析年份?

2 个答案:

答案 0 :(得分:2)

如果您只打算通过一年,则不能指望DateTime以特定格式解析日期。

但是,您可以通过将感叹号作为格式的一部分传递来清除所有其他日期字段:

$date = DateTime::createFromFormat('!Y', '2000');
echo $date->format('r'); // Sat, 01 Jan 2000 00:00:00: +0000

答案 1 :(得分:0)

PHP DateTime construct第一个参数是日期/时间字符串。有效格式在Date and Time Formats中说明。对于您的情况,这些将是Compound Formats

你不应该只是抛弃以任何可能的方式格式化的字符串。您/开发人员是唯一一个精确了解输入日期格式的人,这意味着,开发人员有责任事先清理/验证DateTime类中输入所需的数据。

tl; dr不,没有办法优先解析内置DateTime类内部的内容。您可以使用自己的代码执行此操作。