function formatTime(date) {
  var year = date.getFullYear()
  var month = date.getMonth() + 1
  var day = date.getDate()

  var hour = date.getHours()
  var minute = date.getMinutes()
  var second = date.getSeconds()

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

function formatTime_date(date) {
  var year = yearFormString(date)
  var month = monthFormString(date) 
  var day = dayFormString(date)
  return [year, month, day].map(formatNumber).join('-') 
}

function formatDate_min(date) {
  var year = yearFormString(date)
  var month = monthFormString(date)
  var day = dayFormString(date)
  return [year, month, day].map(formatNumber).join('/')
}

function formatNumber(n) {
  n = n.toString()
  return n[1] ? n : '0' + n
}

function formatDateString(dateStr) {
  var date = new Date()
  date.setTime(dateStr * 1000)
  var newDate = this.formatTime(date)
  return newDate
}
function yearFormString(dateStr) {
  var date = new Date()
  date.setTime(dateStr * 1000)
  var year = date.getFullYear()
  return year
}
function monthFormString(dateStr) {
  var date = new Date()
  date.setTime(dateStr * 1000)
  var month = date.getMonth() + 1
  return month
}
function dayFormString(dateStr) {
  var date = new Date()
  date.setTime(dateStr * 1000)
  var day = date.getDate()
  return day
}

//获取当前时间,格式YYYY-MM-DD
function curDateTime() {
    var d = new Date();
    var year = d.getFullYear();
    var month = d.getMonth() + 1;
    var date = d.getDate();
    var day = d.getDay();
    var curDateTime = year;
    if (month > 9)
      curDateTime = curDateTime + "-" + month;
    else
      curDateTime = curDateTime + "-0" + month;
    if (date > 9)
      curDateTime = curDateTime + "-" + date;
    else
      curDateTime = curDateTime + "-0" + date;
    return curDateTime;
}

/** 
  * 检验18位身份证号码(15位号码可以只检测生日是否正确即可) 
  * @author wolfchen 
  * @param idCardNo 18为的身份证号码
  * @return Boolean 是否合法 
  **/
function isIDCardNum(idCardNo) {
  var regID_18 = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
  var regID_15 = /^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$/;
  var arrExp = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//加权因子  
  var arrValid = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];//校验码  
  if (regID_15.test(idCardNo)) {
    return true;
  } else if (regID_18.test(idCardNo)) {
    var sum = 0, idx;
    for (var i = 0; i < idCardNo.length - 1; i++) {
      // 对前17位数字与权值乘积求和  
      sum += parseInt(idCardNo.substr(i, 1), 10) * arrExp[i];
    }
    // 计算模(固定算法)  
    idx = sum % 11;
    // 检验第18为是否与校验码相等  
    return arrValid[idx] == idCardNo.substr(17, 1).toUpperCase();
  } else {
    return false;
  }
}
function analyzeIDCard(IDCard){
  var sexAndAge = {}
  //获取用户身份证号码
  var userCard = IDCard;
  //如果身份证号码为undefind则返回空
  if (!userCard) {
    return sexAndAge;
  }
  //获取性别
  if (parseInt(userCard.substr(16, 1)) % 2 == 1) {
    sexAndAge.sex = '男'
  } else {
    sexAndAge.sex = '女'
  }
  //获取出生年月日
  //userCard.substring(6,10) + "-" + userCard.substring(10,12) + "-" + userCard.substring(12,14);
  var yearBirth = userCard.substring(6, 10);
  var monthBirth = userCard.substring(10, 12);
  var dayBirth = userCard.substring(12, 14);
  //出生日期
  sexAndAge.birthDay = yearBirth + '-' + monthBirth + '-' + dayBirth;

  //获取当前年月日并计算年龄
  var myDate = new Date();
  var monthNow = myDate.getMonth() + 1;
  var dayNow = myDate.getDay();
  var age = myDate.getFullYear() - yearBirth;
  if (monthNow < monthBirth || (monthNow == monthBirth && dayNow < dayBirth)) {
    age--;
  }
  //得到年龄
  sexAndAge.age = age;
  //返回性别和年龄
  return sexAndAge;
}
function isMobile(mobile) {
  var regMobile = /^(13[0-9]|14[5-9]|15[012356789]|166|17[0-8]|18[0-9]|19[8-9])[0-9]{8}$/;
  return regMobile.test(mobile)
}

//验证字符串是否是数字
function checkNumber(theObj) {
  var reg01 = /^[0-9]+.?[0-9]*$/;
  var reg02 = /^[0-9]+$/;
  if (reg01.test(theObj) || reg02.test(theObj)) {
    return true;
  }
  return false;
}

module.exports = {
  formatTime: formatTime,
  formatTime_date: formatTime_date,  
  formatDate_min: formatDate_min,
  formatDateString: formatDateString,
  yearFormString: yearFormString,
  monthFormString: monthFormString,
  dayFormString: dayFormString,
  isIDCardNum: isIDCardNum,
  curDateTime: curDateTime,
  analyzeIDCard: analyzeIDCard,
  checkNumber: checkNumber,
  isMobile: isMobile
}