【问题标题】:MySQL Timestamp to JavaScript Date not converting correctlyMySQL 时间戳到 JavaScript 日期未正确转换
【发布时间】:2011-01-13 14:56:02
【问题描述】:

所以我在 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的代码,但如果需要我会。

谢谢,乔希

【问题讨论】:

  • 时间戳应该在哪个时区?也是UTC吗?
  • 如果您居住在 GMT-7 时区,使用.toString() 将产生正确的时间!

标签: javascript mysql html highcharts


【解决方案1】:

您似乎遇到了时区问题。如您所见,javascript 是格林威治标准时间,而我怀疑您的是美国西部时间?

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

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

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

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

【讨论】:

  • 但我不希望对时区进行硬编码。如果其他人查看来自 -8 的数据怎么办?还是-5?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我在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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-29
      • 2023-03-16
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 2017-06-07
      • 2023-03-26
      相关资源
      最近更新 更多