2014-12-23 149 views
0

我使用Morris.js來顯示折線圖,並用時間戳作爲X軸值。
作爲一個例子會比任何解釋好,這裏是一個示例數據:錯誤的日期格式

{ 
"1415376000": 
    {"VALUE1":0,"VALUE2":0,"VALUE3":16,"VALUE4":0}, 
"1415980800": 
    {"VALUE1":0,"VALUE2":0,"VALUE3":2,"VALUE4":0}, 
"1416585600": 
    {"VALUE1":0,"VALUE2":0,"VALUE3":2,"VALUE4":0}, 
"1417190400": 
    {"VALUE1":0,"VALUE2":0,"VALUE3":7,"VALUE4":0}, 
"1417795200": 
    {"VALUE1":10,"VALUE2":6,"VALUE3":16,"VALUE4":3}, 
"1418400000": 
    {"VALUE1":5,"VALUE2":4,"VALUE3":67,"VALUE4":5}, 
"1419004800": 
    {"VALUE1":3,"VALUE2":0,"VALUE3":38,"VALUE4":3}, 
"1419609600": 
    {"VALUE1":4,"VALUE2":1,"VALUE3":24,"VALUE4":1} 
} 

正如你所看到的,「1419609600」 -ish數據是Unix的時間戳(通過PHP mktime() function創建)。兩個時間戳之間的時間是動態生成的,這裏是一週(604800秒)。

簡單Morris.Line()初始化完成後,這裏是結果:result

的日期格式奇怪,並轉化不佳:用mktime()產生的實際日期是2014年11 - 12月...

加入dateFormat: function (x) { return new Date(x * 1000).toString(); }(而不是默認的dateFormat: function (x) { return new Date(x).toString(); })參數在初始化時,這個轉化時間戳秒進入到毫秒的時間戳後,結果比更接近我們所期望的:

result2

但是,那麼如何將這個日期顯示爲「2014年12月5日至12日」呢?我試圖玩xLabels參數,dateFormat參數,但這或者不會改變任何內容或拋出錯誤。

作爲一個側面的問題,由於我的時間戳有一個動態範圍(timestamp min和timestamp max之間的差值可以是一天,一個月,一年......),有沒有辦法讓Morris.js考慮到這一點,並動態適應這個範圍,顯示天或monthes ...? 從我對文檔的理解,這應該是可能的,但我可能是錯的...

非常感謝。

回答

1
dateFormat: function (x) { 
var d = new Date(x * 1000); 
var monthNames = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]; 
return d.getDate()+' '+monthNames[d.getMonth()]+' '+d.getFullYear(); 
} 

試試吧,

關於JavaScript的方法

getDate() - http://www.w3schools.com/jsref/jsref_getdate.asp

getMonth() - http://www.w3schools.com/jsref/jsref_getmonth.asp

getFullYear() - http://www.w3schools.com/jsref/jsref_getfullyear.asp

+1

你應該解釋一下你的代碼。 –

+0

@SebastianZartner好的,已更新。 – waki

+0

這會按預期格式化日期。謝謝 ! – johnkork