2012-09-05 46 views
2

我正在嘗試將這個日期從API轉換爲UTC毫秒最困難的時間。截至目前,我正在顯示日期,但它顯示了7個小時,並將進入第二天,甚至沒有數據。下面是示例格式:麻煩轉換UTC時間到highstocks的時間

2012年8月31日上午9點00分○○秒

目前,我有這個代碼

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

這似乎是它的返回正確的值類型但日期是錯誤的。我也試過 getUTCMilliseconds(),並返回0

編輯:的jsfiddle例如:http://jsfiddle.net/b2NK6/

+0

你試過getUTCMilliseconds()? – DefyGravity

+0

是的,我不認爲日期對象是UTC,並且是一小時前..編輯:它返回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值創建日期對象,它將爲您提供9:00 UTC,這對應於timezone -0700中的凌晨2:00。

被編輯以給出更清晰和更正確的代碼示例。

+0

這只是將時間轉換爲「週五2012年8月31日09:00:00 GMT-0700(太平洋夏令時間)」 –

+0

編輯澄清答案。 –

+0

啊好吧我看你說什麼我怎麼能使它更加動態和這個工作 http://jsfiddle.net/ecHpX/ –

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對象的原始值。

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

另請參閱W3School的comprehensive overview of the Date object

+0

這似乎是返回相同的價值,我已經有 –

+0

嗯,我越來越'1346418000000' ...你有什麼? – DavidRR

+0

我得到1346428800000 –

0

HighStocks預計會將其日期與UTC午夜日期邊界對齊。

假設您的圖表僅日期(無時間部分)交易在這裏是一個技巧,你可以使用:

  1. originalDate.getTime()獲得自午夜UTC 1/1/1970,例如毫秒數。 1362286800000
  2. 將毫秒數除以(1000*60*60*24)得到天的天數自1970年1月1日午夜以來例如15767.208333333334
  3. 執行Math.round()將數字四捨五入到最接近的UTC午夜,例如, 15767
  4. 將數字乘以(1000*60*60*24)以使其回到毫秒級,例如1362268800000

下面是最終的公式:

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