将时间通过月份拆分为多个月初至月末。

在项目中遇上了上亿级的数据量查询,根据后端的查询方法而写的,

其中,要实现的是,当用户需要搜索如:1月11日至3月27日时,我们把它拆分3次为,1月11日至1月31日,2月1日至2月28日(29日),3月1日至3月27日三个参数。代码如下

//拆分时间
function blockDate(data) {
var start = new Array(),
end = new Array();
var d1 = data.startTime;
var d2 = data.endTime;
var s1 = d1.split("-");
var s2 = d2.split("-");
var mCount = 0;
var TimeE;

if (parseInt(s1[0]) < parseInt(s2[0])) {
mCount =
(parseInt(s2[0]) - parseInt(s1[0])) * 12 +
parseInt(s2[1]) -
parseInt(s1[1]) +
1;
} else {
mCount = parseInt(s2[1]) - parseInt(s1[1]) + 1;
}
if (mCount > 0) {
var startM = parseInt(s1[1]);
var startY = parseInt(s1[0]);
var startD = parseInt(s1[2]);
for (var i = 0; i < mCount; i++) {
if (i == 0) {
if (startM < 12) {
start[i] =
startY +
"-" +
(startM > 9 ? startM : "0" + startM) +
"-" +
(startD > 9 ? startD : "0" + startD);
startM += 1;
} else {
start[i] =
startY +
"-" +
(startM > 9 ? startM : "0" + startM) +
"-" +
(startD > 9 ? startD : "0" + startD);
startM = 1;
startY += 1;
}
} else {
if (startM < 12) {
TimeE = start[i] =
startY + "-" + (startM > 9 ? startM : "0" + startM) + "-" + "01";
var curDate = new Date(TimeE);
var stringDate = new Date(
curDate.getTime() - 24 * 60 * 60 * 1000
).format("yyyy-MM-dd");
end[i] = stringDate;
startM += 1;
} else {
TimeE = start[i] =
startY + "-" + (startM > 9 ? startM : "0" + startM) + "-" + "01";
var curDate = new Date(TimeE);
var stringDate = new Date(
curDate.getTime() - 24 * 60 * 60 * 1000
).format("yyyy-MM-dd");
end[i] = stringDate;
startM = 1;
startY += 1;
}
}
}
//for循环结束
end.push(d2);
}

var init = {
start,
end
};
return init;
}
 
 
打印出start和end显示:

至此完成。


猜你喜欢

转载自www.cnblogs.com/HoredCX/p/10130059.html
今日推荐