我正在使用 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”这样的数据是 Unix 时间戳(通过 php mktime() function 创建)。两个时间戳之间的时间是动态生成的,这里是一周(604800 秒)。
经过简单的 Morris.Line() 初始化后,结果如下:
日期格式很奇怪,并且转换得很差:使用 mktime() 生成的实际日期是 2014 年 11 月至 12 月...
添加dateFormat后: function (x) { return new Date(x * 1000).toString(); }
(而不是默认的 dateFormat: function (x) { return new Date(x).toString(); }
)初始化时的参数,将此秒时间戳转换为毫秒时间戳,结果比我们预期的更接近:
但是,如何将此日期显示为“2014 年 12 月 5 日至 12 日”?我尝试使用 xLabels
参数、dateFormat
参数,但这要么不会改变任何内容,要么会引发错误。
作为一个附带问题,由于我的时间戳有一个动态范围(时间戳最小值和时间戳最大值之间的差异可以是一天、一个月、一年......),Morris.js 有没有办法采取考虑到这一点并动态适应该范围,显示天或月,...? 根据我对文档的理解,这应该是可能的,但我可能是错的......
非常感谢。
最佳答案
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();
}
尝试一下,
about javascript methods
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
关于javascript - 日期格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27619883/