【问题标题】:What's the recommended way to store current time using PHP and MySQL?使用 PHP 和 MySQL 存储当前时间的推荐方法是什么?
【发布时间】:2011-01-20 09:42:07
【问题描述】:

我最初的做法是:

$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_TIMESTAMPmysql函数

其中没有一个使用DATETIMETIMESTAMP mysql var 类型。

你有更好的方法吗?

【问题讨论】:

  • Grrr... 投了反对票,没有发表评论。

标签: php mysql gmt


【解决方案1】:

mysql中建议使用mysqltimestamp(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 functions 来比较日期、计算时差等。

您还可以随时使用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)
  • 我编辑了答案。看一看。也可以在dev.mysql.com/doc/refman/5.0/en/datetime.html查看手册
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    嗯,您可以使用strtotime() 将 MySQL TIMESTAMP 字段转换为 PHP Time() 值

    然后你只需要创建一个函数来正确地将 PHP Time() 值转换为 MySQL TIMESTAMP 值。

    【讨论】:

    • 和将 PHP time() 值转换为 mysql TIMESTAMP 的函数是?
    • @Ygam:您可以使用 MySQL 的 FROM_UNIXTIME() 函数将存储转换为数据库。如果您想在 DB 端进行操作,您也可以实际使用 UNIXTIMESTAMP() 转换出来。
    • @Ygam 你可以用谷歌搜索这个......:$mysqldate = date( 'Y-m-d H:i:s', $phpdate );
    • 我已经这样做了,但是我正在寻找的解决方案是在 mysql 中将时间戳作为数据类型,然后能够使用 date() 函数对其进行格式化:(
    【解决方案4】:

    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)。

    【讨论】:

      【解决方案5】:

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

      编辑:For(Uni-TimeZone) application int 是最快的方法,PHP 有很好的时间转换工具。

      【讨论】:

      • 那么您永远不会为多个时区构建网站
      • 时间戳和日期数据类型的发明有几个原因。此外,它还让其他人了解数据的含义。
      猜你喜欢
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 2015-02-13
      • 1970-01-01
      • 2017-05-27
      相关资源
      最近更新 更多