我知道如何使用日期格式字符串,将date('Y/m/d H:i:s');
转换为2009/12/18 11:37:45
。
我想要一个可以做相反的功能 - 查看格式化日期然后返回格式。 PHP中有一个吗?
原因是我们在各种格式的数据库中保存了时间戳,我正在编写一个处理所有旧表并分析日期条目的工具。
编辑:所以我想没有一种直截了当的方法来做到这一点。我以为我可以使用strftime(),它返回自纪元以来的秒数。所以更好的问题是我可以在mySQL数据库的时间戳字段中以秒为单位使用该时间吗?如果表的结构是时间戳而不是varchar,我猜这会有效,有时是。答案 0 :(得分:3)
不,没有这样的功能。您需要编写一组表达所有可能变体的正则表达式匹配,例如
$variations = array (
'^([0-9]{4})/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{4}2$' => 'Y/m/d H:i:s',
// more here
);
foreach ($dateFromDatabase as $date) {
foreach ($variations as $regexp => $dateFormat) {
if (preg_match ('|' . $regexp . '|', $date)) {
$matches[$dateFromDatabase] = $dateFormat;
break;
}
}
}
// $matches now consists of an array of dates => format
答案 1 :(得分:2)
查看strptime()。
答案 2 :(得分:1)
是的,确实存在这样的功能:strtotime()
strtotime - 将任何英文文本日期时间描述解析为Unix时间戳
编辑:好的,该函数可能不会返回使用的格式,但您将获得时间戳,然后您就可以以任何格式存储它。
答案 3 :(得分:0)
您可以使用正则表达式来标识特定的日期格式。您可以添加到正则表达式列表,直到您有100%的覆盖率。
if(preg_match('/^\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}$/', $Date))
$Format = 'Y/m/d H:i:s';
等...
答案 4 :(得分:0)
您不需要将日期转换为m / d / Y格式。您可以使用strtotime将任何有效日期转换为您想要的任何其他日期格式。
date( 'format', strtotime($date) );
答案 5 :(得分:0)
也许最好将它们全部保存为unix时间戳,然后根据用户想要查看的内容,您可以非常轻松地格式化它们。