同时格式化多个mySQL日期字段

时间:2009-07-11 00:57:26

标签: php mysql

我有一个包含12个时间戳列和3个其他字段的表。 我无法更改时间戳列上的字段类型。

我需要以m / d / y的形式向用户显示所有15个字段。有没有办法同时格式化它们而不必对每个应用DATE_FORMAT? 我宁愿不必这样做     

SELECT DATE_FORMAT(field, '%c/%e/%y') AS field
如果可能的话,每一个。

我正在使用mySQL& PHP和我并不关心转换发生的位置。

3 个答案:

答案 0 :(得分:1)

您是否考虑使用MDB2或PDO等数据库层,可以为您转换类型? MDB2有一个日期类型,显示YYYY-MM-DD格式,但很容易用strftime和strtotime转换为m / d / y。

使用MDB2的一个例子:

$dsn = "mysql://user@pass/db"; (not sure about DSN format, you might have to poke the MDB2 documentation)
$connection = MDB2::connect ($dsn);
$connection->loadModule ("Extended");
$rows = $connection->getAll ("your query", array ('date', ...), $parameters, array (paramater-types), MDB2_FETCHMODE_OBJECT);

if (MDB2_Driver_Common::isError ($rows)) throw new Exception ("Error!");
else { foreach ($rows as $row) { ...Do something... } }

您可以在MDB2 on InstallationWiki找到有关以这种方式使用MDB的更多文档。此外,您还可以找到MDB2数据类型列表以及它们映射到显示值的内容。此外,Docs for MDB2_Extended将是一个很好的信息来源。

编辑:显然你必须分别在每一行使用strftime和strtotime。如果您将MDB2_FETCHMODE_OBJECT切换到上面的MDB2_FETCHMODE_ORDEREDMDB2_FETCHMODE_ASSOC,您可以使用foreach循环在需要重新格式化的所有行上运行strftime和strtotime。

答案 1 :(得分:1)

您可以在php中编写一个简单的日期转换例程,例如:

function mysql2table($date) {
    $new = explode("-",$date);
    $a=array ($new[2], $new[1], $new[0]);
return $n_date=implode("-", $a);
}

我从这里偷走了:http://www.daniweb.com/code/snippet736.html#

然后只需遍历您的SQL列结果,检查该值是否为日期并进行转换。

答案 2 :(得分:0)

我认为不可能,查询在返回结果之前不知道列是什么,你必须告诉它改变每个日期时间的格式。

马特