MySQL的MySQL时间戳日期未正确转换

时间:2011-01-13 14:56:03

标签: javascript mysql html highcharts

所以我在mysql中有一个时间戳:

SELECT `tsdate`, UNIX_TIMESTAMP( `tsdate`) FROM t1
2010-11-07 21:50:05, 1289191805

如果我尝试使用以下内容,则会显示错误的时间/日期

var newDate = new Date();
newDate.setTime(1289191805000);
dateString = newDate.toUTCString();
alert(dateString);

Mon, 08 Nov 2010 04:50:05 GMT

如何让JavaScript显示正确的日期?

我目前正在使用工具高级图表来查看,它也显示错误的日期/时间(用JavaScript编写)。我不想更改highcharts的代码,但如果需要我会。

谢谢,乔希

3 个答案:

答案 0 :(得分:2)

看起来你有时区问题。正如您所看到的那样,javascript是GMT,而我怀疑你的是美国西部时间吗?

在MySQL查询中尝试以下内容:

SELECT UNIX_TIMESTAMP( CONVERT_TZ( tsdate, '-07:00', 'GMT') ) FROM t1

-07:00可以替换为您所在的任何时区标识符。

另一种解决方案可能是在JavaScript中执行newDate.setTime(mysqlTimestamp + 7*3600000),只在那里进行调整。

答案 1 :(得分:0)

如前所述,使用toString将在本地时间返回它,但它也会有其他时区信息。在没有附加时区信息的情况下,在本地时间显示它的黑客是使用getTimezoneOffset()(以分钟为单位返回一个值)乘以60(以秒为单位)乘以1000(以毫秒为单位)

var newDate = new Date();
newDate.setTime(1289191805000 - (newDate.getTimezoneOffset() * 60 * 1000));
dateString = newDate.toUTCString();
alert(dateString);

答案 2 :(得分:0)

我在http://highslide.com/forum/viewtopic.php?f=9&t=8613

找到了解决方案
Highcharts.setOptions({
   global: {
      useUTC: false
   }
});

我还要感谢Anthony Grist和Seldaek提供了一些有用的代码!

var newDate = new Date();
newDate.setTime(1289191805000 - (newDate.getTimezoneOffset() * 60 * 1000));
dateString = newDate.toUTCString();
alert(dateString);