0

似乎有太多复杂的方法可以做到这一点,所以我正在寻找一个干净、简洁的答案来解决这个问题。

我写了一个博客,点击提交,标题、内容和时间戳插入到我的博客表中。稍后,博客将显示在 blogindex.php 页面上,日期格式为 MM-DD-YYYY。

所以这是我的 3 步问题:

  1. 插入日期的最佳列类型是什么?(例如:INT、VARCHAR 等)

  2. 最好使用的 INSERT INTO 命令是什么?(例如:NOW()、CURDATE() 等)

  3. 当我查询表并在数组中检索此数据时,回显它的最佳方法是什么?

我是 PHP/MySQL 的新手,所以如果我不懂行话并且对这个主题的 1000 种不同意见感到非常沮丧,这些意见并没有具体解决我的问题,或者只涵盖了 3 个问题中的一个,请原谅我......

4

4 回答 4

1

以下是我对您的三个问题的看法:

  1. 使用正确的数据类型:Date 或 DateTime。我会选择 DateTime 类型,因为你也存储时间(如果你想有某种顺序,当你添加帖子时可能会非常方便)。

  2. 这完全取决于您是只想要日期(使用CURDATE())还是日期 + 时间(使用NOW())。

  3. 您获取数据并根据需要对其进行格式化。不要在查询中对其进行格式化,只需为其使用正确的 PHP 函数(例如使用DateTime)。您如何获取数据并不重要;您可以使用PDOMySQLi或...

于 2012-10-17T22:48:38.260 回答
0

始终以 UTC 存储和处理日期和时间,并在表示层中执行时区调整 - 从长远来看,它大大简化了事情。

MySQL 提供了许多不同的类型来处理日期和时间,但您唯一需要担心的是DATETIME(该DATE类型不存储时间信息,这会在信息丢失时混淆时区转换,并且该TIMESTAMP类型执行自动 UTC转换(如果更改系统时区信息可能会弄乱程序)并且范围较小(1970-2038)。

CURDATE()函数仅返回当前日期并排除时间信息,但是这会返回本地时区的信息,该时区可以更改。避免这种情况。该NOW()函数是一个改进,但同样返回当前时区的数据。

因为您希望将所有内容都保留在 UTC 中,所以您实际上会想要使用该UTC_TIMESTAMP 功能

要返回值,您需要使用变量按顺序执行 SQL 命令,如下所示:

SET @now = UTC_TIMESTAMP()
INSERT INTO myTable ( utcDateTimeCreatedOrSomething ) VALUES ( @now )
SELECT @now
于 2012-10-17T22:49:52.307 回答
0

Date 可能是最好的类型,尽管 datetime 也可以作为记录更准确。

没有“最佳插入”,但您真正想要什么以及您希望日期有多准确。对于博客,我会说它是日期时间并使用 NOW()。因此访问者可以非常准确地看到此帖子的发布时间。

当然,你可以很容易地找到运行 sql 并使用 google 的 php 从 sql 中获取选择查询,所以我将把这个简单的工作留给你自己。

要回显日期,您可以使用 php 日期格式,例如:

$today = date("m-d-y");                         // 03-10-01
于 2012-10-17T22:52:16.420 回答
0

我认为 Styxxy 做得很好,但这里是您的 PHP 日期格式化部分的链接...... 如何在 PHP 中最轻松地格式化日期时间? (支持链接:http://php.net/manual/en/datetime.format.php)基本上是
回显日期(“d/m/Y”,strtotime('2009-12-09 13:32:15') ) ...虽然,我认为strtotime是不必要的,因为它应该已经具有日期时间的类型。

就 MySQL 而言,是的,将其作为 datetime col 执行,使用 NOW() 作为 SQL 关键字,并且根据您希望如何从数据库中获取它,您可以...

SELECT CAST( col_nameAS DATE) .... 或 .... SELECT CAST( col_nameAS DATETIME) <-- 由于 col 类型,最后一个是隐含的。

祝你好运!:)

于 2012-10-17T22:56:41.830 回答