Parse Convert Time Stamp

For Ajax lovers everywhere. From Twitter, or anywhere

by efwjames

JavaScript

// UTC time
var str = "Sun, 17 Feb 2013 23:53:34 +0000";

function parseTime(timestr) {
	var dateoffset = 0;
	//convert time
	var time = parseFloat((timestr.substr(-14, 10)).replace(/:/gi, ""));
	var localoffset = (new Date().getTimezoneOffset() / 60) * 10000;
	var newtime = time - localoffset;
	var ampm = "am";
	if (newtime <= 0) {
		newtime = newtime + 120000;
		ampm = "pm";
		dateoffset = 1;
	};
	if (newtime >= 120000) {
		newtime = newtime - 120000;
		ampm = "pm";
	};
	newtime = Math.abs(newtime).toString();
	if (newtime.length <= 5) {
		newtime = newtime.charAt(0) + newtime.charAt(-4) + ":" + newtime.substr(-4, 2) + ":" + newtime.substr(-2, 2);
	} else {
		newtime = newtime.substr(-6, 2) + ":" + newtime.substr(-4, 2) + ":" + newtime.substr(-2, 2);
	}
	//convert date
	var day = timestr.substr(0, 3);
	var numeral = timestr.substr(5, 2);
	var month = timestr.substr(8, 3);
	var year = timestr.substr(12, 4);

	var week = ["Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat"];

	var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "July", "Aug", "Sept", "Oct", "Nov", "Dec"];

	if (dateoffset == 1) {
		for (var i in week) {
			if (week[i] == day) {
				var target = i - 1;
				target = (i == 0) ? 6 : target;
				day = week[target];
			};
		}
		numeral = numeral - 1;
		if (numeral == 1) { // first day previous
			for (var i in months) {
				if (months[i] == months) {
					var target = i - 1;
					target = (i == 0) ? 11 : target;
					month = months[target];
				};
			}
			numeral = daysInMonth(month, year);
		};
	};

	function daysInMonth(month, year) {
		return new Date(year, month, 0).getDate();
	}

	return day + ' ' + month + ' ' + numeral + ' ' + year + ' ' + newtime + ' ' + ampm;

}


var what = parseTime(str);
document.write(what);