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

时间:2013-08-12 15:37:33

标签: php string date

我是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中进行一些字符串操作,但我想知道是否有更简单,更有效的方法来执行此操作?

4 个答案:

答案 0 :(得分:4)

使用date_create_from_format

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

strtotime()仅适用于易于识别的格式。你是一个丑陋的垃圾组合,所以毫不奇怪,strtotime以失败的布尔FALSE保释,当你尝试将其反馈给int 0时,它会被date()转换为。{ / p>

当然,请注意您的时间字符串符合y2k标准。除了显示用途之外,永远不应再使用两位数年份。

答案 1 :(得分:4)

我认为您正在寻找的是第二个回答:how to re-format datetime string in php?

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

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

答案 2 :(得分:0)

你正在使用函数调用和参数错误的方法。

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

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

答案 3 :(得分:0)

你错了......

I tried to do something like:

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

你不应该只使用数字(无论是整数还是字符串),而不是总是给你相同的东西。

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