8

我有一个 MySQL DB 表,其中有一列名为"timestamp",类型为timestamp,属性为on update CURRENT_TIMESTAMP,默认值为CURRENT_TIMESTAMP

如果我向表中添加一条记录,指定其他值,但不指定时间戳,则时间戳会自动添加,如2016-12-28 17:02:26.

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

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

查询的结果被保存到$rows,我使用 aforeach创建一个数组,其中一些其他值已格式化。我正在尝试将时间戳格式化为英国类型 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

注意:在第 20 行的 /home/ubuntu/workspace/pset7/public/history.php 中遇到格式不正确的数值

我是 PHP 和 MySQL 的新手,到目前为止,我看到的其他问题或文档都没有成功解决执行此转换的问题。我不明白为什么strftime()不起作用,也不知道如何正确执行此操作?

4

5 回答 5

11

为此,OO(也是最灵活的)方式使用DateTime类并使用静态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)。

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

于 2016-12-28T17:46:49.480 回答
4

通常在 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"]));
于 2016-12-28T17:45:58.447 回答
3

为什么不让 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

于 2016-12-28T18:03:37.933 回答
1

日期的timestamp类型具有以下格式:“YYYY-MM-DD HH:MM:SS”或“2008-10-05 21:34:02”。<br>

$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
于 2020-11-11T12:27:53.853 回答
0

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

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

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

于 2016-12-28T17:58:35.230 回答