javascript经常使用(实用)工具类

// 时间格式化const formatTime = date => {
  const year = new Date(date).getFullYear()
  const month = new Date(date).getMonth() + 1
  const day = new Date(date).getDate()
  const hour = new Date(date).getHours()
  const minute = new Date(date).getMinutes()
  const second = new Date(date).getSeconds()

  return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}
/**
 * 用于post 参数格式转换
 */
function json2Form(json) {
  var str = [];
  for (var p in json) {
    str.push(encodeURIComponent(p) + "=" + encodeURIComponent(json[p]));
  }
  return str.join("&");
}

// 对象数组去重
Array.prototype.filter = function () {
  let emptyObj = {} //建立空对象,用于存放属性
  let result = [] //结果数组,用于存放结果
  for (let i = 0; i < this.length; i++) {//this指向调用该方法的数组
    this[i] = JSON.stringify(this[i])//将对象解析为字符串便于比较
    if (!emptyObj[this[i]]) {//以emptyObj是否存在该字符串为名的属性进行判断
      emptyObj[this[i]] = 1 //将emptyObj的this[i]属性设为1,便于判断
      result.push(JSON.parse(this[i]))//将字符串从新解析为对象
    }
  }
  return result //返回结果
}

// 价格过滤
function currency(value, currency, decimals) {
  const digitsRE = /(\d{3})(?=\d)/g
  value = parseFloat(value)
  if (!isFinite(value) || (!value && value !== 0)) return ''
  currency = currency != null ? currency : '$'
  decimals = decimals != null ? decimals : 2
  var stringified = Math.abs(value).toFixed(decimals)
  var _int = decimals
    ? stringified.slice(0, -1 - decimals)
    : stringified
  var i = _int.length % 3
  var head = i > 0
    ? (_int.slice(0, i) + (_int.length > 3 ? ',' : ''))
    : ''
  var _float = decimals
    ? stringified.slice(-1 - decimals)
    : ''
  var sign = value < 0 ? '-' : ''
  return sign + currency + head +
    _int.slice(i).replace(digitsRE, '$1,') +
    _float
}

/** 
 * 时间戳转化为年 月 日 时 分 秒 
 * number: 传入时间戳 
 * format:返回格式,支持自定义,但参数必须与formateArr里保持一致 
*/
function formatDatebox(value, parent) {
  if (value == null || value == '') {
    return '';
  }
  var dt = parseToDate(value);// 关键代码,将那个长字符串的日期值转换成正常的JS日期格式
  return dt.format(parent); // 这里用到一个javascript的Date类型的拓展方法,这个是本身添加的拓展方法,在后面的步骤3定义
}
function parseToDate(value) {
  if (value == null || value == '') {
    return undefined;
  }

  var dt;
  if (value instanceof Date) {
    dt = value;
  } else {
    if (!isNaN(value)) {
      dt = new Date(value);
    } else if (value.indexOf('/Date') > -1) {
      value = value.replace(/\/Date(−?\d+)\//, '$1');
      dt = new Date();
      dt.setTime(value);
    } else if (value.indexOf('/') > -1) {
      dt = new Date(Date.parse(value.replace(/-/g, '/')));
    } else {
      dt = new Date(value);
    }
  }
  return dt;
}
// 为Date类型拓展一个format方法,用于格式化日期
Date.prototype.format = function (format) // author: meizz
{
  var o = {
    "M+": this.getMonth() + 1, // month
    "d+": this.getDate(), // day
    "h+": this.getHours(), // hour
    "m+": this.getMinutes(), // minute
    "s+": this.getSeconds(), // second
    "q+": Math.floor((this.getMonth() + 3) / 3),
    "S": this.getMilliseconds()
    // millisecond
  };
  if (/(y+)/.test(format))
    format = format.replace(RegExp.$1, (this.getFullYear() + "")
      .substr(4 - RegExp.$1.length));
  for (var k in o)
    if (new RegExp("(" + k + ")").test(format))
      format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]
        : ("00" + o[k]).substr(("" + o[k]).length));
  return format;
};

//两日期相减得到天数
function num_data(startDate,endDate) {
  var end_date = new Date(endDate.replace(/-/g, "/"));
  var start_date = new Date(startDate.replace(/-/g, "/"));
  var days = end_date.getTime() - start_date.getTime();
  var day = parseInt(days / (1000 * 60 * 60 * 24));
  return day;
}


module.exports = {
  formatTime,
  json2Form,
  formatDatebox,
  num_data
}
相关文章
相关标签/搜索