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

$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;
有帮助吗?

解决方案

您可以使用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;

其他提示

我倾向于在 SQL 中进行日期格式化,例如 阿伦回答. 。虽然对于 PHP 日期,我更喜欢使用 约会时间 对象(PHP5+)结束 日期:

$timestamp = new DateTime($row['my_timestamp']);
echo $timestamp->format('F j, Y') . '<br />';
echo $timestamp->format('F j, Y g:ia');

您需要 date()功能。

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

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

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

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

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

我用:

日期(&quot; F j,Y&quot;,strtotime($ row ['my_timestamp']))

或者您可以将SELECT更改为:DATE_FORMAT(字段,'%d%M,%Y')作为日期时间

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top