diff iso8601.js @ 0:9ee956af41e3

Initial commit
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Sun, 27 Jun 2010 22:05:12 +0200
parents
children 7cfcd7d5796c
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/iso8601.js
@@ -0,0 +1,82 @@
+/*
+ * Thanks to Paul Sowden for this script.
+ * http://delete.me.uk/2005/03/iso8601.html
+ */
+
+Date.prototype.setISO8601 = function(dString){
+	var d;
+	var regexp = /(\d\d\d\d)(-)?(\d\d)(-)?(\d\d)(T)?(\d\d)(:)?(\d\d)(:)?(\d\d)(\.\d+)?(Z|([+-])(\d\d)(:)?(\d\d))/;
+	if ((d = dString.match(regexp))) {
+		var offset = 0;
+		this.setUTCDate(1);
+		this.setUTCFullYear(parseInt(d[1],10));
+		this.setUTCMonth(parseInt(d[3],10) - 1);
+		this.setUTCDate(parseInt(d[5],10));
+		this.setUTCHours(parseInt(d[7],10));
+		this.setUTCMinutes(parseInt(d[9],10));
+		this.setUTCSeconds(parseInt(d[11],10));
+		if (d[12])
+			this.setUTCMilliseconds(parseFloat(d[12]) * 1000);
+		else
+			this.setUTCMilliseconds(0);
+		if (d[13] != 'Z') {
+			offset = (d[15] * 60) + parseInt(d[17],10);
+			offset *= ((d[14] == '-') ? -1 : 1);
+			this.setTime(this.getTime() - offset * 60 * 1000);
+		}
+	} else
+		this.setTime(Date.parse(dString));
+	return this;
+};
+
+Date.prototype.toString = function (format, offset) {
+	/* accepted values for the format [1-6]:
+	 1 Year:
+	   YYYY (eg 1997)
+	 2 Year and month:
+	   YYYY-MM (eg 1997-07)
+	 3 Complete date:
+	   YYYY-MM-DD (eg 1997-07-16)
+	 4 Complete date plus hours and minutes:
+	   YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
+	 5 Complete date plus hours, minutes and seconds:
+	   YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
+	 6 Complete date plus hours, minutes, seconds and a decimal
+	   fraction of a second
+	   YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)
+	 */
+	if (!format)
+		var format = 5;
+	if (!offset) {
+		var offset = 'Z';
+		var date = this;
+	} else {
+		var d = offset.match(/([-+])([0-9]{2}):([0-9]{2})/);
+		var offsetnum = (Number(d[2]) * 60) + Number(d[3]);
+		offsetnum *= ((d[1] == '-') ? -1 : 1);
+		var date = new Date(Number(Number(this) + (offsetnum * 60000)));
+	}
+
+	var zeropad = function (num) { return ((num < 10) ? '0' : '') + num; };
+
+	var str = "";
+	str += date.getUTCFullYear();
+	if (format > 1)
+		str += "-" + zeropad(date.getUTCMonth() + 1);
+	if (format > 2)
+		str += "-" + zeropad(date.getUTCDate());
+	if (format > 3)
+		str += "T" + zeropad(date.getUTCHours()) +
+			":" + zeropad(date.getUTCMinutes());
+	if (format > 5) {
+		var secs = Number(date.getUTCSeconds() + "." +
+				((date.getUTCMilliseconds() < 100) ? '0' : '') +
+				zeropad(date.getUTCMilliseconds()));
+		str += ":" + zeropad(secs);
+	} else if (format > 4)
+		str += ":" + zeropad(date.getUTCSeconds());
+
+	if (format > 3)
+		str += offset;
+	return str;
+};