2014-12-23 3 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 Timestamps (созданный с помощью PHP mktime() function). Время между двумя временными метками динамически генерируется, здесь это одна неделя (604800 секунд).

После инициализации простой Morris.Line(), вот результат: result

Дата странным образом отформатирован, и плохо трансформируются: фактические даты, созданные с() указываете ей в ноябре-декабре 2014 года ...

После добавления dateFormat: function (x) { return new Date(x * 1000).toString(); } (вместо стандартных dateFormat: function (x) { return new Date(x).toString(); }) параметра при инициализации, превращая эти секунды метку времени в метку время в миллисекундах, то результат будет ближе, чем мы ожидаем:

result2

Но как, например, показать эту дату как «05-12 декабря 2014 года»? Я попытался сыграть с параметром xLabels, dateFormat, но это либо ничего не меняет, либо вызывает ошибки.

В качестве побочного вопроса, так как моя временная метка имеет динамический диапазон (разница между меткой времени и временной меткой max может составлять один день, один месяц, один год ...), есть ли способ для Morris.js учтите это и динамично адаптируйтесь к этому диапазону, показывая дни или дни, ...? Из моего понимания документации это должно быть возможно, но я могу ошибаться ...

Большое спасибо.

ответ

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(); 
} 

Попробуйте,

о яваскрипта методов

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

Смежные вопросы