PHP-帮助将时间戳字符串转换为可读的时间格式

6

我有一个称为Time的记录,其包含以下日期字符串:20100902040003在输入文件中。

我需要一些PHP帮助将其转换为更可读的格式,例如:2010-09-02 04:00:03,并且我想在打印表格数据时将其格式化。

4个回答

10
$timestamp = "20100902040003";
echo date('Y-m-d H:i:s', strtotime($timestamp)); // output: 2010-09-02 04:00:03

@downvoter:它的结果与问题中所述的相同。你能详细解释一下吗? - Naveed
由于我误读了,我将我的-1更改为+1。我忽略了strtotime()调用。 - BoltClock
@codaaddict 因为函数strtotime将其转换为时间戳。 - Mischa
似乎很傻,为了将一些标点符号插入字符串中,就要运行所有日期解析和日期格式化代码。 - nohat

2

由于时间戳不是Unix时间戳,因此您必须使用substr()函数。

$timestamp = "20100902040003";

$year = substr($timestamp, 0, 3);
$month = substr($timestamp, 4, 5);
$day = substr($timestamp, 6, 7);
$hour = substr($timestamp, 8, 9);
$minute = substr($timestamp, 10, 11);
$second = substr($timestamp, 12, 13);

然后您可以使用进行安排。
$formatted_timestamp = sprintf('%s-%s-%s %s:%s:%s', $year, $month, $day, $hour, $minute, $second);

谢谢。我应该把这个函数放在我的foreach语句中吗?因为我是动态创建行的。谢谢。 - cjd143SD
我修复了格式,因为 G 会打印没有前导零的小时数,所以你必须使用 H。你可以在创建数组时放置该函数,或在打印输出时放置该函数,两种方法都可以。 - leonardys

2

因为你的数据已经是正确的格式,只需要一些标点符号,所以你可以使用正则表达式,而不是日期解析和日期格式化函数。

$timestamp = "20100902040003";
preg_replace('/(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/', 
             '\1-\2-\3 \4:\5:\6', $timestamp)

yields:

2010-09-02 04:00:03

2

如果你确定输入文件中的所有记录都有格式为YYYYMMDDHHmmss,那么你可以尝试自己拆分字符串,然后使用date()mktime()结合生成一个有意义的日期格式。


谢谢。是的,所有记录都具有完全相同的格式。你能给我展示一个例子吗? - cjd143SD
1
strtotime() 函数可以理解 ISO 8601 时间戳,例如 "20100902040003"。 - nohat
我认为nohat的解决方案更好,因为它完全跳过了datemktime函数。 - BoltClock
@nohat:最终我意识到了这一点,并将该声明从我的答案中删除。对于造成的困惑,我感到抱歉。 - BoltClock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接