1. 程式人生 > >將時間通過月份拆分為多個月初至月末。

將時間通過月份拆分為多個月初至月末。

在專案中遇上了上億級的資料量查詢,根據後端的查詢方法而寫的,

其中,要實現的是,當用戶需要搜尋如: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顯示:

至此完成。