【发布时间】:2012-04-20 21:21:18
【问题描述】:
我正在开发一个活动网站。我从本地主机上的 MySQL 数据库获取 UTC 时间,并使用 PHP 将它们回显到页面,然后使用 Javascript 将它们转换为用户的时区。出于某种原因,Javascript 给我的时间比我从 MySQL 得到的时间晚了两个小时。我自己和我的服务器都在山区标准时区,所以 Javascript 应该将日期推迟 6 小时,但日期会推迟 8 小时。即使是夏令时也只考虑一小时的差异,而不是两个。
这是用于将 PHP 时间戳转换为日期对象并以 YYYY-mm-dd HH:ii:ss 格式输出的 Javascript(使用 jQuery):
function leadingzeros(string){
if (string.toString().length == 1){
string = "0" + string;
}
return string;
}
$(document).ready(function(){
var thisdate = new Date(<?php echo (strtotime($row['start'])*1000);?>);
$("#jsdate").html(
thisdate.getFullYear()+"-"+leadingzeros((thisdate.getMonth()+1))+"-"+ leadingzeros(thisdate.getDate())+" "+
leadingzeros(thisdate.getHours())+":"+leadingzeros(thisdate.getMinutes())+":"+leadingzeros(thisdate.getSeconds())
);
});
这是文档正文的 PHP:
<?php
$row = mysqli_fetch_assoc($result);
echo "<ul><li>MySQL datetime object: ".$row['start']."</li>".
"<li>PHP Unix timestamp: ".strtotime($row['start'])."</li>".
"<li>PHP date string: ".date("Y-m-d H:i:s",strtotime($row['start']))."</li>".
"<li>PHP date minus 6 hours (which is our timezone offset): ".date("Y-m-d H:i:s",strtotime($row['start']) - (6*3600))."</li>".
"<li>Javascript date: <span id='jsdate'></span></li></ul>";
?>
它输出:
- MySQL 日期时间对象:2012-04-07 23:00:00
- PHP Unix 时间戳:1333832400
- PHP日期字符串:2012-04-07 23:00:00
- PHP 日期减去 6 小时(这是我们的时区偏移量):2012-04-07 17:00:00
- Javascript 日期:2012-04-07 15:00:00
我读过的所有文档都没有给出答案。为什么 MST 中的 Javascript 日期比 PHP 日期晚两个小时?
【问题讨论】:
-
你的服务器时间和客户端机器时间一样吗?如果是,时区是否也相同?
-
在这里试试:jsfiddle.net/wQMTu - 你看到了什么?
-
不是一个答案,但这可能会有所帮助:我建议您以 UTC 存储和传输时间值,并且仅当它们将显示给用户时、何时以及在何处将它们转换为本地时间。如果您这样做,那么您的服务器是 MST 而您的浏览器是(其他任何东西)都没有关系。它可以帮助消除一大类错误。它可以使重新托管更简单。等等。
-
谢谢,我想我已经根据 nandu 的问题解决了这个问题。我的服务器实际上设置为欧洲/柏林时间,所以我将其切换为 Etc/UTC,这似乎解决了它。
标签: php javascript mysql datetime timestamp