我是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中进行一些字符串操作,但我想知道是否有更简单,更有效的方法来执行此操作?
答案 0 :(得分:4)
$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()所做的是检测有效日期并将其转换为时间戳。