JS获取一段时间的日期(获取时间轴日期数组)

var dataUtil = ( function(){

return {
    /**
     * getXAxis()方法作用:获取开始日期和结束日期之间(包含开始日期和结束日期)的日期数组,可作为时间轴坐标等
     * @param  filters: {tab:0/1/2, startTime:开始日期, endTime:结束日期}
     * 说明: tab:取值0或1或2,分别表示日、月、年,对应的startTime和endTime的格式分别为'yyyy-MM-dd'、'yyyy-MM'、'yyyy'
     */
    getXAxis: function(filters) {
        var tab = filters.tab;
        var startTime = new Date(filters.startTime);
        var endTime = new Date(filters.endTime);
        var length = 0;   //日期跨度变量

        if( 0 == tab ) {
            length = (endTime.getTime() - startTime.getTime()) / (1000*24*60*60) + 1;
        } else if( 1 == tab ) {
            length = (endTime.getFullYear() - startTime.getFullYear()) * 12 + (endTime.getMonth() - startTime.getMonth()) + 1;
        } else {
            length = endTime.getFullYear() - startTime.getFullYear() + 1;
        }

        var xAxis = new Array(length);
        xAxis[0] = filters.startTime;
        for( var i = 1; i < length; i++ ) {
            if( 0 == tab ) {
                startTime.setDate( startTime.getDate() + 1 );
                xAxis[i] = startTime.Format("yyyy-MM-dd");
            } else if( 1 == tab ) {
                startTime.setMonth( startTime.getMonth() + 1 );
                xAxis[i] = startTime.Format("yyyy-MM");
            } else {
                startTime.setFullYear( startTime.getFullYear() + 1 );
                xAxis[i] = startTime.Format("yyyy");
            }
        }

        return xAxis;

    },
    /**
     * 根据X坐标数组生成对应的Y坐标数组
     * @param  xArr: 上面getXAxis()方法返回的X坐标(时间轴坐标)数组;   
     *  list:[{xAxis:"2017-03-01", yAxis:"200"},{xAxis:"2017-03-02", yAxis:"100"},...]  后台返回的坐标点数组,按时间升序排列
     */
    getYAxis: function(xArr, list) {
        var len = xArr.length;
        var yAxis = new Array(len);
        var j = 0; listLen = list.length;
        for( i in xArr ) {
            if( j < listLen && xArr[i]== list[j].xAxis ) {
                yAxis[i] = list[j].yAxis;
                j ++;
            } else {
                yAxis[i] = 0;
            }
        }

        return yAxis;
    }
};

})();

(上面代码为原创,下面代码来自:http://www.cnblogs.com/zhangpengshou/archive/2012/07/19/2599053.html,)
// 对Date的扩展,将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子:
// (new Date()).Format(“yyyy-MM-dd hh:mm:ss.S”) ==> 2006-07-02 08:09:04.423
// (new Date()).Format(“yyyy-M-d h:m:s.S”) ==> 2006-7-2 8:9:4.18
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
“M+”: this.getMonth() + 1, //月份
“d+”: this.getDate(), //日
“h+”: this.getHours(), //小时
“m+”: this.getMinutes(), //分
“s+”: this.getSeconds(), //秒
“q+”: Math.floor((this.getMonth() + 3) / 3), //季度
“S”: this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp. 1,(this.getFullYear()+"").substr(4RegExp. 1.length));
for (var k in o)
if (new RegExp(“(” + k + “)”).test(fmt)) fmt = fmt.replace(RegExp. 1,(RegExp. 1.length == 1) ? (o[k]) : ((“00” + o[k]).substr((“” + o[k]).length)));
return fmt;
}
调用:

var time1 = new Date().Format(“yyyy-MM-dd”);
var time2 = new Date().Format(“yyyy-MM-dd HH:mm:ss”);

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,关于您的问题,我可以为您提供一些指导。 首先,您需要使用 Echarts JS 库来生成 Profile 图。Echarts JS 是一款基于 JavaScript 的可视化图表库,可以帮助您快速地绘制各种类型的图表,包括 Profile 图。 其次,您需要从数组中提取出对象的两个时间值,并将它们用作 x 的时间。您可以使用 JavaScript 中的 Array.map() 函数来实现这一点。具体来说,您可以编写如下的代码: ```javascript var data = [/* your data here */]; var times = data.map(function(obj) { return obj.start_time + ' - ' + obj.end_time; }); ``` 其中,`data` 是您的数组,`start_time` 和 `end_time` 是您的对象中的时间属性。上述代码将返回一个新数组 `times`,其中的每个元素都是一个字符串,表示每个对象的时间范围。 接下来,您需要将对象中的 `dev` 值分成不同的组,并将它们用作 y 。您可以使用 JavaScript 中的 Array.reduce() 函数来实现这一点。具体来说,您可以编写如下的代码: ```javascript var groups = data.reduce(function(acc, obj) { if (!acc[obj.dev]) { acc[obj.dev] = []; } acc[obj.dev].push(obj); return acc; }, {}); ``` 其中,`groups` 是一个对象,它的每个属性都是一个 `dev` 值,对应的值是一个数组,其中包含了所有具有相同 `dev` 值的对象。 最后,您需要将同一时间和同一 `dev` 值的对象生成一个中间的图形。您可以使用 Echarts JS 中的 Series 数据项来实现这一点。具体来说,您可以编写如下的代码: ```javascript var series = []; for (var dev in groups) { var data = []; for (var i = 0; i < times.length; i++) { var obj = groups[dev].find(function(obj) { return obj.start_time + ' - ' + obj.end_time === times[i]; }); data.push(obj ? obj.value : 0); } series.push({ name: dev, type: 'line', data: data }); } ``` 上述代码将为每个 `dev` 值生成一个 Series 数据项,并将其添加到 `series` 数组中。每个 Series 数据项都是一个折线图,其数据由同一 `dev` 值的对象在不同时间段内的值组成。 最后,您可以使用 Echarts JS 中的 Chart 对象来绘制 Profile 图。具体来说,您可以编写如下的代码: ```javascript var chart = echarts.init(document.getElementById('chart')); chart.setOption({ xAxis: { type: 'category', data: times }, yAxis: { type: 'value' }, series: series }); ``` 上述代码将创建一个名为 `chart` 的 Chart 对象,并将 x 设置为时间,y 设置为数值,最后将 Series 数据项添加到图表中。 希望这些指导对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值