Util工具类(如时间转换、计算时间星期、补足字符、流量kb转换、大屏类)

/**

 * Util工具类

 */

const Util = {};

/**

 * 控制台日志打印

 */

Util.debug = function () {

  if (console && console.debug) {

    console.debug.apply(console, arguments);

  }

}

Util.log = function () {

  if (console && console.log) {

    console.log.apply(console, arguments);

  }

}

Util.info = function () {

  if (console && console.info) {

    console.info.apply(console, arguments);

  }

}

Util.warn = function () {

  if (console && console.warn) {

    console.warn.apply(console, arguments);

  }

}

Util.error = function () {

  if (console && console.error) {

    console.error.apply(console, arguments);

  }

}

/**

 * 左边补足字符

 */

Util.leftPad = function (str, len, ch) {

  str = String(str);

  if (!ch && ch !== 0) ch = ' ';

  let i = -1;

  len = len - str.length;

  while (++i < len) str = ch + str;

  return str;

}

Util.isObject = function (obj) {

  return Object.prototype.toString.call(obj) === '[object Object]';

}

Util.isFunction = function (func) {

  return typeof func === 'function';

}

Util.isArray = function (array) {

  return Array.isArray(array);

}

Util.isNumber = function (number) {

  return typeof number === 'number' && isFinite(number);

}

Util.isString = function (string) {

  return string === string + ''

}

Util.isDate = function (date) {

  return Object.prototype.toString.call(date) === '[object Date]';

}

Util.encodeHtml = function (str) {

  if (!str || !str.length) return '';

  str = str.replace(/&/g, '&amp;');

  str = str.replace(/>/g, '&gt;');

  str = str.replace(/</g, '&lt;');

  str = str.replace(/"/g, '&quot;');

  str = str.replace(/'/g, '&#39;');

  return str;

}

Util.decodeHtml = function (str) {

  if (!str || !str.length) return '';

  str = str.replace(/&gt;/g, '>');

  str = str.replace(/&lt;/g, '<');

  str = str.replace(/&quot;/g, '"');

  str = str.replace(/&#39;/g, "'");

  str = str.replace(/&#039;/g, "'");

  str = str.replace(/&amp;/g, '&');

  return str;

}

Util.todayBegin = Util.todayStart = function () {

  let date = new Date();

  date.setHours(0);

  date.setMinutes(0);

  date.setSeconds(0);

  return date;

}

Util.nDaysBegin = Util.nDaysStart = function (days) {

  if (Util.isNumber(days)) {

    let today = Util.todayBegin().getTime();

    return new Date(today - days * 24 * 3600 * 1000);

  } else {

    return Util.todayBegin();

  }

}

Util.todayEnd = function () {

  let date = new Date();

  date.setHours(23);

  date.setMinutes(59);

  date.setSeconds(59);

  return date;

}

Util.nDaysEnd = function (days) {

  if (Util.isNumber(days)) {

    let today = Util.todayEnd().getTime();

    return new Date(today - days * 24 * 3600 * 1000);

  } else {

    return Util.todayEnd();

  }

}

Util.formatMonthDayHour = function (date) {

  if (date instanceof Date) {

    let mon = date.getMonth() + 1;

    let day = date.getDate();

    let hour = date.getHours();

    mon = mon > 9 ? mon : `0${mon}`;

    day = day > 9 ? day : `0${day}`;

    hour = hour > 9 ? hour : `0${hour}`;

    return `${mon}-${day} ${hour}:00`;

  } else if (Util.isNumber(date)) {

    return Util.formatMonthDayHour(new Date(date));

  } else {

    return date || 'N/A';

  }

}

Util.formatDate = function (date) {

  if (date instanceof Date) {

    let year = date.getFullYear();

    let mon = date.getMonth() + 1;

    let day = date.getDate();

    return year + '-' + (mon > 9 ? mon : '0' + mon) + '-' + (day > 9 ? day : '0' + day);

  } else if (Util.isNumber(date)) {

    const len = String(date).length;

    if (len === 10) date = date * 1000;

    if (len === 16) date = Math.floor(date / 1000);

    return Util.formatDate(new Date(date));

  } else {

    return date || 'N/A';

  }

}

Util.formatTime = function (date) {

  if (date instanceof Date) {

    let hour = date.getHours();

    let min = date.getMinutes();

    let sec = date.getSeconds();

    return (hour > 9 ? hour : '0' + hour) + ':' + (min > 9 ? min : '0' + min) + ':' + (sec > 9 ? sec : '0' + sec);

  } else if (Util.isNumber(date)) {

    return Util.formatTime(new Date(date));

  } else {

    return date || 'N/A';

  }

}

Util.formatDatetime = function (date) {

  if (date instanceof Date) {

    let year = date.getFullYear();

    let mon = date.getMonth() + 1;

    let day = date.getDate();

    let hour = date.getHours();

    let min = date.getMinutes();

    let sec = date.getSeconds();

    return year + '-' +

      (mon > 9 ? mon : '0' + mon) + '-' +

      (day > 9 ? day : '0' + day) + ' ' +

      (hour > 9 ? hour : '0' + hour) + ':' +

      (min > 9 ? min : '0' + min) + ':' +

      (sec > 9 ? sec : '0' + sec);

  } else if (Util.isString(date)) {

    const len = String(date).length;

    date = parseInt(date);

    if (date <= 0) return 'N/A';

    if (len === 10) date = date * 1000;

    if (len === 16) date = Math.floor(date / 1000);

    return Util.formatDatetime(new Date(date));

  } else if (Util.isNumber(date)) {

    const len = String(date).length;

    if (len === 10) date = date * 1000;

    if (len === 16) date = Math.floor(date / 1000);

    return Util.formatDatetime(new Date(date));

  } else {

    return date || 'N/A';

  }

}

Util.dateStrToSecond = function (dateStr) {

  if (dateStr instanceof Date) {

    return Math.floor(dateStr.getTime() / 1000);

  } else if (dateStr.length) { // 格式如2016-10-10 10:00:00

    try {

      let date = new Date(dateStr.replace(/-/g, '/'));

      return Math.floor(date.getTime() / 1000);

    } catch (e) {

      return 0;

    }

  } else {

    return 0;

  }

}

Util.calcDuration = function (seconds) {

  const reg = /^[0-9]+$/;

  if (!reg.test(String(seconds))) return '';

  let [s, d, h, m] = [parseInt(seconds), 0, 0, 0];

  let r = [];

  if (s >= 86400) {

    d = Math.floor(s / 86400);

    r.push(d + 'D');

  }

  if (s >= 3600) {

    h = Math.floor((s % 86400) / 3600);

    r.push(h + 'H');

  }

  if (s >= 60) {

    m = Math.floor(((s % 86400) % 3600) / 60);

    r.push(m + 'M');

  }

  if (s > 0) {

    s = Math.floor(s % 60);

    r.push(s + 'S');

  }

  return r.join('');

}

Util.toNumArr = function (start, end, step) {

  if (!Util.isNumber(start) || !Util.isNumber(end) || !Util.isNumber(step)) {

    return [];

  }

  let maxCount = 10000;

  let arr = [];

  while (start <= end && maxCount-- > 0) {

    arr.push(start);

    start += step;

  }

  return arr;

}

Util.getExt = function (path) {

  if (!path) return '';

  var pos = path.lastIndexOf('.');

  if (pos > 0 && pos < path.length) {

    return path.substr(pos + 1);

  }

  return '';

}

Util.subStr = function (str, len) {

  let slen = str && str.length || 0;

  if (len > 0 && slen > len) {

    return str.substr(0, len);

  }

  return str;

}

Util.copyProperties = function (obj) {

  if (!obj) return {};

  return Object.assign(obj, {});

}

Util.getTime = function (obj) {

  if (obj === null || obj === undefined) {

    return 0;

  } else if (obj instanceof Date) {

    return Math.floor(obj.getTime() / 1000);

  } else {

    let val = String(obj);

    if (val.length < 10) {

      return 0;

    } else if (/^[1-9][0-9]{9,}$/g.test(val)) {

      return parseInt(val.substr(0, 10));

    } else {

      val = val.replace(/-/g, '/');

      try {

        let date = new Date(val);

        return date ? Math.floor(date.getTime() / 1000) : 0;

      } catch (e) {

        return 0;

      }

    }

  }

}

Util.array2ParamObj = function (paramKey, array) {

  if (!Array.isArray(array)) return {};

  paramKey = paramKey || 'array';

  let paramObj = {};

  array.forEach((item, index) => {

    Object.keys(item).forEach(key => {

      let k = `${paramKey}[${index}].${key}`;

      let v = item[key];

      paramObj[k] = v;

    });

  });

  return paramObj;

}

Util.percent = function (value, total) {

  value = parseInt(value || 0);

  if (value === 0) return 0;

  total = parseInt(total || 0);

  if (total === 0) return 100;

  let percent = String(Math.round(value / total * 10000) / 100.00);

  if (percent.length > 5) {

    percent = percent.substr(0, 5);

  }

  return parseFloat(percent);

}

Util.isIE = function () {

  return !!window.ActiveXObject || 'ActiveXObject' in window;

}

Util.ieVersion = function () {

  let win = window;

  let doc = window.document;

  let input = doc.createElement('input');

  if (win.ActiveXObject === undefined) return null;

  if (!win.XMLHttpRequest) return 6;

  if (!doc.querySelector) return 7;

  if (!doc.addEventListener) return 8;

  if (!win.atob) return 9;

  // "!doc.body.dataset" is faster but the body is null when the DOM is not

  // ready. Anyway, an input tag needs to be created to check if IE is being emulated.

  if (!input.dataset) return 10;

  return 11;

}

Util.fullscreen = function () {

  try {

    var docElm = document.documentElement;

    if (docElm.requestFullscreen) { // W3C

      docElm.requestFullscreen();

    } else if (docElm.mozRequestFullScreen) { //FireFox

      docElm.mozRequestFullScreen();

    } else if (docElm.webkitRequestFullScreen) { //Chrome等

      docElm.webkitRequestFullScreen();

    } else if (docElm.msRequestFullscreen) { //IE11

      docElm.msRequestFullscreen();

    }

  } catch (e) {

    console && console.error && console.error(e);

  }

}

Util.exitFullscreen = function () {

  try {

    if (document.exitFullscreen) {

      document.exitFullscreen();

    } else if (document.mozCancelFullScreen) {

      document.mozCancelFullScreen();

    } else if (document.webkitCancelFullScreen) {

      document.webkitCancelFullScreen();

    } else if (document.msExitFullscreen) {

      document.msExitFullscreen();

    }

  } catch (e) {

    console && console.error && console.error(e);

  }

}

Util.base64Encode = function (input) {

  let rv = encodeURIComponent(input);

  rv = unescape(rv);

  rv = window.btoa(rv);

  return rv;

}

Util.base64Decode = function (input) {

  let rv = window.atob(input);

  rv = escape(rv);

  rv = decodeURIComponent(rv);

  return rv;

}

Util.isArrayRepeat = function (array) {

  if (!Array.isArray(array)) return false;

  let map = {};

  for (let i = 0; i < array.length; i++) {

    let key = String(array[i]);

    if (map.hasOwnProperty(key)) {

      return true;

    } else {

      map[key] = 1;

    }

  }

  map = null;

  return false;

}

Util.width = function (id) {

  let ele = document.getElementById(id);

  return ele && ele.clientWidth || 0;

}

Util.height = function (id) {

  let ele = document.getElementById(id);

  return ele && ele.clientHeight || 0;

}

Util.arraySum = function (array) {

  if (!Array.isArray(array) || array.length === 0) return 0;

  let total = 0;

  array.forEach(o => {

    total += parseInt(o);

  });

  return total;

}

Util.downloadCsv = function (csvName, csvContent) {

  if (!csvName) return;

  // BOM防止乱码

  var BOM = '\uFEFF';

  csvContent = BOM + csvContent;

  var a = document.createElement('a');

  a.href = 'data:attachment/csv,' + encodeURI(csvContent);

  a.target = '_blank';

  a.download = csvName.toLowerCase().endsWith('.csv') ? csvName : csvName + '.csv';

  document.body.appendChild(a);

  a.click();

  document.body.removeChild(a);

}

Util.parseTime = function (time, cFormat) {

  if (arguments.length === 0) {

    return null

  }

  const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'

  let date

  if (typeof time === 'object') {

    date = time

  } else {

    if (('' + time).length === 10) time = parseInt(time) * 1000

    date = new Date(time)

  }

  const formatObj = {

    y: date.getFullYear(),

    m: date.getMonth() + 1,

    d: date.getDate(),

    h: date.getHours(),

    i: date.getMinutes(),

    s: date.getSeconds(),

    a: date.getDay()

  }

  const timeStr = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {

    let value = formatObj[key]

    if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]

    if (result.length > 0 && value < 10) {

      value = '0' + value

    }

    return value || 0

  })

  return timeStr

}

Util.wrapStr = function (str, lineLen, separator) {

  if (!str || lineLen <= 0) return '';

  separator = separator || '<br>';

  let index = 0;

  const result = [];

  while (index < str.length) {

    const sub = str.substr(index, lineLen);

    if (!sub) {

      break;

    }

    result.push(sub);

    if (sub.length < lineLen) {

      break;

    }

    index += lineLen;

  }

  return result.join(separator);

}

Util.isJsonStr = function (str) {

  if (!str) return false;

  if (typeof str === 'string') {

    try {

      const obj = JSON.parse(str);

      return obj && typeof obj === 'object';

    } catch (e) {

      return false;

    }

  }

}

Util.byteMBtoGB = function (num) {

  if (!num) return 0

  num = parseFloat(num) / 1024

  return Math.round(num * 100.0) / 100

}

export default Util;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容