Google LineChart中显示的时间不正确

时间:2014-07-08 13:56:07

标签: javascript php mysql datetime google-visualization

MySQL数据库中存储的日期为timestamp。如果我使用phpMyAdmin查看它们,则会显示正确的时间。在php脚本中,我尝试将UNIX_TIMESTAMP的日期输出到Javascript Date Objectnew Date())。在Google Chart中显示数据时,时间偏移为+2:00小时(我当前的时区)。我还调查了时间戳,时间戳转换器告诉我当地时间是正确的,UTC时间是-2:00小时。

在php脚本中,我已经使用date_default_timezone_set()设置了时区。 SELECT @@global.time_zone, @@session.time_zone;输出SYSTEM。但我仍然得到时间抵消。现在我用

SELECT UNIX_TIMESTAMP(CONVERT_TZ(Timestamp, "+02:00", @@session.time_zone)) ...

我得到了正确的数据。这是否意味着数据以2小时的偏移量存储?为什么phpMyAdmin向我显示正确的日期和时间?或者Google图表是否需要UTC时间,浏览器会自动添加时区差异吗?

这里真正的问题是什么?

1 个答案:

答案 0 :(得分:0)

现在我写了一个函数,它将数据库中的时间戳转换为UTC日期:

function getDateinUTC(timestamp){
    var date = new Date(timestamp * 1000);
    var year    = date.getUTCFullYear();
    var month   = date.getUTCMonth() + 1; // getMonth() is zero-indexed, so we'll increment to get the correct month number
    var day     = date.getUTCDate();
    var hours   = date.getUTCHours();
    var minutes = date.getUTCMinutes();
    var seconds = date.getUTCSeconds();

    return new Date(year, month, day, hours, minutes, seconds);
}

当我创建DataTable时,我只需调用此处显示的函数:

rows: [
    {c:[{v:getDateinUTC(stamp)}, {v: value}]},
]

您必须使用填充该地点的php代码替换stampvalue

这个想法是基于David Mytton的文章Automatic timezone conversion in JavaScript

到目前为止,时代似乎是正确的。