/**
 * OK
 * 日期类
 * 需要载入:string.js,
 */
var DateUtil = {
  /**
   * 判断字符串是否是有效的日期
   * 日期分隔符为"-"或"/"
   * input 输入字符串
   */
  isDate: function (input) {
    if (StringUtil.isEmpty(input))  return false;
    var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;
    var result = input.match(reg);
    if (result == null)return false;
    var date = new Date(result[1], result[3] - 1, result[4])
    return ((date.getFullYear() == parseInt(result[1], 10))
        && (date.getMonth() == parseInt(result[3], 10) - 1)
        && (date.getDate() == parseInt(result[4], 10)));
  },

  /**
   * 格式化字符串为"yyyy-MM-dd"或"yyyy/MM/dd"格式
   * input 输入字符串
   */
  toDate: function (input) {
    if (StringUtil.isEmpty(input))  return "";
    var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;
    var result = input.match(reg);
    if (result == null)return "";
    var date = new Date(result[1], result[3] - 1, result[4])
    if ((date.getFullYear() == parseInt(result[1], 10))
        && (date.getMonth() == parseInt(result[3], 10) - 1)
        && (date.getDate() == parseInt(result[4], 10))) {
      var year = date.getFullYear().toString(10);
      var month = (date.getMonth() + 1 < 10) ? "0" + (date.getMonth() + 1).toString(10) : (date.getMonth() + 1).toString(10);
      var day = (date.getDate() < 10) ? "0" + date.getDate().toString(10) : date.getDate().toString(10);
      return year + result[2] + month + result[2] + day;
    }
    else {
      return "";
    }
  },

  /**
   * 将字符串转换为日期
   * input 输入字符串
   */
  convertDate: function (input) {

    if (DateUtil.isDate(input)) {
      var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;
      var result = input.match(reg);
      return new Date(result[1], result[3] - 1, result[4]);
    }
    else {
      return null;
    }
  },

  /**
   * 判断字符串是否是有效的年和月
   * 日期分隔符为"-"或"/"
   * input 输入字符串
   */
  isMonth: function (input) {
    if (StringUtil.isEmpty(input)) return false;
    var reg = /^(\d{1,4})(-|\/)(\d{1,2})$/;
    var result = input.match(reg);
    if (result == null)return false;
    var date = new Date(result[1], result[3] - 1, 1)
    return ((date.getFullYear() == parseInt(result[1], 10))
        && (date.getMonth() == parseInt(result[3], 10) - 1))
  },

  /**
   * 格式化字符串为"yyyy-MM"或"yyyy/MM"格式
   * input 输入字符串
   */
  toMonth: function (input) {
    if (StringUtil.isEmpty(input))  return "";
    var reg = /^(\d{1,4})(-|\/)(\d{1,2})$/;
    var result = input.match(reg);
    if (result == null) return "";
    var date = new Date(result[1], result[3] - 1, 1)
    if ((date.getFullYear() == parseInt(result[1], 10))
        && (date.getMonth() == parseInt(result[3], 10) - 1)) {
      var year = date.getFullYear().toString(10);
      var month = (date.getMonth() + 1 < 10) ? "0" + (date.getMonth() + 1).toString(10) : (date.getMonth() + 1).toString(10);
      return year + result[2] + month;
    }
    else {
      return "";
    }
  },


  /**
   * 判断输入时间是否有效
   * 时间格式: HH 或 HH:mm 或 HH:mm:ss;
   * input 输入字符串
   */
  isTime:function(input) {
    if (StringUtil.isEmpty(input)) return false;
    var times = input.split(":");
    var reg1 = /^([0-9]|[01][0-9]|2[0-3])$/;
    var reg2 = /^([0-9]|[0-5][0-9])$/;
    var result;
    switch (times.length) {
      case 1:
        result = times[0].match(reg1);
        if (result == null) return false;
        break;
      case 2:
        result = times[0].match(reg1);
        if (result == null) return false;
        result = times[1].match(reg2);
        if (result == null) return false;
        break;
      case 3:
        result = times[0].match(reg1);
        if (result == null) return false;
        result = times[1].match(reg2);
        if (result == null) return false;
        result = times[2].match(reg2);
        if (result == null) return false;
        break;
      default:
        return false;
    }
    return true;
  },

  /**
   * 格式化时间
   * 返回格式 HH:mm 或 HH:mm:ss
   */
  toTime:function(input) {
    if (!DateUtil.isTime(input)) return "";
    var times = input.split(":");
    var s,f,m;
    var result = "";
    switch (times.length) {
      case 1:
        s = NumberUtil.toInt(times[0]);
        result += (s < 10) ? "0" + s + ":00" : s + ":00";
        return result;
      case 2:
        s = NumberUtil.toInt(times[0]);
        result = (s < 10) ? "0" + s + ":" : s + ":";
        f = NumberUtil.toInt(times[1]);
        result += (f < 10) ? "0" + f : f;
        return result;
      case 3:
        s = NumberUtil.toInt(times[0]);
        result = (s < 10) ? "0" + s + ":" : s + ":";
        f = NumberUtil.toInt(times[1]);
        result += (f < 10) ? "0" + f + ":" : f + ":";
        m = NumberUtil.toInt(times[2]);
        result += (m < 10) ? "0" + m : m;
        return result;
      default: return "";
    }
  },

  /**
   * 获得详细时间
   */
  getDetailTime:function(kinds) {
    var date = new Date();
    var year = "",month = "",day = "",week = "",hour = "",minute = "",second = "",val = "";
    var add_zero = function(temp) {
      if (temp < 10) return "0" + temp;
      else return temp;
    }
    year = date.getYear();
    month = add_zero(date.getMonth() + 1);
    day = add_zero(date.getDate());
    week = date.getDay();
    switch (date.getDay()) {
      case 0:val = "星期天";break
      case 1:val = "星期一";break
      case 2:val = "星期二";break
      case 3:val = "星期三";break
      case 4:val = "星期四";break
      case 5:val = "星期五";break
      case 6:val = "星期六";break
    }
    hour = add_zero(date.getHours());
    minute = add_zero(date.getMinutes());
    second = add_zero(date.getSeconds());
    if(kinds!=null){
      return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
    }else{
      return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second + " " + val;      
    }
  },
  /**
   * 日期(yyyy-mm-dd HH:mm:ss)和分钟数相加(减)等于第二个日期
   * @param datetime yyyy-mm-dd HH:mm:ss格式的字符串
   * @param minutes 分钟数,可以为负数
   */
  addMinutes:function(datetime,minutes){
    var tmpdate,tmptime;
    tmpdate=datetime.split(" ")[0];
    tmptime=datetime.split(" ")[1];
    var date=new Date(tmpdate.split("-")[0],parseInt(tmpdate.split("-")[1])-1,
        tmpdate.split("-")[2],tmptime.split(":")[0],tmptime.split(":")[1],tmptime.split(":")[2]);   
    var intertimes=minutes*60*1000;
    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;
    }
//    alert(new Date(Date.parse(date)+intertimes));
    return (new Date(Date.parse(date)+intertimes)).format('yyyy-MM-dd hh:mm:ss');
  }
}

