10

完成下面的 PHP 代码以使输出采用用户友好的格式(例如,“2006 年 10 月 27 日”)的最简单、最快的方法是什么?

$result = mysql_query("SELECT my_timestamp FROM some_table WHERE id=42", $DB_CONN);
$row = mysql_fetch_array($result);
$formatted_date = ???($row['my_timestamp']);
echo $formatted_date;
4

8 回答 8

23

您可以使用 MySQL 为您执行此操作,

$result = mysql_query("SELECT DATE_FORMAT(my_timestamp, '%M %d, %Y) AS my_timestamp FROM some_table WHERE id=42", $DB_CONN);
$row = mysql_fetch_array($result);
$formatted_date = $row['my_timestamp'];
echo $formatted_date;

或者使用 PHP,

$result = mysql_query("SELECT my_timestamp FROM some_table WHERE id=42", $DB_CONN);
$row = mysql_fetch_array($result);
$formatted_date = strftime('%B %d, %y', $row['my_timestamp']);
echo $formatted_date;
于 2008-10-26T14:34:35.613 回答
10

我倾向于在 SQL 中进行日期格式化,例如Aron回答。虽然对于 PHP 日期,我更喜欢使用DateTime对象 (PHP5+) 而不是date

$timestamp = new DateTime($row['my_timestamp']);
echo $timestamp->format('F j, Y') . '<br />';
echo $timestamp->format('F j, Y g:ia');
于 2008-10-26T16:05:18.443 回答
2

你想要date()函数。

如果您有 DATE 或 DATETIME 列,则可以使用 SELECT UNIX_TIMESTAMP(mycolumn) AS mycolumn 将其转换为 unix 时间戳以供日期函数使用。

于 2008-10-26T14:35:32.413 回答
2

您绝对应该使用 DateTime 类(或任何家庭种植的等效类),而不是使用日期函数,而不是使用时间戳:

  • 对于 1970 年之前的日期,时间戳在所有环境中都无法正常工作 - 如果您处理生日,您所依赖的代码可能会在某些服务器上中断
  • strftime 的使用也要非常小心,它看起来是一个不错的函数,但它非常不可靠,因为它依赖于进程范围的 setlocale。这意味着如果您的服务器是一个 Windows 机器,那么每个处理器都有一个进程,然后其余的都是多线程的 - 换句话说,一个脚本中的一个 setlocale 会影响同一处理器上的其他脚本 - 非常讨厌!

归根结底,不要依赖时间戳,除非您在纯英语环境中,并且只处理 1970 年到 2032 年之间的日期......!

于 2008-10-26T16:21:18.237 回答
1

如果您在该日期字段上索引了表,并且在调用中使用了 mysql 数据格式函数..(即 .. SELECT DATE_FORMAT(my_timestamp, '%M %d, %Y) AS my_time )它将破坏您的索引。要记住的事情。我们已经看到从我们的 sql 语句中删除所有功能并让 php 处理这一切的速度显着提高。格式化日期和简单数学等功能

于 2008-10-27T13:51:18.120 回答
0

我用:

date("F j, Y", strtotime($row['my_timestamp']))

或者您可以将 SELECT 更改为: DATE_FORMAT(field,'%d %M, %Y') as datetime

于 2008-10-26T14:32:53.417 回答
0

你有一个选择。您可以使用 PHP 中的date()函数并处理 MySQL 的输出,或者您可以使用 MySQL 中的date_format()函数并让它返回一个格式化的字符串开头。

根据我的经验,你使用哪个并不重要,但要保持一致。它们具有不同的格式参数,因此如果您在给定的应用程序中同时使用这两种参数,您将花费大量时间来尝试记住“W”是否为您提供了一周中的某一天或一年中的一周的名称。

于 2008-10-26T14:52:29.620 回答
0

让数据库为您进行格式化。它不太容易出错,因为您没有读取字符串并对其进行转换。相反,数据库正在从其本机格式转换为字符串。

于 2008-10-27T14:07:19.523 回答