使用PHP和MySQL存储当前时间的推荐方法是什么?

11

我的初始方法是:

$current = time(); // save this to column CURRENT_TIME with column type VARCHAR

//retrieve it like this
$retrieved = mysql_query(....) //assume query for getting the stored time value
$time = strtotime($retrieved);

我遇到过以下几种方法:

  1. 使用 gmstrftime 来处理 GMT 时间
  2. 使用 INT 而不是 VARCHAR 作为列的类型
  3. 使用 MySQL 函数 CURTIMECURDATE
  4. 使用 UNIX_TIMESTAMP MySQL 函数

但以上方法都没有使用 DATETIMETIMESTAMP MySQL 变量类型。

您是否有更好的解决方案呢?


没有留下评论就被踩了,真气人。 - Nicole
5个回答

19

建议在 mysql 中使用 timestamp (YYYY-MM-DD HH:MM:SS)字段类型来存储时间和日期变量。

$sDate = date("Y-m-d H:i:s"); // 2015-04-07 07:12:51
mysql_query("insert into `table_name` set `created_on` = '$sDate'");

它使你能够在 MySQL 查询中直接使用 MySQL 函数 来比较日期、计算时间差等。

另外,你也可以始终使用 strtotime() 函数检索时间戳。

$result = mysql_query("select `created_on` from `table_name`");
$row = mysql_fetch_row($result);
$iTimestamp = strtotime($row[0]); // 1428390771

那么,为了将其存储到数据库中,我需要使用date('YYYY-MM-DD HH:ii:ss'),以便与mysql时间戳兼容吗?(因为我尝试过其他格式,但列仍然是0000-00-00 00:00:00) - yretuta
我编辑了答案,请看一下。 同时请查看http://dev.mysql.com/doc/refman/5.0/en/datetime.html手册。 - Alexar

4

我只是在MySQL中使用TIMESTAMP值类型,并让MySQL使用其自己的CURRENT_TIMESTAMP


1

你可以使用strtotime()将MySQL TIMESTAMP字段转换为PHP Time()值。

然后,你只需要编写一个函数,将PHP Time()值正确地转换为MySQL TIMESTAMP值即可。


将PHP的time()值转换为mysql TIMESTAMP的函数是什么? - yretuta
@Ygam:你可以使用MySQL的FROM_UNIXTIME()函数将时间戳转换为存储到数据库中。如果你想在数据库端进行转换,也可以使用UNIXTIMESTAMP()函数将其转换为时间戳。 - Amber
@Ygam 你本可以通过谷歌搜索得到这个答案... :$mysqldate = date( 'Y-m-d H:i:s', $phpdate ); - Tyler Carter
我已经完成了那个,但我想要的解决方案是在mysql中使用时间戳作为数据类型,然后能够使用date()函数格式化它: - yretuta

0

将其存储为int更为合理。 您可以保存日期的行格式,以后可以提取其他格式和更多数据.. 我也将其保存为int。

编辑:对于(Uni-TimeZone)应用程序,int是最快的方法,而PHP具有出色的时间转换工具。


那么你就不需要为多个时区构建网站。 - zerkms
时间戳和日期数据类型被发明有几个原因...此外,它可以让其他人了解数据的内容。 - Cesar

0
MySQL使用的格式不需要与PHP使用的格式匹配。在两者之间选择最好的。数据库有日期数据类型是有原因的;在MySQL中,您可以从以下选项中选择:

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-types.html

在PHP中,你基本上有三个选择:

  • 传统的时间戳易于处理,可以在MySQL查询中使用——参见FROM_UNIXTIME()UNIX_TIMESTAMP()——但它们存在严重的范围问题(你不能依赖它们来表示1970年之前的日期,因此它们不适用于生日等场景)。

  • DateTime对象功能强大且内置,没有范围问题并支持时区。然而,它们有时不太容易使用,因为它们似乎缺少一些重要的方法。

  • 你可以使用自定义日期对象(第三方或基于你自己的DateTime实现)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接