1

所以我在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 显示正确的日期?

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

谢谢,乔什

4

3 回答 3

2

看起来你有一个时区问题。如您所见,javascript 是格林威治标准时间,而我怀疑您的是美国西部时间?

在您的 MySQL 查询中尝试以下操作:

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

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

另一种解决方案可能是newDate.setTime(mysqlTimestamp + 7*3600000)在 JavaScript 中仅在此处进行调整。

于 2011-01-13T15:02:49.673 回答
0

如前所述,使用 toString 将在本地时间返回它,但它也会有额外的时区信息。在本地时间显示它的技巧,没有额外的时区信息,是使用 getTimezoneOffset()(以分钟为单位返回一个值)乘以 60(以秒为单位)乘以 1000(以毫秒为单位)

var newDate = new Date();
newDate.setTime(1289191805000 - (newDate.getTimezoneOffset() * 60 * 1000));
dateString = newDate.toUTCString();
alert(dateString);
于 2011-01-13T15:27:07.987 回答
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);
于 2011-01-13T15:29:51.593 回答