多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > htmlcss > js 從開始和結束時間得到中間所有天

js 從開始和結束時間得到中間所有天

來源:程序員人生   發布時間:2015-04-29 08:33:15 閱讀次數:6647次

   

    今天在論壇中看到1個帖子,給定輸入的字符型日期和結束的字符型日期,計算中間間隔的每天的日期。正好項目不忙,就動手寫了1下,記錄下來吧。

   

    原問題

var start_time = "2015⑵⑴"
var end_time = "2015⑶⑴"

需求得到開始和結束時間之間所有天 return [ '2015⑵⑴',"2015⑵⑵" ... "2015⑵⑵8","2015⑶⑴"]


method 1


<script> // 獲得間隔天數 function getDays(day1, day2) { // 獲得入參字符串情勢日期的Date型日期 var d1 = day1.getDate(); var d2 = day2.getDate(); // 定義1天的毫秒數 var dayMilliSeconds = 1000*60*60*24; // 獲得輸入日期的毫秒數 var d1Ms = d1.getTime(); var d2Ms = d2.getTime(); // 定義返回值 var ret; // 對日期毫秒數進行循環比較,直到d1Ms 大于等于 d2Ms 時退出循環 // 每次循環結束,給d1Ms 增加1天 for (d1Ms; d1Ms <= d2Ms; d1Ms += dayMilliSeconds) { // 如果ret為空,則無需添加","作為分隔符 if (!ret) { // 將給的毫秒數轉換為Date日期 var day = new Date(d1Ms); // 獲得其年月日情勢的字符串 ret = day.getYMD(); } else { // 否則,給ret的每一個字符日期間添加","作為分隔符 var day = new Date(d1Ms); ret = ret + ',' + day.getYMD(); } } alert(ret); // 或可換為return ret; } // 給Date對象添加getYMD方法,獲得字符串情勢的年月日 Date.prototype.getYMD = function(){ var retDate = this.getFullYear() + "-"; // 獲得年份。 retDate += this.getMonth() + 1 + "-"; // 獲得月份。 retDate += this.getDate(); // 獲得日。 return retDate; // 返回日期。 } // 給String對象添加getDate方法,使字符串情勢的日期返回為Date型的日期 String.prototype.getDate = function(){ var strArr = this.split('-'); var date = new Date(strArr[0], strArr[1] - 1, strArr[2]); return date; } getDays('2015⑵⑴', '2015⑶⑴'); </script>


    上面的方法中,利用日期毫秒數比較的方式,同時讓開始的日期進行自增,避免了計算每月有多少天的情況。

    getYMD 和 getDate 是分別在Date 和 String 原型上增加的方法,方便我們的使用。



method 2


打開chrome閱讀器的console控制臺


           可以看到3月32日和4月1日的getTime 是相等的,所以,可以利用這點,讓天數自增,來完成比較。

<script> // 獲得間隔天數 function getDays(day1, day2) { // 獲得入參字符串情勢日期的Date型日期 var st = day1.getDate(); var et = day2.getDate(); // 定義返回的數組 var retArr = []; // 循環,啟動日期不等于結束日期時,進行循環 while (st.getTime() != et.getTime()) { // 將啟動日期的字符串情勢的日期寄存進數組 retArr.push(st.getYMD()); // 獲得開始日期的天 var tempDate = st.getDate(); // 將開始日期st指向構造出的新的日期 // 新的日期較之前的日期多加1天 st = new Date(st.getFullYear(), st.getMonth(), st.getDate() + 1); } // 將結束日期的天放進數組 retArr.push(et.getYMD()); alert(retArr); // 或可換為return ret; } // 給Date對象添加getYMD方法,獲得字符串情勢的年月日 Date.prototype.getYMD = function(){ var retDate = this.getFullYear() + "-"; // 獲得年份。 retDate += this.getMonth() + 1 + "-"; // 獲得月份。 retDate += this.getDate(); // 獲得日。 return retDate; // 返回日期。 } // 給String對象添加getDate方法,使字符串情勢的日期返回為Date型的日期 String.prototype.getDate = function(){ var strArr = this.split('-'); var date = new Date(strArr[0], strArr[1] - 1, strArr[2]); return date; } getDays('2015⑵⑼', '2015⑶⑻'); </script>

    這里由于while循環的條件是 st.getTime() != et.getTime() 所以,while循環內,結束日期的字符型日期不會放進結果數組,所以要在while結束后將結束日期放進結果數組中。


method 3


<script> // 獲得間隔天數 function getDays(day1, day2) { // 獲得入參字符串情勢日期的Date型日期 var st = day1.getDate(); var et = day2.getDate(); var retArr = []; // 獲得開始日期的年,月,日 var yyyy = st.getFullYear(), mm = st.getMonth(), dd = st.getDate(); // 循環 while (st.getTime() != et.getTime()) { retArr.push(st.getYMD()); // 使用dd++進行天數的自增 st = new Date(yyyy, mm, dd++); } // 將結束日期的天放進數組 retArr.push(et.getYMD()); alert(retArr); // 或可換為return ret; } // 給Date對象添加getYMD方法,獲得字符串情勢的年月日 Date.prototype.getYMD = function(){ // 將結果放在數組中,使用數組的join方法返回連接起來的字符串,并給不足兩位的天和月10位上補零 return [this.getFullYear(), fz(this.getMonth() + 1), fz(this.getDate())].join("-"); } // 給String對象添加getDate方法,使字符串情勢的日期返回為Date型的日期 String.prototype.getDate = function(){ var strArr = this.split('-'); return new Date(strArr[0], strArr[1] - 1, strArr[2]); } // 給月和天,不足兩位的前面補0 function fz(num) { if (num < 10) { num = "0" + num; } return num } getDays('2015⑵⑼', '2015⑶⑻'); </script>

方法3 中做了下面兩點改進

  • 將while循環內的new Date() 時的入參定義到了外面,不用每次都使用st.getFullYear(),st.getMonth(),st.getDate() 的去獲得,且new Date() 的天可以直接使用dd++,提高了運算效力
  • getYMD 中,直接使用[this.getFullYear(), fz(this.getMonth() + 1), fz(this.getDate())].join("-") 替換了之前的4行代碼,且給月份和天進行了補位,在不足兩位的時候前面補0,這樣處理過的8位的字符日期可以保存數據庫,再拿出來時也方便處理。



生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美黑人性受xxxx精品 | 精彩视频在线观看 | 久久久久欧美激情 | 欧美啪啪做| 黑人极品videos精品欧美裸 | 激情在线免费视频 | 亚洲欧美日韩国产一区二区精品 | 五月婷网 | 视频一区二区三区在线 | 久久99中文字幕伊人 | 日本free护士videosxxxx动漫 | 老司机午夜精品视频观看 | 午夜视频在线免费观看 | 欧美jjzz| 国产精品66福利在线观看 | 欧美色欧美色 | 欧美日韩国产一区二区三区 | 国产午夜精品免费一二区 | 日本乱论 | 最新国产精品精品视频 | 欧美在线视频二区 | 国产在线不卡一区 | 午夜久久久久久网站 | 在线 | 一区二区三区四区 | 成人卡通精品卡通动漫第一页 | 波多野结衣视频免费 | 欧美国产高清 | 国产精品久久久视频 | 久久精品免费在线观看 | 久久一区二区三区免费播放 | 欧美精品video | 拔擦拔擦8x华人免费久久 | 五月婷婷亚洲综合 | 一级毛片高清大全免费观看 | 中国美女隐私无遮挡免费视频 | 国产一区二区三区高清 | 91精品久久久久久久久久 | 欧美精品videosex性欧美 | 日本亚洲乱码中文字幕影院 | 欧美一级视频在线观看欧美 | 欧美视频一区在线 |