javascript datetime timespan

/*similar to .NET's DateTime class--slchen
*/
function DateTime() {
    
this.year = 0;
    
this.month = 0;
    
this.day = 0;
    
this.hour = 0;
    
this.minute = 0;
    
this.second = 0;
    
this.millisecond = 0;

    
switch (arguments.length) {
        
case 0:
            
var d = new Date();
            
this.year = d.getFullYear();
            
this.month = d.getMonth() + 1;
            
this.day = d.getDate();
            
this.hour = d.getHours();
            
this.minute = d.getMinutes();
            
this.second = d.getSeconds();
            
this.millisecond = d.getMilliseconds();
            
break;
        
case 1:
            
this.millisecond = arguments[0];
            
break;
        
case 3:
            
this.year = arguments[0];
            
this.month = arguments[1];
            
this.day = arguments[2];
            
break;
        
case 6:
            
this.year = arguments[0];
            
this.month = arguments[1];
            
this.day = arguments[2];
            
this.hour = arguments[3];
            
this.minute = arguments[4];
            
this.second = arguments[5];
            
break;
        
case 7:
            
this.year = arguments[0];
            
this.month = arguments[1];
            
this.day = arguments[2];
            
this.hour = arguments[3];
            
this.minute = arguments[4];
            
this.second = arguments[5];
            
this.millisecond = arguments[6];
            
break;
        
default:
            
throw ("No constructor");
    }

    
this.strings = function () { };
    
this.strings.TimeSeparator = ":";
    
this.strings.DateSeparator = "-";
    
this.strings.SpaceSeparator = " ";

    
this.toString = function () {
        
return this.getDate() + this.strings.SpaceSeparator + this.getTime();
    }


    
this.getDate = function () {
        
return this.year + this.strings.DateSeparator + this.Pad(this.month) + this.strings.DateSeparator + this.Pad(this.day);
    }


    
this.getTime = function () {
        
return this.strings.SpaceSeparator + this.Pad(this.hour) + this.strings.TimeSeparator + this.Pad(this.minute) + this.strings.TimeSeparator + this.Pad(this.second);
    }

    
this.getYear = function () {
        
return this.year;
    }

    
this.getMonth = function () {
        
return this.month;
    }

    
this.getDay = function () {
        
return this.day;
    }

    
this.getHour = function () {
        
return this.hour;
    }

    
this.getMinute = function () {
        
return this.minute;
    }

    
this.getSecond = function () {
        
return this.second;
    }

    
this.span = new Date(this.year, this.month - 1this.day, this.hour, this.minute, this.second, this.millisecond);

    
this.getTick = function () {
        
return new Date(this.year, this.month - 1this.day, this.hour, this.minute, this.second, this.millisecond).getTime();
    }

    
this.CompareTo = function (datetime1) {
        
if (this.getTick() > datetime1.getTick()) return 1;
        
if (this.getTick() == datetime1.getTick()) return 0;
        
if (this.getTick() < datetime1.getTick()) return -1;
    }

    
this.addYears = function (years) {
        
this.span.setYear(this.year + years);
        
var year = this.span.getFullYear();
        
var month = this.span.getMonth() + 1;
        
var day = this.span.getDate();
        
var hour = this.span.getHours();
        
var minute = this.span.getMinutes();
        
var second = this.span.getSeconds();
        
var millisecond = this.span.getMilliseconds();
        
return new DateTime(year, month, day, hour, minute, second, millisecond);
    }

    
this.addMonths = function (months) {
        
this.span.setMonth(this.month - 1 + months);
        
var year = this.span.getFullYear();
        
var month = this.span.getMonth() + 1;
        
var day = this.span.getDate();
        
var hour = this.span.getHours();
        
var minute = this.span.getMinutes();
        
var second = this.span.getSeconds();
        
var millisecond = this.span.getMilliseconds();
        
return new DateTime(year, month, day, hour, minute, second, millisecond);
    }


    
this.addDays = function (days) {
        
this.span.setDate(this.day + days);
        
var year = this.span.getFullYear();
        
var month = this.span.getMonth() + 1;
        
var day = this.span.getDate();
        
var hour = this.span.getHours();
        
var minute = this.span.getMinutes();
        
var second = this.span.getSeconds();
        
var millisecond = this.span.getMilliseconds();
        
return new DateTime(year, month, day, hour, minute, second, millisecond);

    }

    
this.addHours = function (hours) {
        
this.span.setHours(this.hour + hours);
        
var year = this.span.getFullYear();
        
var month = this.span.getMonth() + 1;
        
var day = this.span.getDate();
        
var hour = this.span.getHours();
        
var minute = this.span.getMinutes();
        
var second = this.span.getSeconds();
        
var millisecond = this.span.getMilliseconds();
        
return new DateTime(year, month, day, hour, minute, second, millisecond);
    }

    
this.addMinutes = function (minutes) {
        
this.span.setMinutes(this.minute + minutes);
        
var year = this.span.getFullYear();
        
var month = this.span.getMonth() + 1;
        
var day = this.span.getDate();
        
var hour = this.span.getHours();
        
var minute = this.span.getMinutes();
        
var second = this.span.getSeconds();
        
var millisecond = this.span.getMilliseconds();
        
return new DateTime(year, month, day, hour, minute, second, millisecond);
    }


    
this.addSeconds = function (seconds) {
        
this.span.setSeconds(this.second + seconds);
        
var year = this.span.getFullYear();
        
var month = this.span.getMonth() + 1;
        
var day = this.span.getDate();
        
var hour = this.span.getHours();
        
var minute = this.span.getMinutes();
        
var second = this.span.getSeconds();
        
var millisecond = this.span.getMilliseconds();
        
return new DateTime(year, month, day, hour, minute, second, millisecond);
    }

}

/*prototype extends methods*/
DateTime.prototype.IsLeapYear 
= function (year) {
    
if (((year % 4 == 0&& (year % 100 != 0)) || (year % 400 == 0))
        
return true;
    
return false;
}


DateTime.prototype.DaysInMonth 
= function (year, month) {
    
var monthDays = new Array(0312831303130313130313031);
    
var monthDaysLeapYear = new Array(0312931303130313130313031);
    
if (DateTime.IsLeapYear(year)) {
        
return monthDaysLeapYear[month];
    } 
    
else {
        
return monthDays[month];
    }
}

DateTime.prototype.Pad 
= function (number) {
    
return (number < 10 ? '0' : ''+ number;
}

/* .NET's TimeSpan class*/
function TimeSpan() {

    
this.milliseconds = 0;

    
switch (arguments.length) {
        
case 1:
            
this.milliseconds = arguments[0];
            
break;
        
default:
            
throw ("No constructor");
    }

    
this.totalDays = function () {
        
return this.milliseconds / (24 * 3600 * 1000);
    }

    
this.totalHours = function () {
        
return this.milliseconds / (3600 * 1000);
    }

    
this.totalMinutes = function () {
        
return this.milliseconds / (60 * 1000);
    }

    
this.totalSeconds = function () {
        
return this.milliseconds / 1000;
    }

    
this.totalMilliseconds = function () {
        
return this.milliseconds;
    }
}

 如何使用?

 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  
<html xmlns="http://www.w3.org/1999/xhtml">
  
<head>
  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  
<title>DateTime and TimeSpan </title>
  
<style>
      body 
{screen.css (line 1)
font-family
:verdana,nsimsun,sans-serif;
font-size
:12px;
}
{
background-color
:#EEEEEE;
border
:1px solid #CCCCCC;
padding
:5px;
}
.displaycode 
{screen.css (line 339)
font-family
:Andale Mono,Lucida Console,Monaco,fixed,monospace;
font-size
:11px;
margin-bottom
:0pt;
margin-top
:0pt;
}
  
</style>
  
<script src="datetime.js" type="text/javascript"></script>
  
</head>
  
  
<body>
  
  
<script language="javascript" type="text/javascript">
      
      
function write(a, b){
          
if(!&& !b){
              document.write(
"<p>--------------------------------------------- </p>");
              
return;
          }
          document.write(
"<p>" + a + ": <b>" + b + "</b></p>");
      }
      
      
var now = new DateTime();
      write(
"now ", now);
      write(
"now getTick", now.getTick());
      write(
"now getYear", now.getYear());
      write(
"now getMonth", now.getMonth());
      write(
"now getDay", now.getDay());
      write(
"now getHour", now.getHour());
      write(
"now getMinute", now.getMinute());
      write(
"now getSecond", now.getSecond());
      write(
"now getDate", now.getDate());
      write(
"now getTime", now.getTime());
      write();
      
var now1 = new DateTime(2011,7,23,16,12,12);
      write(
"now1 ", now1);
      write();

      
var now2 = now1.addMinutes(100);
      write(
"now1.addHours(20)", now2);
    
      
var t = new TimeSpan(now2.getTick() - now1.getTick());

      write(
"t.totalDays()", t.totalDays());
      write(
"t.totalHours()", t.totalHours());
      write(
"t.totalMilliseconds()", t.totalMilliseconds());
      write(
"t.totalMinutes()", t.totalMinutes());
      write(
"t.totalSeconds()", t.totalSeconds());
      write(
"now.CompareTo(now1)", now.CompareTo(now1));
    
      
  
</script>
 
  
</body>
  
</html>

 

posted @ 2011-07-22 19:02 ShuLin 阅读(196) 评论(0) 编辑 收藏