js实现的日期操作类DateTime函数代码


方法注解:

将指定的天数加到此实例的值上 。

将指定的小时数加到此实例的值上 。

将指定的分钟数加到此实例的值上 。

将指定的毫秒数加到此实例的值上 。

将指定的月份数加到此实例的值上 。

将指定的秒数加到此实例的值上 。

将指定的年份数加到此实例的值上 。

将此实例的值与指定的 Date 值相比较,并指示此实例是早于、等于还是晚于指定的 Date 值 。

返回一个数值相同的新DateTime对象

返回一个值,该值指示此实例是否与指定的 DateTime 实例相等 。

获取此实例的日期部分 。

获取此实例所表示的日期为该月中的第几天 。

获取此实例所表示的日期是星期几 。

获取此实例所表示日期的小时部分 。

获取此实例所表示日期的分钟部分 。

获取此实例所表示日期的毫秒部分 。

获取此实例所表示日期的月份部分 。

获取此实例的下个月一日的DateTime对象

获取此实例的下一个周日的DateTime对象

获取此实例的下一个周日的DateTime对象

获取此实例所表示日期的秒部分 。

返回此实例的Date值

获取此实例所表示日期的年份部分 。

指示此实例是否是DateTime对象

将当前 DateTime 对象的值转换为其等效的短日期字符串表示形式 。

将当前 DateTime 对象的值转换为其等效的短时间字符串表示形式 。

将当前 DateTime 对象的值转换为其等效的字符串表示形式 。

验证Add系列的方法参数是否合法

继承自Date的方法

比较 DateTime 的两个实例,并返回它们相对值的指示 。

返回指定年和月中的天数 。

返回一个值,该值指示 DateTime 的两个实例是否相等 。

返回指定的年份是否为闰年的指示 。

获取一个 DateTime 对象,该对象设置为此计算机上的当前日期和时间,表示为本地时间 。

将日期和时间的指定字符串表示形式转换为其等效的 DateTime 。

获取当前日期,其时间组成部分设置为 00:00:00 。

复制代码 代码如下:

//表示时间上的一刻,通常以日期和当天的时间表示 。
function DateTime(year, month, day, hour, min, sec, millisec){
    var d = new Date();

    if (year || year == 0){
        d.setFullYear(year);
    }
    if (month || month == 0){
        d.setMonth(month - 1);
    }
    if (day || day == 0){
        d.setDate(day);
    }
    if (hour || hour == 0){
        d.setHours(hour);
    }
    if (min || min == 0){
        d.setMinutes(min);
    }
    if (sec || sec == 0){
        d.setSeconds(sec);
    }
    if (millisec || millisec == 0){
        d.setMilliseconds(millisec);
    }
    //将指定的天数加到此实例的值上 。
    this.AddDays = function(value){
        if(!ValidateAddMethodParam(value)){
            return null;
        }
        var result = this.Clone();
        result.GetValue().setDate(result.GetDay() + value);
        return result;
    }
    //将指定的小时数加到此实例的值上 。
    this.AddHours = function(value){
        if(!ValidateAddMethodParam(value)){
            return null;
        }
        var result = this.Clone();
        result.GetValue().setHours(result.GetHour() + value);
        return result;
    }
    //将指定的分钟数加到此实例的值上 。
    this.AddMinutes = function(value){
        if(!ValidateAddMethodParam(value)){
            return null;
        }
        var result = this.Clone();
        result.GetValue().setMinutes(result.GetMinute() + value);
        return result;
    }
    //将指定的毫秒数加到此实例的值上 。
    this.AddMilliseconds = function(value){
        if(!ValidateAddMethodParam(value)){
            return null;
        }
        var result = this.Clone();
        result.GetValue().setMilliseconds(result.GetMillisecond() + value);
        return result;
    }
    //将指定的月份数加到此实例的值上 。
    this.AddMonths = function(value){
        if(!ValidateAddMethodParam(value)){
            return null;
        }
        var result = this.Clone();
        result.GetValue().setMonth(result.GetValue().getMonth() + value);
        return result;
    }
    //将指定的秒数加到此实例的值上 。
    this.AddSeconds = function(value){
        if(!ValidateAddMethodParam(value)){
            return null;
        }
        var result = this.Clone();
        result.GetValue().setSeconds(result.GetSecond() + value);
        return result;
    }
    //将指定的年份数加到此实例的值上 。
    this.AddYears = function(value){
        if(!ValidateAddMethodParam(value)){
            return null;
        }
        var result = this.Clone();
        result.GetValue().setFullYear(result.GetYear() + value);
        return result;
    }    
    //将此实例的值与指定的 Date 值相比较,并指示此实例是早于、等于还是晚于指定的 Date 值 。
    this.CompareTo = function(other){
        var internalTicks = other.getTime();
        var num2 = d.getTime();
     if (num2 > internalTicks)
     {
     return 1;
     }
     if (num2 < internalTicks)
     {
     return -1;
     }
     return 0;
    }
    //返回一个数值相同的新DateTime对象
    this.Clone = function(){
        return new DateTime(
             this.GetYear()
            ,this.GetMonth()
            ,this.GetDay()
            ,this.GetHour()
            ,this.GetMinute()
            ,this.GetSecond()
            ,this.GetMillisecond());
    }
    //返回一个值,该值指示此实例是否与指定的 DateTime 实例相等 。
    this.Equals = function(other){
        return this.CompareTo(other) == 0;
    }
    //获取此实例的日期部分 。
    this.GetDate = function(){
        var result = new DateTime(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0, 0);
        return result ;
    }
    //获取此实例所表示的日期为该月中的第几天 。
    this.GetDay = function(){
        return d.getDate();
    }
    //获取此实例所表示的日期是星期几 。
    this.GetDayOfWeek = function(){
        return d.getDay();
    }
    //获取此实例所表示日期的小时部分 。
    this.GetHour = function(){
        return d.getHours();
    }
    //获取此实例所表示日期的分钟部分 。
    this.GetMinute = function(){
        return d.getMinutes();
    }
    //获取此实例所表示日期的毫秒部分 。
    this.GetMillisecond = function(){
        return d.getMilliseconds();
    }
    //获取此实例所表示日期的月份部分 。
    this.GetMonth = function(){
        return d.getMonth() + 1;
    }
    //获取此实例的下个月一日的DateTime对象
    this.GetNextMonthFirstDay = function(){
        var result = new DateTime(this.GetYear(), this.GetMonth(), 1, 0, 0, 0, 0);
        result = result.AddMonths(1);
        return result;
    }
    //获取此实例的下一个周日的DateTime对象
    this.GetNextWeekFirstDay = function(){
        var result = this.GetDate();
        return result.AddDays(7 - result.GetDayOfWeek());
    }
    //获取此实例的下一个周日的DateTime对象
    this.GetNextYearFirstDay = function(){
        return new DateTime(this.GetYear() + 1, 1, 1, 0, 0, 0, 0);
    }
    //获取此实例所表示日期的秒部分 。
    this.GetSecond = function(){
        return d.getSeconds();
    }
    //返回此实例的Date值
    this.GetValue = function(){
        return d;
    }
    //获取此实例所表示日期的年份部分 。
    this.GetYear = function(){
        return d.getFullYear();
    }
    //指示此实例是否是DateTime对象
    this.IsDateTime = function(){}
    //将当前 DateTime 对象的值转换为其等效的短日期字符串表示形式 。
    this.ToShortDateString = function(){
        var result = "";
        result = d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate();
        return result;    
    }
    //将当前 DateTime 对象的值转换为其等效的短时间字符串表示形式 。
    this.ToShortTimeString = function(){
        var result = "";
        result = d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();
        return result;    
    }
    //将当前 DateTime 对象的值转换为其等效的字符串表示形式 。
    this.ToString = function(format){
        if(typeof(format) == "string"){

        }
        return this.ToShortDateString() + " " + this.ToShortTimeString();
    }
    //验证Add系列的方法参数是否合法
    function ValidateAddMethodParam(param){
        if(typeof(param) != "number"){
            return false;
        }
        return true;
    }
    //继承自Date的方法
    this.getTime = function(){
        return d.getTime();
    }
}

//比较 DateTime 的两个实例,并返回它们相对值的指示 。
DateTime.Compare = function(d1, d2){
    return d1.CompareTo(d2);
}
//返回指定年和月中的天数 。
DateTime.DaysInMonth = function(year, month){
if ((month < 1) || (month > 12))
{
return "月份[" + month + "]超出范围";
}
var numArray = DateTime.IsLeapYear(year) ? DateTime.DaysToMonth366 : DateTime.DaysToMonth365;
return (numArray[month] - numArray[month - 1]);
}
//返回一个值,该值指示 DateTime 的两个实例是否相等 。
DateTime.Equals = function(d1, d2){
    return d1.CompareTo(d2) == 0;
}
//返回指定的年份是否为闰年的指示 。
DateTime.IsLeapYear = function(year)
{
if ((year < 1) || (year > 0x270f))
{
return "年份[" + year + "]超出范围";
}
if ((year % 4) != 0)
{
return false;
}
if ((year % 100) == 0)
{
return ((year % 400) == 0);
}
return true;
}
//获取一个 DateTime 对象,该对象设置为此计算机上的当前日期和时间,表示为本地时间 。
DateTime.Now = new DateTime();
//将日期和时间的指定字符串表示形式转换为其等效的 DateTime 。
DateTime.Parse = function(s){
    var result = new DateTime();
    var value = result.GetValue();
    value.setHours(0,0,0,0);
    var dateRex = /\b[1-2][0-9][0-9][0-9][-]\d{1,2}[-]\d{1,2}\b/i;
    if(dateRex.test(s)){
        var dateStr = s.match(dateRex)[0];
        try{
            var dateParts = dateStr.split("-");
            var year = dateParts[0] - 0;
            var month = dateParts[1] - 1;
            var day = dateParts[2] - 0;
            value.setFullYear(year,month,day);
        }catch(ex){
            return null;
        }
        var timeRex = /\b\d{1,2}[:]\d{1,2}[:]\d{1,2}\b/i;
        if(timeRex.test(s)){
            var timeStr = s.match(timeRex)[0];
            try{
                var timeParts = timeStr.split(":");
                var hour = timeParts[0] - 0;
                var min = timeParts[1] - 0;
                var sec = timeParts[2] - 0;
                value.setHours(hour,min,sec);
            }catch(ex){

            }
        }
    }else{
        return null;
    }
    return result;
}
//获取当前日期,其时间组成部分设置为 00:00:00 。
DateTime.Today = new DateTime(null, null, null, 0, 0, 0, 0);

//静态字段
DateTime.DaysToMonth365 = [ 0, 0x1f, 0x3b, 90, 120, 0x97, 0xb5, 0xd4, 0xf3, 0x111, 0x130, 0x14e, 0x16d ];
DateTime.DaysToMonth366 = [ 0, 0x1f, 60, 0x5b, 0x79, 0x98, 0xb6, 0xd5, 0xf4, 0x112, 0x131, 0x14f, 0x16e ];