4

我是 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

4 回答 4

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().

当然,请注意您的时间字符串符合 y2k 标准。两位数的年份不应再使用,除非用于显示目的。

于 2013-08-12T15:40:40.700 回答
4

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

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

$datetime = "120813125055"; 
$d = DateTime::createFromFormat("dmyHis", $datetime);
echo $d->format("Y-m-d H:i:s");
于 2013-08-12T15:42:01.627 回答
0

您正在以错误的方式使用函数调用和参数。

在您的示例中,php 将尝试返回时间为“strtotime('120813125055')”的日期,并且此函数返回 false(解释为 0)。因此,您将返回 Unix 纪元的“Ymd H:i:s”格式的日期。

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

于 2013-08-12T15:41:13.587 回答
0

你在这里误会了..

I tried to do something like:

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

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

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

于 2013-08-12T15:59:53.720 回答