日常必用js工具总结

260 阅读1分钟

这是我参与更文挑战的第6天,活动详情查看:更文挑战

// 获取今天的日期
export const getNowDate = () => {
    let myDate = new Date()
    let yyyy = myDate.getFullYear() //取四位年份
    let MM = myDate.getMonth() + 1 //取月份
    let dd = myDate.getDate() //取日
    if (MM < 10) MM = '0' + MM
    if (dd < 10) dd = '0' + dd
    return yyyy + '-' + MM + '-' + dd
}
/**
 * 时间格式化
 * 例如:formatDate(new Date(),'yyyy-MM-dd')
     yyyy-MM-dd hh:mm:ss 
 * */
export const formatDate = (date, fmt) => {
  let o = {
    'M+': date.getMonth() + 1, // 月份
    'd+': date.getDate(), // 日
    'h+': date.getHours(), // 小时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    'S': date.getMilliseconds() // 毫秒
  }
  if (/(y+)/.test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  for (var k in o) {
      if (new RegExp('(' + k + ')').test(fmt)) {
          fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
      }
  }
  return fmt
}
/**
 * 格式化时间与当前时间差
 * @param {String} item 一个由逗号连接的包含一个或多个CSS选择器的字符串
 * @return {NodeList} 一个non-live的 NodeList 类型的对象
 * @public
 */
export const diffTime = item => {
    var nowTime = new Date().getTime();
    var minuteTime = 60 * 1000;
    var hourTime = 60 * minuteTime;
    var dayTime = 24 * hourTime;
    var monthTime = dayTime * 30;
    var yearTime = monthTime * 12;

    var publishTime = new Date(item).getTime();
    var historyTime = parseInt(nowTime) - parseInt(publishTime);
    var descTime;
    if (historyTime >= yearTime) {
        // 按年算
        descTime = parseInt(historyTime / yearTime) + '年前';
    } else if (historyTime < yearTime && historyTime >= monthTime) {
        // 按月算
        descTime = parseInt(historyTime / monthTime) + '月前';
    } else if (historyTime < monthTime && historyTime >= dayTime) {
        // 按天算
        descTime = parseInt(historyTime / dayTime) + '天前';
    } else if (historyTime < dayTime && historyTime >= hourTime) {
        // 按小时算
        descTime = parseInt(historyTime / hourTime) + '小时前';
    } else if (historyTime < hourTime && historyTime >= minuteTime) {
        // 按分钟算
        descTime = parseInt(historyTime / minuteTime) + '分钟前';
    } else {
        descTime = '刚刚';
    }
    return descTime;
};
/********
 * 判断两个时间段是否有交集
 * @param dateRange1/dateRange2 [开始时间(2018-04-12), 结束时间[2018-05-16]]
 * 返回:2018-04-12 12:55:25
 */
 export const dateRangeIntersection = (dateRange1, dateRange2)=> {
  let beginTime1 = new Date(dateRange1[0]).getTime()
  let endTime1 = new Date(dateRange1[1]).getTime()
  let beginTime2 = new Date(dateRange2[0]).getTime()
  let endTime2 = new Date(dateRange2[1]).getTime()
  if ((beginTime1 >= endTime2) || (endTime1 <= beginTime2)) {
    return false
  }
  return true
}
/**
 * 获取url参数
 * @param {Object} name 想要的参数名
 * 如果没有取到,返回的是null
 */
export const getQueryString = (name)=> {
    var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return unescape(r[2]);
    return null;
}
/*******************
 * 多层深拷贝-object和array都可以
 */

export const copyDeep = (origin) =>{
  if (origin instanceof Object) {
    if (isArray(origin)) {
      var targetArr = []
      for (var i = 0; i < origin.length; i++) {
        targetArr.push(copyDeep(origin[i]))
      }
      return targetArr
    } else {
      var targetObj = {}
      for (var item in origin) {
        targetObj[item] = copyDeep(origin[item])
      }
      return targetObj
    }
  } else {
    return origin
  }
  function isArray (value) {
    return !!value && value instanceof Array
  }
}
/**
 * 返回小数点2位
 */
export const mycurrency1 = (value) => {
    value = value || '0.00';
    return parseFloat(value.toString()).toFixed(2);
};