4

我在一个活动网站上工作。我从本地主机上的 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 日期晚两个小时?

4

2 回答 2

0

我只是使用此代码在 js 中提醒日期。

var thisdate = new Date(<?php echo (strtotime('2012-04-07 23:00:00')*1000);?>);
    alert(thisdate);
    alert(<?php echo (strtotime('2012-04-07 23:00:00')*1000);?>);

我得到的是 在此处输入图像描述

所以你有时间就 gmt .in php 和 mysql 服务器必须配置时区。所以你不必担心。

于 2012-09-28T09:31:15.110 回答
0

发生这种情况的原因是因为在解析给定日期/时间时默认strtotime()使用该设置,因此结果会得到相应的补偿。date.timezone

要解决此问题,您可以将数据库中的时间戳设置date.timezone为或“锚定”,如下所示:Etc/UTC

strtotime("{$row['start']} GMT")
于 2012-09-24T09:32:11.277 回答