2

我最难尝试将此日期从 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/

4

3 回答 3

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。

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

于 2012-09-05T01:55:18.983 回答
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 日午夜以来的毫秒数返回。

另请参阅 W3Schools 以全面了解 Date 对象

于 2012-09-05T02:14:58.333 回答
0

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

假设您的图表仅处理日期(没有时间组件),您可以使用以下技巧:

  1. originalDate.getTime()获取自 UTC 1/1/1970 午夜以来的毫秒数,例如1362286800000.
  2. 将毫秒数除以(1000*60*60*24)得到自 UTC 1/1/1970 午夜以来的15767.208333333334数,例如。
  3. 将数字四舍五入Math.round()到最接近的 UTC 午夜,例如15767.
  4. 将数字乘以(1000*60*60*24)使其回到毫秒级,例如1362268800000

这是最终的公式:

var utcMidnight=new Date(Math.round(anyZoneMidnight.getTime()/86400000)*86400000)
于 2013-02-26T01:52:17.410 回答