我在一个活动网站上工作。我从本地主机上的 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
我读过的所有文档都没有给出答案。为什么 Javascript 日期比 MST 中的 PHP 日期晚两个小时?