我是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()所做的是检测有效日期并将其转换为时间戳。