1

我的数据库表有一列包含 SQL 时间戳(例如 2009-05-30 19:43:41)。我的 php 程序中需要等效的 Unix 时间戳(一个整数)。

$posts = mysql_query("SELECT * FROM Posts ORDER BY Created DESC");
$array = mysql_fetch_array($posts);
echo $array[Created];

现在它与 SQL 时间戳相呼应,我想要一个 Unix 时间戳。是否有捷径可寻?

4

2 回答 2

12

strtotime()会很高兴地获取一个 SQL 时间戳并将其转换为 UNIX 时间:

echo strtotime($array['Created']);

请注意,不要在数组键周围使用引号是不好的做法。根据文档

始终在字符串文字数组索引周围使用引号。例如,$foo['bar'] 是正确的,而 $foo[bar] 不是。

这是错误的,但它有效。原因是这段代码有一个未定义的常量(bar)而不是字符串('bar' - 注意引号)。PHP 将来可能会定义常量,不幸的是,对于此类代码,这些常量具有相同的名称。它之所以起作用,是因为 PHP 会自动将一个裸字符串(一个不与任何已知符号对应的未加引号的字符串)转换为包含该裸字符串的字符串。例如,如果没有定义名为 bar 的常量,那么 PHP 将替换字符串 'bar' 并使用它。

于 2009-06-01T21:36:47.063 回答
1

给定一个常规的日期时间字段,您可以使用 MySQL 函数UNIX_TIMESTAMP () 在查询中执行此操作:

$posts = mysql_query("SELECT *
                             , UNIX_TIMESTAMP(Created)
                      FROM     Posts
                      ORDER BY Created DESC");

您还应该知道 PHP 函数mysql_fetch_array为查询结果返回两个数字关联键。我觉得这是多余的,所以我喜欢更具体并使用:

$array = mysql_fetch_array($posts, MYSQL_ASSOC);

此外,正如@Paolo Bergantino 所指出的,引用您的回声将是一个不错的决定:

echo $array['Created'];

最后一条评论,您使用的是“SELECT *”——值得一读关于“SELECT *”语法优缺点的讨论

于 2009-06-01T21:57:03.263 回答