当我通过 FROM_UNIXTIME()
存储日期时日期存储在前一天。
我的调试代码:
$date = date("m-d-Y", time());
$date_unix = explode('-', $date);
if (count($date_unix) == 3) {
list ( $m, $d, $y ) = $date_unix;
$date_unix = mktime(0, 0, 0, $m, $d, $y);
}
echo "<br />Date: " . $date;
echo "<br />Date after mktime: " . $date_unix;
echo "<br />Date manual mktime: " . date("m-d-Y", mktime(0,0,0,8,18,2014));
我正在使用服务器上的日期,将其更改为unixtime mktime()
并尝试将 FROM_UNIXTIME()
存储在数据库中.
$conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
$sql = "INSERT INTO data ( data ) VALUES ( FROM_UNIXTIME(:date_unix) )";
$st = $conn->prepare($sql);
$st->bindValue(":date_unix", $date_unix, PDO::PARAM_INT);
$st->execute();
在经历了这些困惑之后,mysql 仍然存储前一天的日期。
Ex: today is 08/18/2014 and in the database is 2014-08-17
服务器中的 date_default_timezone 是“America/Cuiaba”,如果我更改时区,则不会发生任何变化。
最佳答案
根据定义,Unix 时间戳是 UTC。然而,MySQL 的 FROM_UNIXTIME implicitly converts MySQL 服务器时区的 unix 时间戳(与 PHP 的 default_date_timezone
设置完全不同)。
美洲/库亚巴时区为 UTC - 4 小时,因此日期“2014-08-18 00:00:00 (UTC)”实际上是 2014-08-17 20:00: 00(美国/库亚巴)”——因此存在明显的 1 天差异。
看看this answer了解如何在 MySQL 数据库中的时区之间进行转换。
关于PHP - mktime 在 mysql 中存储错误的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25368321/