我正在努力将此日期从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/
答案 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-午夜日期边界对齐。
假设您的图表只处理日期(没有时间组件),这里可以使用:
originalDate.getTime()
以获取自UTC 1/1/1970午夜以来的毫秒数,例如1362286800000
。 (1000*60*60*24)
的毫秒数除以自UTC UTC 1/1/1970午夜以来的天数,例如15767.208333333334
。Math.round()
将数字四舍五入到最近的UTC午夜,例如15767
。(1000*60*60*24)
,使其恢复到毫秒级,例如1362268800000
。以下是最终公式:
var utcMidnight=new Date(Math.round(anyZoneMidnight.getTime()/86400000)*86400000)