MySQL数据库中存储的日期为timestamp
。如果我使用phpMyAdmin
查看它们,则会显示正确的时间。在php
脚本中,我尝试将UNIX_TIMESTAMP
的日期输出到Javascript Date Object
(new 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时间,浏览器会自动添加时区差异吗?
这里真正的问题是什么?
答案 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代码替换stamp
和value
。
这个想法是基于David Mytton的文章Automatic timezone conversion in JavaScript。
到目前为止,时代似乎是正确的。