如何将 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
我有一个 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