function DateUtils(date) {

	this.date = null;

	/***
	 * 设置日期
	 */
	this.setDate = function(date) {
		if (date instanceof Date) {
			this.date = date;

		} else if (typeof date == "date") {
			this.date = date;
		} else if (typeof date == "string") {
			date = date.replace(/\-/g, '/');
			this.date = new Date(date);
		} else if (typeof date == "number") {
			this.date = new Date(date);
		} else {
			this.date = new Date();
		}
	}

	/***
	 * 格式化字符串
	 * date 可以是Date类型  或者字符串类型
	 * format 是格式字符串
	 * 	y 年
	 *  M 月
	 *  d 日
	 * 	h 时
	 *  m 分钟
	 *  s 秒
	 *  S 毫秒
	 *  q 季度
	 */
	this.getFormattedDate = function(format) {
		if (!format) {
			format = "yyyy-MM-dd hh:mm:ss";
		}
		var o = {
			"M+": this.date.getMonth() + 1, //month
			"d+": this.date.getDate(), //day
			"h+": this.date.getHours(), //hour
			"m+": this.date.getMinutes(), //minute
			"s+": this.date.getSeconds(), //second
			"q+": Math.floor((this.date.getMonth() + 3) / 3), //quarter
			"S": this.date.getMilliseconds() //millisecond
		}

		if (/(y+)/.test(format)) {
			format = format.replace(RegExp.$1, (this.date.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;
	}

	/**
	 * 判断年份是否为润年
	 *
	 * @param {Number} year
	 */
	this.isLeapYear = function(year) {
		var year = year || this.date.getFullYear();
		return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
	}
	/**
	 * 获取某一年份的某一月份的天数
	 *
	 * @param {Number} year
	 * @param {Number} month
	 */
	this.getMonthDays = function(month,year) {
		return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] || (this.isLeapYear(year) ? 29 : 28);
	}

	/**
	 * 获取某年的某天是第几周
	 * @param {Number} y
	 * @param {Number} m
	 * @param {Number} d
	 * @returns {Number}
	 */
	this.getWeekOfYear = function (y, m, d) {
		var	year = this.date.getFullYear(),
			month = this.date.getMonth(),
			days = this.date.getDate();
		//那一天是那一年中的第多少天
		for (var i = 0; i < month; i++) {
			days += this.getMonthDays(i);
		}

		//那一年第一天是星期几
		var yearFirstDay = new Date(year, 0, 1).getDay() || 7;

		var week = null;
		if (yearFirstDay == 1) {
			week = Math.ceil(days / yearFirstDay);
		} else {
			days -= (7 - yearFirstDay + 1);
			week = Math.ceil(days / 7) + 1;
		}

		return week;
	}

	/***
	 * 获取毫秒数
	 */
	this.getMillisecond = function(){
		return this.date.valueOf();
	}

    /***
	 * 获取日期的毫秒数 00:00:00
     */
    this.getMillisecondOfDate = function () {
		var d = new Date(this.date.getFullYear(), this.date.getMonth(), this.date.getDate(), 0, 0, 0);
		return d.getTime();
    }
    /***
     * 获取日期的毫秒数 23:59:59
     */
    this.getMillisecondOfDateEnd = function () {
        var d = new Date(this.date.getFullYear(), this.date.getMonth(), this.date.getDate(), 23, 59, 59);
        return d.getTime();
    }
    /**
	 * 获取日期的毫秒数  hour:00:00
     */
    this.getMillisecondOfHour = function () {
        var d = new Date(this.date.getFullYear(), this.date.getMonth(), this.date.getDate(), this.date.getHours(), 0, 0);
        return d.getTime();
    }
    /**
     * 获取日期的毫秒数 hour:59:59
     */
    this.getMillisecondOfHourEnd = function () {
        var d = new Date(this.date.getFullYear(), this.date.getMonth(), this.date.getDate(), this.date.getHours(), 59, 59);
        return d.getTime();
    }
    /**
     * 获取本月第一天的秒数
     */
    this.getMillisecondOfFirstDay = function () {
		var d = new Date(this.date.getFullYear(),this.date.getMonth(),1,0,0,0);
		return d.getTime();
    }
    /**
     * 获取本月最后一天的秒数
     */
    this.getMillisecondOfLastDay = function (year,month) {
    	var day;
		var month = month || this.date.getMonth();
		var year = year || this.date.getFullYear();
		day = this.getMonthDays(month,year);
        var d = new Date(this.date.getFullYear(),this.date.getMonth(),day,23,59,59);
        return d.getTime();
    }

    /**
     * 获取本年第一月第一天的秒数
     */
    this.getMillisecondOfFirstMonth = function () {
        var d = new Date(this.date.getFullYear(),0,1,0,0,0);
        return d.getTime();
    }
    /**
     * 获取本年最后一天的秒数
     */
    this.getMillisecondOfLastMonth = function () {
        var d = new Date(this.date.getFullYear(),11,31,23,59,59);
        return d.getTime();
    }
    /***
	 * 计算第一个日期距离第二个日期多少天
	 * 		如果不传递第二个日期 默认是当前日期
     */
    this.getDateDistance = function(date1, date2){
    	var times1, times2;

    	if(!date1 || !(date1 instanceof Date)){
			return null;
		}
		if(!date2){
    		date2 = new Date();
		}else if(!(date2 instanceof Date)){
			return null
		}

		var  d1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
		var  d2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());

		return (d1-d2)/86400000;
	}

	/***
	 * 增加天数
	 */
	this.addDays = function(days) {
		var daysMilliSeconds = days*86400000;
		var targetMilliSeconds = this.date.valueOf()+daysMilliSeconds;
		this.date = new Date(targetMilliSeconds);
	};

	/***
	 * 减少天数
	 */
	this.subDays = function(days) {
		var daysMilliSeconds = days*86400000;
		var targetMilliSeconds = this.date.valueOf() - daysMilliSeconds;
		this.date = new Date(targetMilliSeconds);
	}


	//设置初始日期
	this.setDate(date);
}
