如何在PHP中从一串串联的数字格式化日期


How to format date in PHP from a string of concatenated numbers?

我是PHP的新手,我正在尝试了解更多关于PHP日期和时间的信息,但我似乎对此感到困惑。

我有这个日期格式:

 ddMMyyHHmmss

一个例子是120813125055,但我试图操纵字符串,使其格式为:

 yyyy-MM-dd HH:mm:ss (in the example above, 2013-08-12 12:50:55)

我试着做一些类似的事情:

 date('Y-m-d H:i:s', strtotime('120813125055'));

但它总是给我一个1969-12-31 18:00:00的结果。

我认为我需要在PHP中进行一些字符串操作,但我想知道是否有更简单、更有效的方法可以做到这一点?

我想您正在寻找的是这里回答的第二个响应:如何在php中重新格式化日期时间字符串?

为了总结(并应用于您的示例),您可以这样修改代码。

$datetime = "120813125055"; 
$d = DateTime::createFromFormat("dmyHis", $datetime);
echo $d->format("Y-m-d H:i:s");

使用date_create_from_format:

$ts = date_create_from_format('dmyHis', '120813125055');
$str = date('Y-m-d H:i:s', $ts);

strtotime()仅适用于易于识别的格式。您的是一个丑陋的垃圾混合体,因此strtotime为失败返回一个布尔FALSE也就不足为奇了,然后当您尝试将其反馈到date()时,它会被类型转换为int 0

当然,请注意,您的时间字符串是NOTy2k兼容的。除非出于显示目的,否则不得再使用两位数年份。

您使用函数调用和参数的方式不对。

在您的示例中,php将尝试返回时间为"strtotime('120813125055')"的日期,而此函数返回false(解释为0)。因此,您将返回Unix epoch的日期格式为"Y-m-d H:i:s"。

您需要获得字符串的实际时间戳,因此使用http://www.php.net/manual/en/datetime.createfromformat.php.

你错了。。

I tried to do something like:
date('Y-m-d H:i:s', strtotime('120813125055'));    

你不应该只使用数字(不管是整数还是字符串),因为它总是会给你同样的东西。

您可以使用任何其他有效的日期和时间(例如2013年6月6日,5月12日…)。因为strtotime()所做的是检测有效日期并将其转换为时间戳。