Timespans
by merganser
JavaScript
/**
* Class that handles Date and Time related operations.
* It is very similar to .NET's DateTime class
* Find reference and documentation at: http://menendezpoo.com
*/
//Constructor
function DateTime(){
var year = 0;
var month = 0;
var day = 0;
var hour = 0;
var minute = 0;
var second = 0;
var millisecond = 0;
switch(arguments.length){
case 0:
var d = new Date();
year = d.getFullYear();
month = d.getMonth() + 1;
day = d.getDay();
hour = d.getHours();
minute = d.getMinutes();
second = d.getSeconds();
millisecond = d.getMilliseconds();
break;
case 1:
millisecond = arguments[0];
break;
case 3:
year = arguments[0];
month = arguments[1];
day = arguments[2];
break;
case 6:
year = arguments[0];
month = arguments[1];
day = arguments[2];
hour = arguments[3];
minute = arguments[4];
second = arguments[5];
break;
case 7:
year = arguments[0];
month = arguments[1];
day = arguments[2];
hour = arguments[3];
minute = arguments[4];
second = arguments[5];
millisecond = arguments[6];
break;
default:
throw("No constructor supports " + arguments.length + " arguments");
}
if(!year && !month && !day)
days = 0;
else
days = Math.round(this.absoluteDays(year, month, day));
this.span = new TimeSpan(days, hour, minute, second, millisecond);
};
DateTime.prototype = {
toString : function(){
return this.year() + "/" + TimeSpan.pad(this.month()) + "/" + TimeSpan.pad(this.day()) + " " + this.timeOfDay();
},
/* Methods */
absoluteDays : function(year, month, day){
function div(a,b){ return Math.round(a/b); }
var num = 0;
var num2= 1;
var numArray = !DateTime.isLeapYear(year) ? DateTime.monthDays : DateTime.monthDaysLeapYear;
while(num2 < month){
num += numArray[num2++];
}
return ((((((day - 1) + num) + (365 * (year - 1))) + ((year -1 ) / 4)) - (( year - 1) / 100)) + ((year - 1) / 400));s
},
add :...