我正在一个活动网站上工作 . 我从我的localhost上的MySQL数据库获得UTC时间并使用PHP将它们回显到页面,然后使用Javascript将它们转换为用户的时区 . 出于某种原因,Javascript给了我一段时间,比我从MySQL获得的时间落后两个小时 . 我自己和我的服务器都在Mountain Standard Timezone中,因此Javascript应该将日期推回六个小时,而日期则会延迟八个小时 . 即使夏令时也仅占一小时的差异,而不是两个 .
这是用于将PHP时间戳转换为日期对象并以YYYY-mm-dd HH输出的Javascript:ii:ss格式(使用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 datetime对象: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
我读过的文档都没有给出答案 . 为什么JST日期落后于MST的PHP日期两小时?
2 回答
发生这种情况的原因是因为
strtotime()
在分析给定日期/时间时默认使用date.timezone
设置,因此结果会得到相应的补偿 .要解决此问题,您可以将
date.timezone
设置为Etc/UTC
或"anchor"来自数据库的时间戳,如下所示:我只是使用此代码在js中提醒日期 .
我得到的是
所以你得到时间关于gmt .in php和mysql服务器必须配置时区 . 所以你不必担心 .