我的数据库表有一列包含 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 时间戳。是否有捷径可寻?
strtotime()
会很高兴地获取一个 SQL 时间戳并将其转换为 UNIX 时间:
echo strtotime($array['Created']);
请注意,不要在数组键周围使用引号是不好的做法。根据文档:
始终在字符串文字数组索引周围使用引号。例如,$foo['bar'] 是正确的,而 $foo[bar] 不是。
这是错误的,但它有效。原因是这段代码有一个未定义的常量(bar)而不是字符串('bar' - 注意引号)。PHP 将来可能会定义常量,不幸的是,对于此类代码,这些常量具有相同的名称。它之所以起作用,是因为 PHP 会自动将一个裸字符串(一个不与任何已知符号对应的未加引号的字符串)转换为包含该裸字符串的字符串。例如,如果没有定义名为 bar 的常量,那么 PHP 将替换字符串 'bar' 并使用它。
给定一个常规的日期时间字段,您可以使用 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 *”语法优缺点的讨论。