js时间排序

1.要求:

提供两个字符串每个字符串包含多个时间,格式统一为年月日时分秒,然后根据时间先后顺序排列,并且添加相应的“进店”和“出店”字段

//下面这个字符串的时间是进店

var dataList1 = "2019.05.09 17:58:31 , 2019.02.09 12:18:12 , 2019.03.09 17:40:01"

//下面这个是出店的时间

var dataList2 = "2019.05.09 18:00:39 , 2019.02.09 17:58:12 , 2019.03.09 18:00:31"

最终效果

0: {name: "进店", time: "2019.02.09 12:18:12"}
1: {name: "出店", time: "2019.02.09 17:58:12"}
2: {name: "进店", time: "2019.03.09 17:40:01"}
3: {name: "出店", time: "2019.03.09 18:00:31"}
4: {name: "进店", time: "2019.05.09 17:58:31"}
5: {name: "出店", time: "2019.05.09 18:00:39"}

实现思路:

  1. 两个字符串按照时间先后顺序排序所以首先的拼接到一个字符串中,进行总体上的排序
  2. 拼接后的字符串包含多个时间,所以用到字符串的split()进行分割成数据,分割后去掉逗号之间的空格
  3. 分割成数组的时间是无法进行比较,所以要把对应的时间格式转换为时间戳进行比较
  4. '年.月.日 时:分:秒'  这种格式的是无法转换为时间戳,所以要转换为:'年/月/日  时:分:秒' 
  5. 比较完毕后,判断时间是否为相应的到店或者出店时间,然后添加对应的name

实现步骤:

 1.合并字符串

var dataList1 = "2019.05.09 17:58:31 , 2019.02.09 12:18:12 , 2019.03.09 17:40:01"

var dataList2 = "2019.05.09 18:00:39 , 2019.02.09 17:58:12 , 2019.03.09 18:00:31"

var dataList = dataList1+','+dataList2

2.把所有的‘年.月.日’替换为‘年/月/日’,并进行分割数组

var dataListTime = dataList.replace(/\./g,'/')
var timeList = dataListTime.split(',')

3.答应timeList会发现数组中存在空格所以要去除空格

console.log(timeList)
["2019/05/09 17:58:31 ", " 2019/02/09 12:18:12 ", " 2019/03/09 17:40:01", "2019/05/09 18:00:39 ", " 2019/02/09 17:58:12 ", " 2019/03/09 18:00:31"]


//去除空格,去掉年和秒前后的空格,但是要保留天后的空格
var array = [];
for(var i = 0 ; i < timeList.length ; i++){
	array.push(timeList[i].replace(/(^\s*)|(\s*$)/g, ""))
}

4.把array数组中的数据转换为时间戳

for(var i = 0 ; i < array.length ; i++){
	array[i] = (new Date(array[i])).getTime()
}

5.对时间戳进行排序

array.sort(function (a, b) {
    return a > b ? 1 : -1 ;
});

6.排序后的时间戳转换为‘年.月.日 时:分:秒’该格式

//封装一个方法,时间戳转换为日期
function format(time , format){
	var t = new Date(time);
	var tf = function(i){
		return ( i < 10 ? '0' : '')+i;
	};
	return format.replace(/yyyy|mm|dd|hh|nn|ss/g , function(a){
		
		switch(a){
           		 case 'yyyy':
				return tf(t.getFullYear());
			break;
			case 'mm':
				return tf(t.getMonth()+1);
			break;
			case 'dd':
				return tf(t.getDate());
			break;
			case 'hh':
				return tf(t.getHours());
			break;
			case 'nn':
				return tf(t.getMinutes());
			break;
			case 'ss':
				return tf(t.getSeconds());
			break;
		}
		
	})
}


//时间戳转换为日期
for(var i = 0 ; i < array.length ; i++){
	array[i] =format(array[i], 'yyyy.mm.dd hh:nn:ss')
}

7.创建一个空数组,用来放组装后的对象,并判断时间是否在出店或者入店

var dfList = [];//最终的数据
for(var i = 0 ; i < array.length ; i++){

    var obj = {}; //此申明不可置于循环外

	if(dataList1.indexOf(array[i])>= 0){
		obj.name="进店";
		obj.time = array[i];
	}
	
	if(dataList2.indexOf(array[i])>= 0){
		obj.name="出店";
		obj.time = array[i];
	}	

    dfList.push(obj)

}

以上信息即为全部步骤,控制台输出dfList就是最终效果

0: {name: "进店", time: "2019.02.09 12:18:12"}
1: {name: "出店", time: "2019.02.09 17:58:12"}
2: {name: "进店", time: "2019.03.09 17:40:01"}
3: {name: "出店", time: "2019.03.09 18:00:31"}
4: {name: "进店", time: "2019.05.09 17:58:31"}
5: {name: "出店", time: "2019.05.09 18:00:39"}

 

 

 

 

 

 

 

 

 

评论 1 您还未登录,请先 登录 后发表或查看评论
相关推荐

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术工厂 设计师:CSDN官方博客 返回首页

打赏作者

烎烎~

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值