加入收藏 | 设为首页 | 会员中心 | 我要投稿 葫芦岛站长网 (https://www.0429zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

JavaScript常用工具方法封装

发布时间:2019-02-15 02:49:27 所属栏目:优化 来源:佚名
导读:JavaScript 1. type 类型判断 isString(o){//是否字符串 returnObject.prototype.toString.call(o).slice(8,-1)==='String' } isNumber(o){//是否数字 returnObject.prototype.toString.call(o).slice(8,-1)==='Number' } isBoolean(o){//是否boolean retu

2. Date

  1. /** 
  2.  * 格式化时间 
  3.  *  
  4.  * @param  {time} 时间 
  5.  * @param  {cFormat} 格式 
  6.  * @return {String} 字符串 
  7.  * 
  8.  * @example formatTime('2018-1-29', '{y}/{m}/{d} {h}:{i}:{s}') // -> 2018/01/29 00:00:00 
  9.  */ 
  10. formatTime(time, cFormat) { 
  11.     if (arguments.length === 0) return null 
  12.     if ((time + '').length === 10) { 
  13.         time = +time * 1000 
  14.     } 
  15.  
  16.     var format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}', date 
  17.     if (typeof time === 'object') { 
  18.         date = time 
  19.     } else { 
  20.         date = new Date(time) 
  21.     } 
  22.  
  23.     var formatObj = { 
  24.         y: date.getFullYear(), 
  25.         m: date.getMonth() + 1, 
  26.         d: date.getDate(), 
  27.         h: date.getHours(), 
  28.         i: date.getMinutes(), 
  29.         s: date.getSeconds(), 
  30.         a: date.getDay() 
  31.     } 
  32.     var time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { 
  33.         var value = formatObj[key] 
  34.         if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1] 
  35.         if (result.length > 0 && value < 10) { 
  36.             value = '0' + value 
  37.         } 
  38.         return value || 0 
  39.     }) 
  40.     return time_str 
  41.  
  42. /** 
  43.  * 返回指定长度的月份集合 
  44.  *  
  45.  * @param  {time} 时间 
  46.  * @param  {len} 长度 
  47.  * @param  {direction} 方向:  1: 前几个月;  2: 后几个月;  3:前后几个月  默认 3 
  48.  * @return {Array} 数组 
  49.  *  
  50.  * @example   getMonths('2018-1-29', 6, 1)  // ->  ["2018-1", "2017-12", "2017-11", "2017-10", "2017-9", "2017-8", "2017-7"] 
  51.  */ 
  52. getMonths(time, len, direction) { 
  53.     var mm = new Date(time).getMonth(), 
  54.         yy = new Date(time).getFullYear(), 
  55.         direction = isNaN(direction) ? 3 : direction, 
  56.         index = mm; 
  57.     var cutMonth = function(index) { 
  58.         if ( index <= len && index >= -len) { 
  59.             return direction === 1 ? formatPre(index).concat(cutMonth(++index)): 
  60.                 direction === 2 ? formatNext(index).concat(cutMonth(++index)):formatCurr(index).concat(cutMonth(++index)) 
  61.         } 
  62.         return [] 
  63.     } 
  64.     var formatNext = function(i) { 
  65.         var y = Math.floor(i/12), 
  66.             m = i%12 
  67.         return [yy+y + '-' + (m+1)] 
  68.     } 
  69.     var formatPre = function(i) { 
  70.         var y = Math.ceil(i/12), 
  71.             m = i%12 
  72.         m = m===0 ? 12 : m 
  73.         return [yy-y + '-' + (13 - m)] 
  74.     } 
  75.     var formatCurr = function(i) { 
  76.         var y = Math.floor(i/12), 
  77.             yNext = Math.ceil(i/12), 
  78.             m = i%12, 
  79.             mNext = m===0 ? 12 : m 
  80.         return [yy-yNext + '-' + (13 - mNext),yy+y + '-' + (m+1)] 
  81.     } 
  82.     // 数组去重 
  83.     var unique = function(arr) { 
  84.         if ( Array.hasOwnProperty('from') ) { 
  85.             return Array.from(new Set(arr)); 
  86.         }else{ 
  87.             var n = {},r=[];  
  88.             for(var i = 0; i < arr.length; i++){ 
  89.                 if (!n[arr[i]]){ 
  90.                     n[arr[i]] = true;  
  91.                     r.push(arr[i]); 
  92.                 } 
  93.             } 
  94.             return r; 
  95.         } 
  96.     } 
  97.     return direction !== 3 ? cutMonth(index) : unique(cutMonth(index).sort(function(t1, t2){ 
  98.         return new Date(t1).getTime() - new Date(t2).getTime() 
  99.     })) 
  100.  
  101. /** 
  102.  * 返回指定长度的天数集合 
  103.  *  
  104.  * @param  {time} 时间 
  105.  * @param  {len} 长度 
  106.  * @param  {direction} 方向: 1: 前几天;  2: 后几天;  3:前后几天  默认 3 
  107.  * @return {Array} 数组 
  108.  * 
  109.  * @example date.getDays('2018-1-29', 6) // -> ["2018-1-26", "2018-1-27", "2018-1-28", "2018-1-29", "2018-1-30", "2018-1-31", "2018-2-1"] 
  110.  */ 
  111. getDays(time, len, diretion) { 
  112.     var tt = new Date(time) 
  113.     var getDay = function(day) { 
  114.         var t = new Date(time) 
  115.         t.setDate(t.getDate() + day) 
  116.         var m = t.getMonth()+1 
  117.         return t.getFullYear()+'-'+m+'-'+t.getDate() 
  118.     } 
  119.     var arr = [] 
  120.     if (diretion === 1) { 
  121.         for (var i = 1; i <= len; i++) { 
  122.             arr.unshift(getDay(-i)) 
  123.         } 
  124.     }else if(diretion === 2) { 
  125.         for (var i = 1; i <= len; i++) { 
  126.             arr.push(getDay(i)) 
  127.         } 
  128.     }else { 
  129.         for (var i = 1; i <= len; i++) { 
  130.             arr.unshift(getDay(-i)) 
  131.         } 
  132.         arr.push(tt.getFullYear()+'-'+(tt.getMonth()+1)+'-'+tt.getDate()) 
  133.         for (var i = 1; i <= len; i++) { 
  134.             arr.push(getDay(i)) 
  135.         } 
  136.     } 
  137.     return diretion === 1 ? arr.concat([tt.getFullYear()+'-'+(tt.getMonth()+1)+'-'+tt.getDate()]) :  
  138.         diretion === 2 ? [tt.getFullYear()+'-'+(tt.getMonth()+1)+'-'+tt.getDate()].concat(arr) : arr 
  139.  
  140. /** 
  141.  * @param  {s} 秒数 
  142.  * @return {String} 字符串  
  143.  * 
  144.  * @example formatHMS(3610) // -> 1h0m10s 
  145.  */ 
  146. formatHMS (s) { 
  147.     var str = '' 
  148.     if (s > 3600) { 
  149.         str = Math.floor(s/3600)+'h'+Math.floor(s%3600/60)+'m'+s%60+'s' 
  150.     }else if(s > 60) { 
  151.         str = Math.floor(s/60)+'m'+s%60+'s' 
  152.     }else{ 
  153.         str = s%60+'s' 
  154.     } 
  155.     return str 
  156.  
  157. /*获取某月有多少天*/ 
  158. getMonthOfDay (time) { 
  159.     var date = new Date(time) 
  160.     var year = date.getFullYear() 
  161.     var mouth = date.getMonth() + 1 
  162.     var days 
  163.  
  164.     //当月份为二月时,根据闰年还是非闰年判断天数 
  165.     if (mouth == 2) { 
  166.         days = (year%4==0 && year%100==0 && year%400==0) || (year%4==0 && year%100!=0) ? 28 : 29 
  167.     } else if (mouth == 1 || mouth == 3 || mouth == 5 || mouth == 7 || mouth == 8 || mouth == 10 || mouth == 12) { 
  168.         //月份为:1,3,5,7,8,10,12 时,为大月.则天数为31; 
  169.         days = 31 
  170.     } else { 
  171.         //其他月份,天数为:30. 
  172.         days = 30 
  173.     } 
  174.     return days 
  175.  
  176. /*获取某年有多少天*/ 
  177. getYearOfDay (time) { 
  178.     var firstDayYear = this.getFirstDayOfYear(time); 
  179.     var lastDayYear = this.getLastDayOfYear(time); 
  180.     var numSecond = (new Date(lastDayYear).getTime() - new Date(firstDayYear).getTime())/1000; 
  181.     return Math.ceil(numSecond/(24*3600)); 
  182.  
  183. /*获取某年的第一天*/ 
  184. getFirstDayOfYear (time) { 
  185.     var year = new Date(time).getFullYear(); 
  186.     return year + "-01-01 00:00:00"; 
  187.  
  188. /*获取某年最后一天*/ 
  189. getLastDayOfYear (time) { 
  190.     var year = new Date(time).getFullYear(); 
  191.     var dateString = year + "-12-01 00:00:00"; 
  192.     var endDay = this.getMonthOfDay(dateString); 
  193.     return year + "-12-" + endDay + " 23:59:59"; 
  194.  
  195. /*获取某个日期是当年中的第几天*/ 
  196. getDayOfYear (time) { 
  197.     var firstDayYear = this.getFirstDayOfYear(time); 
  198.     var numSecond = (new Date(time).getTime() - new Date(firstDayYear).getTime())/1000; 
  199.     return Math.ceil(numSecond/(24*3600)); 
  200.  
  201. /*获取某个日期在这一年的第几周*/ 
  202. getDayOfYearWeek (time) { 
  203.     var numdays = this.getDayOfYear(time); 
  204.     return Math.ceil(numdays / 7); 
  205. }  

(编辑:葫芦岛站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!