我最难尝试将此日期从API转换为UTC毫秒。截至目前,我正在显示日期,但它显示的是7个小时后的第二天,我甚至没有数据。以下是示例格式:
2012年8月31日上午9:00:00
我现在有这个代码
var formattedDate = new Date(data[i].Time);
formattedDate = formattedDate.getTime();
它似乎返回了正确的值类型,但日期是错误的。我也试过getUTCMilliseconds()并返回0。
EDIT:jsfiddle示例:http://jsfiddle.net/b2NK6/
所以您想要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。
经过编辑以提供更清晰、更正确的代码示例
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对象的基元值。
注意:基元值返回为自1970 UTC 1月1日午夜以来的毫秒数[s]。
另请参阅W3Schools以获取Date对象的全面概述。
HighStocks希望将其日期与UTC午夜日期边界对齐。
假设你的图表只涉及日期(没有时间成分),这里有一个你可以使用的技巧:
- 执行
originalDate.getTime()
以获取自UTC 1970年1月1日午夜以来的毫秒数,例如1362286800000
- 将毫秒数除以
(1000*60*60*24)
,得到自1970年1月1日UTC午夜以来的天数,例如15767.208333333334
- 执行
Math.round()
将数字四舍五入到最接近的UTC午夜,例如15767
- 将该数字乘以
(1000*60*60*24)
,使其回到毫秒标度,例如1362268800000
这是最后的公式:
var utcMidnight=new Date(Math.round(anyZoneMidnight.getTime()/86400000)*86400000)