function formatTime(time) {
  if (typeof time !== 'number' || time < 0) {
    return time
  }

  var hour = parseInt(time / 3600)
  time = time % 3600
  var minute = parseInt(time / 60)
  time = time % 60
  var second = time

  return ([hour, minute, second]).map(function(n) {
    n = n.toString()
    return n[1] ? n : '0' + n
  }).join(':')
}



function formatLocation(longitude, latitude) {
  if (typeof longitude === 'string' && typeof latitude === 'string') {
    longitude = parseFloat(longitude)
    latitude = parseFloat(latitude)
  }

  longitude = longitude.toFixed(2)
  latitude = latitude.toFixed(2)

  return {
    longitude: longitude.toString().split('.'),
    latitude: latitude.toString().split('.')
  }
}

//获取两日期之间日期列表函数
function getdiffdate(stime, etime) {
  //初始化日期列表，数组
  var diffdate = new Array();
  var i = 0;
  //开始日期小于等于结束日期,并循环
  while (stime <= etime) {
    diffdate[i] = stime;

    //获取开始日期时间戳
    var stime_ts = new Date(stime).getTime();

    //增加一天时间戳后的日期
    var next_date = stime_ts + (24 * 60 * 60 * 1000);

    //拼接年月日，这里的月份会返回（0-11），所以要+1
    var next_dates_y = new Date(next_date).getFullYear() + '-';
    var next_dates_m = (new Date(next_date).getMonth() + 1 < 10) ? '0' + (new Date(next_date).getMonth() + 1) +
      '-' : (new Date(next_date).getMonth() + 1) + '-';
    var next_dates_d = (new Date(next_date).getDate() < 10) ? '0' + new Date(next_date).getDate() : new Date(
      next_date).getDate();

    stime = next_dates_y + next_dates_m + next_dates_d;

    //增加数组key
    i++;
  }
  return diffdate;
}
/**
 * 计算两个日期之间的天数
 * @param dateString1  开始日期 yyyy-MM-dd
 * @param dateString2  结束日期 yyyy-MM-dd
 * @returns {number} 如果日期相同 返回一天 开始日期大于结束日期，返回0
 */
const getDaysBetween = (dateString1, dateString2) => {
  let startDate = Date.parse(dateString1);
  let endDate = Date.parse(dateString2);
  if (startDate > endDate) {
    return 0;
  }
  if (startDate == endDate) {
    return 1;
  }
  let days = (endDate - startDate) / (1 * 24 * 60 * 60 * 1000);
  return days.toFixed(0);
}
var dateUtils = {
  UNITS: {
    '年': 31557600000,
    '月': 2629800000,
    '天': 86400000,
    '小时': 3600000,
    '分钟': 60000,
    '秒': 1000
  },
  humanize: function(milliseconds) {
    var humanize = '';
    for (var key in this.UNITS) {
      if (milliseconds >= this.UNITS[key]) {
        humanize = Math.floor(milliseconds / this.UNITS[key]) + key + '前';
        break;
      }
    }
    return humanize || '刚刚';
  },
  format: function(dateStr) {
    var date = this.parse(dateStr)
    var diff = Date.now() - date.getTime();
    if (diff < this.UNITS['天']) {
      return this.humanize(diff);
    }
    var _format = function(number) {
      return (number < 10 ? ('0' + number) : number);
    };
    return date.getFullYear() + '/' + _format(date.getMonth() + 1) + '/' + _format(date.getDay()) + '-' +
      _format(date.getHours()) + ':' + _format(date.getMinutes());
  },
  parse: function(str) { //将"yyyy-mm-dd HH:MM:ss"格式的字符串，转化为一个Date对象
    var a = str.split(/[^0-9]/);
    return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]);
  }
};
// 回显数据字典
const selectDictLabel = (datas, value) => {
  var actions = [];
  Object.keys(datas).some((key) => {
    if (datas[key].value == ('' + value)) {
      actions.push(datas[key].label);
      return true;
    }
  })
  return actions.join('');
}
/**
 * 乘法函数，用来得到精确的乘法结果
 * @param {Object} arg1
 * @param {Object} arg2
 */
const accMul = (arg1, arg2) => {
  var m = 0;
  m += deal(arg1);
  m += deal(arg2);
  var r1 = Number(arg1.toString().replace('.', ''));
  var r2 = Number(arg2.toString().replace('.', ''));
  return (r1 * r2) / Math.pow(10, m);
}
/**
 * 加法函数，用来得到精确的加法结果
 * @param {Object} arg1
 * @param {Object} arg2
 */
const accAdd = (arg1, arg2) => {
  var r1 = deal(arg1);
  var r2 = deal(arg2);
  var m = Math.pow(10, Math.max(r1, r2));
  return (arg1 * m + arg2 * m) / m;
}
/**
 * 除法函数，用来得到精确的除法结果
 * @param {Object} arg1
 * @param {Object} arg2
 */
const accDiv = (arg1, arg2) => {
  var t1 = deal(arg1);
  var t2 = deal(arg2);
  var r1 = Number(arg1.toString().replace(".", ""))
  var r2 = Number(arg2.toString().replace(".", ""))
  return (r1 / r2) * Math.pow(10, t2 - t1);
}
/**
 * 求小数点后的数据长度
 */
const deal = (arg) => {
  var t = 0;
  try {
    t = arg.toString().split('.')[1].length;
  } catch (e) {}
  return t;
}
/**
 * 时间加上多少分
 */
const dateTo = (date, minute) => {
  let time = new Date(date);
  time.setMinutes(time.getMinutes() + minute, time.getSeconds(), 0);
  return format(time);

}
/**
 * 判断 有效日期不能小于今天
 */
const dateCompare = (beginDate, endDate) => {
  var beginArrayDate = beginDate.split('-');
  var endArrayDate = endDate.split('-')
  if (parseInt(endArrayDate[0], 10) > parseInt(beginArrayDate[0], 10)) return true;
  if (parseInt(endArrayDate[0], 10) == parseInt(beginArrayDate[0], 10)) {
    if (parseInt(endArrayDate[1], 10) > parseInt(beginArrayDate[1], 10)) return true;
    else {
      if (parseInt(endArrayDate[1], 10) == parseInt(beginArrayDate[1], 10)) {
        if (parseInt(endArrayDate[2], 10) >= parseInt(beginArrayDate[2], 10)) return true;
      }
    }
  }
  return false;
}
/**
 * 获取日期
 * day 获取日期
 * time 获取时间
 */
const getDate = (obj = 'day') => {
  const date = new Date();
  let year = date.getFullYear();
  let month = date.getMonth() + 1;
  let day = date.getDate();
  let Hours = date.getHours();
  let Minutes = date.getMinutes();
  month = month > 9 ? month : '0' + month;
  day = day > 9 ? day : '0' + day;
  Hours = Hours > 9 ? Hours : '0' + Hours;
  Minutes = Minutes > 9 ? Minutes : '0' + Minutes;
  if (obj == 'day') {
    return `${year}-${month}-${day}`;
  }
  if (obj == 'time') {
    return `${year}-${month}-${day}` + ' ' + Hours + ':' + Minutes;
  }
  if (obj == 'year') {
    return `${year}`;
  }
  if (obj == 'month') {
    return `${month}`;
  }
  if (obj == 'ym') {
    return `${year}-${month}`;
  }
}
/**
 * 格式化时间
 */
const format = (obj) => {
  const date = new Date(obj);
  let year = date.getFullYear();
  let month = date.getMonth() + 1;
  let day = date.getDate();
  let Hours = date.getHours();
  let Minutes = date.getMinutes();
  month = month > 9 ? month : '0' + month;
  day = day > 9 ? day : '0' + day;
  Hours = Hours > 9 ? Hours : '0' + Hours;
  Minutes = Minutes > 9 ? Minutes : '0' + Minutes;
  return `${year}-${month}-${day}` + ' ' + Hours + ':' + Minutes;
}

function convertToChinaNum(num) {
  var arr1 = new Array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九');
  var arr2 = new Array('', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千', '万', '十', '百', '千',
    '亿'); //可继续追加更高位转换值
  if (!num || isNaN(num)) {
    return "零";
  }
  var english = num.toString().split("")
  var result = "";
  for (var i = 0; i < english.length; i++) {
    var des_i = english.length - 1 - i; //倒序排列设值
    result = arr2[i] + result;
    var arr1_index = english[des_i];
    result = arr1[arr1_index] + result;
  }
  //将【零千、零百】换成【零】 【十零】换成【十】
  result = result.replace(/零(千|百|十)/g, '零').replace(/十零/g, '十');
  //合并中间多个零为一个零
  result = result.replace(/零+/g, '零');
  //将【零亿】换成【亿】【零万】换成【万】
  result = result.replace(/零亿/g, '亿').replace(/零万/g, '万');
  //将【亿万】换成【亿】
  result = result.replace(/亿万/g, '亿');
  //移除末尾的零
  result = result.replace(/零+$/, '')
  //将【零一十】换成【零十】
  //result = result.replace(/零一十/g, '零十');//貌似正规读法是零一十
  //将【一十】换成【十】
  result = result.replace(/^一十/g, '十');
  return result;
}
//检查重复
const checkSame = (form, value, callback) => {
  let num = 0;
  form.op.forEach(item => {
    if (item.name == value) {
      num++;
    }
  });
  if (num > 1) {
    return callback(new Error('选项内容不能重复'));
  } else {
    callback();
  }
}
//检查重复
const duplicate = (list) => {
  let tags = new Set();
  let obj = [];
  list.forEach(item => {
    tags.add(item.name);
  });
  Array.from(tags).forEach(item => {
    obj.push({
      name: item,
      check: false
    });
  });
  return obj;
}

module.exports = {
  formatTime: formatTime,
  formatLocation: formatLocation,
  dateUtils: dateUtils,
  selectDictLabel: selectDictLabel,
  accMul: accMul,
  accAdd: accAdd,
  accDiv: accDiv,
  dateCompare: dateCompare,
  getDate: getDate,
  dateTo: dateTo,
  cn: convertToChinaNum,
  getDaysBetween: getDaysBetween,
  getdiffdate: getdiffdate,
  checkSame: checkSame,
  duplicate:duplicate
}
