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 :...