繁体   English   中英

在PHP中从SQL格式化时间戳的最简单方法是什么?

[英]What is the simplest way to format a timestamp from SQL in PHP?

什么是最简单,最快速的方法来完成下面的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;

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

我倾向于在S​​QL中进行日期格式化,就像Aron回答一样 虽然PHP日期,我更喜欢使用的DateTime对象(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类(或任何home增长的等效类),over de Date函数,而不是使用timestamps:

  • 对于1970年以前的日期,时间戳在所有环境中都不能正常工作 - 如果您处理生日,那么您依赖的代码可能会在某些服务器上中断
  • 也非常小心strftime的使用,它看起来像一个很好的功能,但它是非常不可靠的,因为它取决于setlocale,这是在整个流程。 这意味着如果你的服务器是一个Windows框,你每个处理器有一个进程,然后其余部分是多线程的 - 换句话说,一个脚本中的一个setlocale将影响同一处理器上的其他脚本 - 非常讨厌!

在一天结束时,不要依赖时间戳,除非你是在英语环境中,并且只处理1970年到2032年之间的日期......!

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

我用:

日期(“F j,Y”,strtotime($ row ['my_timestamp']))

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM