2011-10-28 65 views
2

我在我的網站中包含date.js庫,因爲我需要它的功能。date.js解析方法重寫Javascript解析方法

雖然我剛剛意識到,標準的Javascript parse()方法被它覆蓋。

我想在Highcharts中構建折線圖,並且數據系列想要以毫秒爲單位的第一個元素(他們的演示使用Date.UTC()方法顯示它們以實現此目的,但是我的數據以不同的方式返回格式)。

做了一堆字符串處理來將我的數據轉換爲Date.UTC將會識別的格式,還有另一種獲得標準Javascript parse()功能的方法,而date.js被加載?

+0

你不應該在你的問題中提供答案。我已經將答案作爲社區wiki加入了實際答案。 – Liam

回答

7

我知道這不是您的問題的直接解決方案,但它可能無論如何幫助。

如果您想要一個不會修改本機Date對象的全功能日期庫,我寫了一個名爲Moment.js的對象。它提供了DateJS提供的很多東西(格式化,解析,操作,timeago,i18n等),但它更小,更快,並且不會破壞本地日期原型。

https://github.com/timrwood/moment

+0

終於,它發揮作用,在我發現你的文檔有點偏離 - 它說使用moment.day(1)爲第一個設置日期,但它應該是moment.date(1)。 – earachefl

+0

糟糕,看起來像文檔中的錯誤。我現在就更新它。 – timrwood

1

不,這是date.js的預期設計。它添加到Date對象的「原型」中。有些人討厭這個,有些人喜歡它 - 但是你已經發現了這個設計的一個缺點。

1

你可以告訴Highcharts不使用UTC日期:

Highcharts.setOptions({ 
    global: { 
     useUTC: false 
    } 
}); 

您創建圖表之前,您應該這樣做。那麼你不必擔心將你的日期轉換爲UTC,這會更容易。

+0

如果我這樣做,我不理解Highcharts想要查看日期 - 一個實際的Date對象?文檔沒有指定。 – earachefl

+0

@earachefl:日期值將以毫秒爲單位,例如如果你有一個Date對象'd',那麼'd.getTime()'會以毫秒爲單位給你date的值,這就是你提供給Highcharts的內容,不管你是否使用'useUTC:false'。不同之處在於,如果你有'useUTC:true',那麼你需要先將該日期轉換爲UTC日期,然後得到毫秒並饋給Highcharts。 –

0

後,我問的問題,我繼續做這樣說:

d = Date.parse(data); 
      y = d.getFullYear(); 
      m = d.getMonth(); 
      d = d.getDate(); 
      dUTC = Date.UTC(y, m, d); 

,但現在會嘗試你的建議。