我的服务器在另一个时区,当我将 mysql 服务器设置为我的时区并显示当前时间时,它显示时间减去 1 小时,就好像我们仍然在冬季时间,尽管我们已经将我的时区移动到夏季时间 DTS .
我的代码,在 php 中:
$sql->query("SET time_zone= '+02:00' ;"); //sets mysql timezone
$result = $sql->query("SELECT NOW();");
while($row = mysqli_fetch_array($result)){
echo "<br/>Database Date: ".$row[0]; //display current mysql time
}
date_default_timezone_set("Asia/Jerusalem"); //sets php timezone
echo "<br/>PHP Date: ".date('Y-m-d H:i:s')."<br/>";
现在php时间显示完美,mysql时间提前一小时显示。(冬令时)
我需要修复 mysql 日期,我使用的是在插入表时自动更新的时间戳。我确信必须有一个选项来启用夏令时,只是从来没有遇到过。
我强烈建议在 UTC 时间(即 +00:00)对数据库执行所有操作。使用 WHERE 子句执行任何查询时,将您的本地日期/时间转换为 UTC 并执行查询。从数据库中选择时,使用 PHP 的 \DateTime
类将数据库值转换为人工输出。
这样您就可以确切地知道会发生什么以及什么时候发生。您不会经常对一些不合理的时间差异感到惊讶。
$now = $pdo->query("SELECT '2019-04-18 20:38:00+00:00'")->fetch(\PDO::FETCH_COLUMN);
$dateObj = new \DateTime($now);
$dateObj->setTimezone((new \DateTimeZone("Asia/Jerusalem")));
echo $dateObj->format(\DateTime::ATOM);
// outputs 2019-04-18T23:38:00+03:00
// now before DST change:
$now = $pdo->query("SELECT '2019-03-18 20:38:00+00:00'")->fetch(\PDO::FETCH_COLUMN);
$dateObj = new \DateTime($now);
$dateObj->setTimezone((new \DateTimeZone("Asia/Jerusalem")));
echo $dateObj->format(\DateTime::ATOM);
// outputs 2019-03-18T22:38:00+02:00
在我的示例中考虑来自 DB 的日期 2019-04-18 20:38:00+00:00
。如果我想在本地时间显示它,我将 DateTimeZone
对象传递给 setTimezone
并且我可以获得本地时间的日期。
您的示例的问题是耶路撒冷遵循夏令时,每年更改时区 6 个月。偏移量在 3 月 29 日从 +02:00
更改为 +03:00
并且您的 SQL 没有说明该更改。