const Constants = require('../utils/Constants.js')

// 转换时间
const getDate = (year, month, day, hour, minute) => {
  const newyear = year.substr(0, year.length - 1);
  const setmonth = month.substr(0, month.length - 1);
  const newmonth = setmonth < 10 ? '0' + setmonth : setmonth;
  const setday = day.substr(0, day.length - 1);
  const newday = setday < 10 ? '0' + setday : setday;
  // const sethour = hour.substr(0, hour.length - 1);
  const newhour = hour < 10 ? '0' + hour : hour;
  // const setminute = minute.substr(0, minute.length - 1);
  const newminute = minute < 10 ? '0' + minute : minute;
  return newyear + '-' + newmonth + '-' + newday + ' ' + newhour + ":" + newminute;
}
// 将时间戳转换为时间
const getobjDate = (date) => {
  let now;
  if (date) {
    now = new Date(date)
  } else {
    now = new Date()
  }
  let y = now.getFullYear(),
    m = now.getMonth() + 1,
    d = now.getDate(),
    h = now.getHours(), //获取当前小时数(0-23)
    f = now.getMinutes(),

    n = (Math.ceil((now.getMinutes()) / 10)) * 10; //获取当前分钟数(0-59)  取整数
  return y + "-" + (m < 10 ? "0" + m : m) + "-" + (d < 10 ? "0" + d : d) + " " + (h < 10 ? "0" + h : h) + ":" + (f < 10 ? "0" + f : f);

}

// 将时间戳转换为日期
const toDateStr = (date) => {
  let now;
  if (date) {
    now = new Date(date)
  } else {
    now = new Date()
  }
  let y = now.getFullYear(),
    m = now.getMonth() + 1,
    d = now.getDate()
  return y + "-" + (m < 10 ? "0" + m : m) + "-" + (d < 10 ? "0" + d : d);
}

const getobjDateApple = (date) => {
  let now;
  if (date) {
    now = new Date(date)
  } else {
    now = new Date()
  }
  let y = now.getFullYear(),
    m = now.getMonth() + 1,
    d = now.getDate(),
    h = now.getHours(), //获取当前小时数(0-23)
    f = now.getMinutes(),

    n = (Math.ceil((now.getMinutes()) / 10)) * 10; //获取当前分钟数(0-59)  取整数
  return y + "/" + (m < 10 ? "0" + m : m) + "/" + (d < 10 ? "0" + d : d) + " " + (h < 10 ? "0" + h : h) + ":" + (f < 10 ? "0" + f : f);

}

//根据年月  获取天数
const mGetDate = (year, month) => {
  var d = new Date(year, month, 0);
  return d.getDate();
}
//根据时间2019-01-02 09：12  得到 ['2019','1','2','9','12']
const getarrWithtime = (str) => {
  let arr = [];
  let arr1 = str.split(' ');
  let arr2 = (arr1[0]).split('-');
  let arr3 = arr1[1].split(':');
  arr = arr2.concat(arr3);
  arr[1] = arr[1].startsWith('0') ? arr[1].substr(1, arr[1].length) : arr[1];
  arr[2] = arr[2].startsWith('0') ? arr[2].substr(1, arr[2].length) : arr[2];
  arr[3] = arr[3].startsWith('0') ? arr[3].substr(1, arr[3].length) : arr[3];
  arr[4] = arr[4].startsWith('0') ? arr[4].substr(1, arr[4].length) : arr[4];
  return arr;
}



const getTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return [hour, minute, second].map(formatNumber).join(':')
}

const formatTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

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

const formatDataTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()
  return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
const transformTimestamp = timestamp => {
  let a = new Date(timestamp).getTime();
  const date = new Date(a);
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()
  return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
const formatDayTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  return [year, month, day].map(formatNumber).join('-')
}
const formatDayTimeMoth = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = '01'
  return [year, month, day].map(formatNumber).join('-')
}

const formatDayTimeApple = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  return [year, month, day].map(formatNumber).join('/')
}


const formatDayYm = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  return year + '年' + month + '月'
}


const getGuid = function () {

  var s = [];

  var hexDigits = "0123456789abcdef";

  for (var i = 0; i < 36; i++) {

    s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);

  }

  s[14] = "4";

  s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);

  s[8] = s[13] = s[18] = s[23] = "-";



  var uuid = s.join("");

  return uuid;

}
function getSpecifiedYear(num) {
  var myDate = new Date();
  var year = myDate.getFullYear() + num;
  var beginDate = year + "-01-01";
  var endDate = year + "-12-31";
  return [beginDate, endDate]
}
const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}

//浮点数加法运算解决精度问题
function AddNumber(arg1, arg2) {
  arg1 = arg1.toString(), arg2 = arg2.toString();
  var arg1Arr = arg1.split("."), arg2Arr = arg2.split("."), d1 = arg1Arr.length == 2 ? arg1Arr[1] : "", d2 = arg2Arr.length == 2 ? arg2Arr[1] : "";
  var maxLen = Math.max(d1.length, d2.length);
  var m = Math.pow(10, maxLen);
  var result = Number(((arg1 * m + arg2 * m) / m).toFixed(maxLen));
  var d = arguments[2];
  return typeof d === "number" ? Number((result).toFixed(d)) : result;
}

// 两个浮点数相减
function SubNumber(num1, num2) {
  var r1, r2, m;
  try {
    r1 = num1.toString().split('.')[1].length;
  } catch (e) {
    r1 = 0;
  }
  try {
    r2 = num2.toString().split(".")[1].length;
  } catch (e) {
    r2 = 0;
  }
  var m = Math.pow(10, Math.max(r1, r2));
  var n = (r1 >= r2) ? r1 : r2;
  return (Math.round(num1 * m - num2 * m) / m).toFixed(n);
}



function accMul(arg1, arg2) {
  var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
  try { m += s1.split(".")[1].length } catch (e) { }
  try { m += s2.split(".")[1].length } catch (e) { }
  return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
}

function except(arg1, arg2) {
  var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
  try { m += s1.split(".")[1].length } catch (e) { }
  try { m += s2.split(".")[1].length } catch (e) { }
  return Number(s1.replace(".", "")) / Number(s2.replace(".", "")) / Math.pow(10, m)
}

//获取当前时间 返回格式2021-12-14
function getTodayTime() {
  var date = new Date();
  var time = (date.getFullYear() + 1) + "-" + (date.getMonth() + 1) + "-" + date.getDate()
  return time;
}
function fun_date(num) {
  var date1 = new Date();
  //今天时间
  var date2 = new Date(date1);
  date2.setDate(date1.getDate() + num);
  //num是正数表示之后的时间，num负数表示之前的时间，0表示今天
  var time2 = date2.getFullYear() + "-" + (date2.getMonth() + 1) + "-" + date2.getDate();
  return time2;
}

function getCurrentMonth() {
  var firstDate = new Date();
  var startDate = firstDate.getFullYear() + "-" + ((firstDate.getMonth() + 1) < 10 ? "0" : "") + (firstDate.getMonth() + 1) + "-" + "01";
  var date = new Date();
  var currentMonth = date.getMonth();
  var nextMonth = ++currentMonth;
  var nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1);
  var oneDay = 1000 * 60 * 60 * 24;
  var lastDate = new Date(nextMonthFirstDay - oneDay);
  var endDate = lastDate.getFullYear() + "-" + ((lastDate.getMonth() + 1) < 10 ? "0" : "") + (lastDate.getMonth() + 1) + "-" + (lastDate.getDate() < 10 ? "0" : "") + lastDate.getDate();
  return [startDate, endDate]
}

function getCurrentDateMonth(cdate) {
  var firstDate = new Date(cdate);
  var startDate = firstDate.getFullYear() + "-" + ((firstDate.getMonth() + 1) < 10 ? "0" : "") + (firstDate.getMonth() + 1) + "-" + "01";
  var date = new Date(cdate);
  var currentMonth = date.getMonth();
  var nextMonth = ++currentMonth;
  var nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1);
  var oneDay = 1000 * 60 * 60 * 24;
  var lastDate = new Date(nextMonthFirstDay - oneDay);
  var endDate = lastDate.getFullYear() + "-" + ((lastDate.getMonth() + 1) < 10 ? "0" : "") + (lastDate.getMonth() + 1) + "-" + (lastDate.getDate() < 10 ? "0" : "") + lastDate.getDate();
  return [startDate, endDate]
}
function calc10000(arr, keySet) {
  arr.forEach(it => {
    keySet.forEach(kIt => {
      if (it[kIt]) {
        it[kIt] = parseFloat(it[kIt] / 10000).toFixed(2)
      }
    })
  })
  return arr
}

function parseFloatFixed2(num) {
  return parseFloat(num).toFixed(2)
}

function getCurrentWeek(n) {
  /***参数都是以周一为基准的***/
  //上周的开始时间
  // //上周的结束时间
  // //本周的开始时间
  // //本周的结束时间
  var now = new Date();
  var year = now.getFullYear();
  //因为月份是从0开始的,所以获取这个月的月份数要加1才行
  var month = now.getMonth() + 1;
  var date = now.getDate();
  var day = now.getDay();
  //判断是否为周日,如果不是的话,就让今天的day-1(例如星期二就是2-1)
  if (day !== 0) {
    n = n + (day - 1);
  } else {
    n = n + day;
  }
  if (day) {
    //这个判断是为了解决跨年的问题
    if (month > 1) {
      month = month;
    }
    //这个判断是为了解决跨年的问题,月份是从0开始的
    else {
      year = year - 1;
      month = 12;
    }
  }
  now.setDate(now.getDate() - n);
  return now;
}

function drawAndShareImage(param) {
  const ctx = wx.createCanvasContext('qrcode')
  ctx.beginPath()
  ctx.clearRect(0, 0, param.canvasWidth, param.canvasHeight)
  ctx.setFillStyle('#fff')
  ctx.fillRect(0, 0, param.canvasWidth, param.canvasHeight)

  /** 背景图 */
  ctx.beginPath()
  ctx.drawImage(param.background, 0, 0, param.canvasWidth, param.canvasHeight)
  ctx.save();

  /** 二维码 */
  ctx.beginPath()
  ctx.arc(param.qrX, param.qrY, 0, 0, 0)
  ctx.fill()
  ctx.clip()
  ctx.drawImage(
    param.qrcode,
    0, 0, 375, 375
  )
  ctx.restore()
  ctx.save()

  ctx.draw(false, () => {
    wx.canvasToTempFilePath({
      x: 100,
      y: 200,
      width: 50,
      height: 50,
      destWidth: 100,
      destHeight: 100,
      canvasId: 'qrcode',
      complete(res) { }
    })
  })

}

//日期转换
Date.prototype.format = function (format) {
  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), //quarter
    "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;
}

Date.prototype.before = function (day) {
  var timestamp = Date.parse(this);
  var beforeTimestamp = timestamp - 86400000 * day;
  return new Date(beforeTimestamp);
}
Date.prototype.after = function (day) {
  var timestamp = Date.parse(this);
  var afterTimestamp = timestamp + 86400000 * day;
  return new Date(afterTimestamp);
}

//时间戳换成日期时间转
function js_date_time(unixtime) {
  var date = new Date(unixtime);
  var y = date.getFullYear();
  var m = date.getMonth() + 1;
  m = m < 10 ? ('0' + m) : m;
  var d = date.getDate();
  d = d < 10 ? ('0' + d) : d;
  return y + '-' + m + '-' + d;

}
//时间戳换成日期时间转
function js_month_time(unixtime) {
  var date = new Date(unixtime);
  var y = date.getFullYear();
  var m = date.getMonth() + 1;
  m = m < 10 ? ('0' + m) : m;
  var d = date.getDate();
  d = d < 10 ? ('0' + d) : d;
  let a = {
    first: y + '-' + m,
    second: y + m
  }
  return a;

}

function getYear(type, dates) {
  var dd = new Date();
  var n = dates || 0;
  var year = dd.getFullYear() + Number(n);
  var month = dd.getMonth() + Number(n);
  if (month != null && month != 11) {
    if (type == "s") {
      var day = year - 1 + "-11-30";
    };
    if (type == "e") {
      var day = year + "-12-01";
    };
    if (!type) {
      var day = year + "-01-01/" + year + "-12-31";
    };
    return day;
  } else if (month != null && month == 11) {
    if (type == "s") {
      var day = year + "-11-30";
    };
    if (type == "e") {
      var day = year + 1 + "-12-01";
    };
    if (!type) {
      var day = year + "-01-01/" + year + "-12-31";
    };
    return day;
  }
}
function timeForMat(count) {
  // 拼接时间
  const time1 = new Date()
  const time2 = new Date()
  if (count === 1) {
    time1.setTime(time1.getTime() - (24 * 60 * 60 * 1000))
  } else {
    if (count >= 0) {
      time1.setTime(time1.getTime())
    } else {
      if (count === -2) {
        time1.setTime(time1.getTime() + (24 * 60 * 60 * 1000) * 2)
      } else {
        time1.setTime(time1.getTime() + (24 * 60 * 60 * 1000))
      }
    }
  }

  const Y1 = time1.getFullYear()
  const M1 = ((time1.getMonth() + 1) > 9 ? (time1.getMonth() + 1) : '0' + (time1.getMonth() + 1))
  const D1 = (time1.getDate() > 9 ? time1.getDate() : '0' + time1.getDate())
  const timer1 = Y1 + '-' + M1 + '-' + D1  // 当前时间

  time2.setTime(time2.getTime() - (24 * 60 * 60 * 1000 * count))
  const Y2 = time2.getFullYear()
  const M2 = ((time2.getMonth() + 1) > 9 ? (time2.getMonth() + 1) : '0' + (time2.getMonth() + 1))
  const D2 = (time2.getDate() > 9 ? time2.getDate() : '0' + time2.getDate())
  const timer2 = Y2 + '-' + M2 + '-' + D2  // 以前的7天或者30天
  return [timer2, timer1]
}

/**
* @desc : 复制
* @date : 2022/7/29 16:49
* @author : 周兴
*/
function toCopy(value, label) {
  if (!value || !label) return;
  wx.setClipboardData({
    data: value,
    success: res => {
      wx.showToast({
        title: label + '已复制',
        duration: 1000,
      })
    }
  })
}
function numAdd(num1, num2) {
  var baseNum, baseNum1, baseNum2;
  try {
    baseNum1 = num1.toString().split(".")[1].length;
  } catch (e) {
    baseNum1 = 0;
  }
  try {
    baseNum2 = num2.toString().split(".")[1].length;
  } catch (e) {
    baseNum2 = 0;
  }
  baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
  return (num1 * baseNum + num2 * baseNum) / baseNum;
}
function numSub(num1, num2) {
  var baseNum, baseNum1, baseNum2;
  var precision;// 精度 
  try {
    baseNum1 = num1.toString().split(".")[1].length;
  } catch (e) {
    baseNum1 = 0;
  }
  try {
    baseNum2 = num2.toString().split(".")[1].length;
  } catch (e) {
    baseNum2 = 0;
  }
  baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
  precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;
  return ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);
}

function jumpPageDate(type) {

  let date = []
  if (type == 1) {
    date = [formatTime(new Date()).substring(0, 10), formatTime(new Date()).substring(0, 10)]
  }
  else if (type == 2) {
    date = [formatTime(getCurrentWeek(0)).substring(0, 10), formatTime(getCurrentWeek(-6)).substring(0, 10)]
  }
  else if (type == 3) {
    date = getCurrentMonth();

  } else if (type == 4) {
    let startYear = getYear("s", 0)
    let endYear = getYear("e", 0)
    //本年
    date = [formatTime(new Date(startYear)).substring(0, 10),
    formatTime(new Date(endYear)).substring(0, 10)]
  }
  else if (type == 6) {
    //近7
    date = timeForMat(7)
  }
  else if (type == 5) {
    //近30天
    date = timeForMat(30)
  } else if (type == -1) {
    let dateEnd = formatTime(new Date()).substring(0, 10)
    let startYear = new Date().getFullYear() - 1;
    let startMonth = new Date().getMonth() + 1 > 9 ? new Date().getMonth() + 1 : '0' + (new Date().getMonth() + 1);
    let startDay = new Date().getDate() > 9 ? new Date().getDate() : '0' + new Date().getDate();
    if (startMonth === 2 && startDay === 29) {
      startDay = 28
    }
    date = [startYear + '/' + startMonth + '/' + startDay, dateEnd]
  } else if (type == -2) {
    let dateEnd = formatTime(new Date()).substring(0, 10)
    let startYear = new Date().getFullYear() + 1;
    let startMonth = new Date().getMonth() + 1 > 9 ? new Date().getMonth() + 1 : '0' + (new Date().getMonth() + 1);
    let startDay = new Date().getDate() > 9 ? new Date().getDate() : '0' + new Date().getDate();
    if (startMonth === 2 && startDay === 29) {
      startDay = 28
    }
    date = [dateEnd, startYear + '/' + startMonth + '/' + startDay]
  }
  return date;
}
/**
* @desc : 判断手机号格式 
* @author : 于继渤
* @date : 2022/8/19 10:16
*/
function isPoneAvailable(poneInput) {
  var myreg = Constants.Mobile_Phone_Number_Regular_Expression
  if (!myreg.test(poneInput)) {
    return false;
  } else {
    return true;
  }
}
/**
* @desc : 深度拷贝 
* @author : 于继渤
* @date : 2022/8/19 10:16
*/
function copyObj(obj) {
  var _obj = JSON.stringify(obj);
  var objClone = JSON.parse(_obj);
  return objClone;
}

/**
* @desc : 直辖市更新 
* @author : 于继渤
* @date : 2022/8/19 10:16
*/
function updateProvince(location) {

  if (location.province && location.province != '' && typeof location.province == 'string') {
    let province = location.province
    if (province.indexOf('北京') != -1) {
      province = '北京'
      return location.province = province
    }
    if (province.indexOf('上海') != -1) {
      province = '上海'
      return location.province = province
    }
    if (province.indexOf('天津') != -1) {
      province = '天津'
      return location.province = province
    }
    if (province.indexOf('重庆') != -1) {
      province = '重庆'
      return location.province = province
    }
  } else {
    console.log('location', location)
    if (location.city) {
      let province = location.city.replace('市', '')
      return location.province = province
    }

  }

}
//判断数字是否为负数并转为负数
function isNumberNegative(n) {
  if (!isNaN(n)) {
    let numberTemp = Number(0)
    if (n > 0) {
      console.log("正数");
      numberTemp = (Number(0) - Number(n))
      return numberTemp
    } else if (n < 0) {
      console.log("负数");
      return n
    } else {
      return n
    }
  } else {
    return Number(n)
  }
}

/**
 * @desc   : 合并实体(供main.js)调用，其他地方，调用上面那个
 * @author : 周兴
 * @date   : 2022/11/21 14:25
 */
function objectMergeByMainJs(source, target) {
  if (typeof source !== 'object') {
    source = {};
  }
  if (Array.isArray(target)) {
    return source.slice();
  }
  if (!source['key']) {
    Object.keys(target).forEach((property) => {
      const targetProperty = target[property];
      if (typeof targetProperty === 'object') {
        source[property] = this.objectMergeByMainJs(source[property], targetProperty);
      } else {
        source[property] = targetProperty;
      }
    });
  }
  return source;
}

/**
   * @desc   : id parentId扁平结构转变为children层级结构
   * @author : 周兴
   * @date   : 2022/12/30 15:55
   */
function convertToChildren(arr, pId = 'parentId', id = 'id', path = null) {
  if (!arr || arr.length === 0) return arr;
  let data = arr.filter(it => !it[pId]) // 获取最顶级
  if (data && data.length > 0) {
    data.forEach(it => {
      _convertToChildren(it, arr, it[id], pId, id);
    })
  }
  return data;
}

/**
 * @desc   : 转成children格式数据（私有方法）
 * @author : 周兴
 * @date   : 2022/12/30 17:06
 */
function _convertToChildren(item, arr, idValue, pId, id, path = null) {
  // console.log('t1',item,idValue,)
  let filters = arr.filter(it => it[pId] === idValue);
  if (!filters || filters.length === 0) {
    return [];
  } else {
    item.children = filters;
    item.children.forEach(it => {
      _convertToChildren(it, arr, it[id], pId, id, path);
    })
    return item;
  }
}

/**
 * @desc   : 根据枚举值获取相应的键名
 * @author : 周兴
 * @date   : 2024/2/29 17:06
 */
function getKeyByValue(enumObj, value) {
  for (let key in enumObj) {
    if (enumObj[key] === value) {
      return key;
    }
  }
  return null;
}

// 判断是否为空
function isEmpty(obj) {
  if (typeof obj === 'undefined' || obj === null || obj === '') return true;
  return false
}

/**
 * @desc   : 过滤掉数组中的空值行
 * @author : 周兴
 * @date   : 2024/1/26 11:46
 */
function filterArrayEmpty(table) {
  if (!table || table.length == 0) return table;
  let keys = Object.keys(table[0]);
  console.log('keys',keys);
  let returnTable = []
  table.forEach(row => {
    let flag = true
    keys.forEach(k => {
      if (k.indexOf('_errMsg') < 0 && !isEmpty(row[k])) {
        flag = false;
      }
    })
    if (!flag) {
      returnTable.push(row)
    }
  })
  return returnTable;
}

/**
 * @desc   : 提示信息
 * @author : 周兴
 * @date   : 2024/1/26 11:46
 */
function showToast(info) {
  if (info) {
    // 默认2s
    let duration = 2000
    wx.showToast({
      title: info,
      icon: 'none',
      duration: duration
    })
  }
}




module.exports = {
  showToast:showToast,
  filterArrayEmpty: filterArrayEmpty,
  getKeyByValue: getKeyByValue,
  convertToChildren: convertToChildren,
  objectMergeByMainJs: objectMergeByMainJs,
  updateProvince: updateProvince,
  isPoneAvailable: isPoneAvailable,
  formatTime: formatTime,
  drawAndShareImage,
  fun_date,
  getCurrentWeek,
  getCurrentMonth,
  getCurrentDateMonth,
  getTime,
  getGuid,
  js_date_time,
  js_month_time,
  getDate,
  toDateStr,
  getobjDate,
  mGetDate,
  getarrWithtime,
  getSpecifiedYear,
  getTodayTime,
  formatDataTime,
  formatDayTime,
  transformTimestamp,
  getYear,
  timeForMat,
  AddNumber,
  accMul,
  except,
  toCopy,
  numAdd,
  numSub, formatDayYm, jumpPageDate, calc10000, parseFloatFixed2,
  formatDayTimeApple, getobjDateApple,
  formatDayTimeMoth: formatDayTimeMoth,
  copyObj,
  SubNumber,
  isNumberNegative
}