无法将高时间的时间转换为UTC

时间:2012-09-05 01:37:08

标签: javascript jquery date timezone highcharts

我正在努力将此日期从API转换为UTC毫秒。截至目前我正在显示日期,但它显示提前7个小时,然后继续到第二天,我甚至没有数据。以下是示例格式:

  

2012年8月31日上午9:00:00

我目前有这段代码

var formattedDate = new Date(data[i].Time);
formattedDate = formattedDate.getTime();

似乎它正在返回正确的值类型,但日期错误。我也试过了 getUTCMilliseconds()并返回0.

编辑:jsfiddle示例:http://jsfiddle.net/b2NK6/

3 个答案:

答案 0 :(得分:2)

所以你想要UTC时间的原始时间戳,而不是本地时间?

比较

(new Date(Date.UTC(2012, 7, 31, 9, 0, 0, 0))).getTime(); /* month 7 is August */

(new Date(Date.parse("8/31/2012 9:00:00 AM"))).getTime();

解析字符串(第二个示例)时,它会在创建日期对象时应用您的本地时区信息。如果您在时区-0700,那么创建的日期实际上将对应于UTC时间下午4:00。

但是如果您通过明确说明您正在指定UTC值来创建日期对象,它将为您提供UTC时间上午9:00,这相当于时区-0700上午2:00。

编辑以提供更清晰,更正确的代码示例。

答案 1 :(得分:0)

var dateString = "8/31/2012 9:00:00 AM";  // assuming this is expressed in local time

var millisecondsSinceTheEpoch = (new Date(dateString)).valueOf();  // 1346418000000

var isoString = (new Date(millisecondsSinceTheEpoch)).toISOString();  // 2012-08-31T13:00:00.000Z

// Note: example return values from a computer on U.S. Eastern Daylight Time (-4:00).

来自W3Schools

valueOf()方法返回Date对象的原始值。

注意:原始值以UTC自1970年1月1日午夜以来的毫秒数[s]返回。

另请参阅W3Schools comprehensive overview of the Date object

答案 2 :(得分:0)

HighStocks期望将其日期与UTC-午夜日期边界对齐。

假设您的图表只处理日期(没有时间组件),这里可以使用:

  1. 执行originalDate.getTime()以获取自UTC 1/1/1970午夜以来的毫秒数,例如1362286800000
  2. 将自(1000*60*60*24)的毫秒数除以自UTC UTC 1/1/1970午夜以来的天数,例如15767.208333333334
  3. 执行Math.round()将数字四舍五入到最近的UTC午夜,例如15767
  4. 将数字乘以(1000*60*60*24),使其恢复到毫秒级,例如1362268800000
  5. 以下是最终公式:

    var utcMidnight=new Date(Math.round(anyZoneMidnight.getTime()/86400000)*86400000)