如何将 MySQL TIMESTAMP 转换为 PHP 中的日期时间

How to convert MySQL TIMESTAMP to date time in PHP

我有一个 MySQL 数据库 table,其列名为 "timestamp",类型为 timestamp,属性为 on update CURRENT_TIMESTAMP,默认值为CURRENT_TIMESTAMP.

如果我向 table 添加一条记录,指定其他值,而不是时间戳,那么时间戳会自动添加,如 2016-12-28 17:02:26

在 PHP 中,我使用以下查询 table 查询

SELECT * FROM history WHERE user_id = 9 ORDER BY timestamp ASC

查询结果保存到 $rows 中,我使用 foreach 创建一个数组,其中包含一些其他值的格式。我正在尝试将时间戳格式化为英国类型的 24 小时日期时间:dd/mm/yy, HH:MM:SS.

我已经尝试了 date()strftime() 函数如下:

$formatted_datetime = strftime("%d %m %y  %H %M %S", $row["timestamp"]); 
$formatted_datetime = date("d/m/y, H:i:s", $row["timestamp"]);

这两个都会导致以下通知和日期时间输出不正确,如 01 01 70 00 33 36:

Notice: A non well formed numeric value encountered in /home/ubuntu/workspace/pset7/public/history.php on line 20

我是 PHP 和 MySQL 的新手,到目前为止 none 我看到的其他问题或文档已成功解决执行此问题 conversion.I 不明白为什么 strftime() 不起作用,也不知道如何正确地做到这一点?

通常在 MySQL 日期时间戳中将时间保存为 YYYY-MM-DD HH:MM:SS (2016-12-20 18:36:14) 格式,您可以使用日期格式轻松地将它们转换为您想要的,但必须先将您的输入转换为时间。下面就可以了

$formatted_datetime = date("d/m/y, H:i:s", strtotime($row["timestamp"]));

为此,面向对象(也是最灵活的)方式使用 DateTime class 并使用静态 createFromFormat 方法实例化一个新的 DateTime 对象:

$new_datetime = DateTime::createFromFormat ( "Y-m-d H:i:s", $row["timestamp"] );

现在您可以使用 $new_datetime 对象通过调用对象的 format 方法来生成您想要的任何字符串表示:

echo $new_datetime->format('d/m/y, H:i:s');

首先,由于您有一个 DateTime 对象,您现在还可以进行任何形式的转换(例如转换时区或添加天数)、比较(大于或小于另一个 DateTime ),以及各种时间计算(这个和另一个 DateTime 之间有多少 days/months/etc...)。

日期时间:http://php.net/manual/en/class.datetime.php 学习吧。爱它。活下去。

我会使用 Carbon class 及其字符串格式

$carbon = Carbon::instance('2016-12-28 17:02:26');

然后你可以按照你想要的方式格式化它。

为什么不让 MySQL 来做这项工作呢?你真的想要mm/dd/yy,而不是dd/mm/yy吗?

SELECT *, DATE_FORMAT(timestamp, '%m/%d/%y, %T') formatted_date FROM ....

然后您可以将格式化日期提取为 $row['formatted_date'].

参见 https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

日期为 timestamp 类型,格式如下:'YYYY-MM-DD HH:MM:SS' 或 '2008-10-05 21:34:02.'

$res = mysql_query("SELECT date FROM times;");
while ( $row = mysql_fetch_array($res) ) {
   echo $row['date'] . "
";
}

PHP strtotime 函数将 MySQL 时间戳解析为 Unix 时间戳,可用于在 PHP 日期函数中进一步解析或格式化。

以下是一些可能具有实际用途的其他示例日期输出格式:

echo date("F j, Y g:i a", strtotime($row["date"]));                  // October 5, 2008 9:34 pm
echo date("m.d.y", strtotime($row["date"]));                         // 10.05.08
echo date("j, n, Y", strtotime($row["date"]));                       // 5, 10, 2008
echo date("Ymd", strtotime($row["date"]));                           // 20081005
echo date('\i\t \i\s \t\h\e jS \d\a\y.', strtotime($row["date"]));   // It is the 5th day.
echo date("D M j G:i:s T Y", strtotime($row["date"]));               // Sun Oct 5 21:34:02 PST 2008