Conrad said:
Here's one simple way to retro-fit a date formatting method. It
implements a subset of formats from strftime(3); the PHP function of the
same name is also similar. Some of the formats are missing, like the
names of months, week days, etc, because they were not required when the
method was written. Note: some of the formats are different from what
you might expect - read the comments and adjust the code as you see fit.
[x] done
Usage:
var d = new Date(2008, 3, 4);
var dstr1 = d.fmt("%m/%d/%Y");
var dstr2 = d.fmt("%d.%m.%Y");
/* a simple date formatting method */
Date.prototype.fmt = function (format) {
var buffer = "";
var chr, nxt;
for (var i = 0, len = format.length; i < len; ++i) {
chr = format.substr(i, 1);
if (chr != "%") {
buffer += chr;
continue;
}
nxt = format.substr(i + 1, 1);
if (nxt == "C") { // 2-digit century (eg "19" or "20")
buffer += String(Math.floor( /* this should be one line */
this.getFullYear() / 100)).padFront("0", 2);
} else if (nxt == "d") { // day of month (01 to 31)
buffer += String(this.getDate()).padFront("0", 2);
} else if (nxt == "F") { // month of year (1 to 12)
buffer += (this.getMonth() + 1);
} else if (nxt == "f") { // day of month (1 to 31)
buffer += this.getDate();
} else if (nxt == "H") { // 24h hours (00 - 23)
buffer += String(this.getHours()).padFront("0", 2);
} else if (nxt == "M") { // minutes (00 - 59)
buffer += String(this.getMinutes()).padFront("0", 2);
} else if (nxt == "m") { // month of year (01 to 12)
buffer += String(this.getMonth() + 1).padFront("0", 2);
} else if (nxt == "n") { // newline
buffer += "\n";
} else if (nxt == "R") { // 24h time (%H:%M)
buffer += String(this.getHours()).padFront("0", 2)
+ ":"
+ String(this.getMinutes()).padFront("0", 2);
} else if (nxt == "S") { // seconds (00 - 59)
buffer += String(this.getSeconds()).padFront("0", 2);
} else if (nxt == "T") { // 24h time (%H:%M:%S)
buffer += String(this.getHours()).padFront("0", 2)
+ ":"
+ String(this.getMinutes()).padFront("0", 2)
+ ":"
+ String(this.getSeconds()).padFront("0", 2);
} else if (nxt == "Y") { // 4-digit year
buffer += this.getFullYear();
} else if (nxt == "y") { // 2-digit year
var y = String(this.getFullYear());
buffer += y.substr(y.length -2, 2);
} else if (nxt == "%") { // literal "%" character
buffer += "%";
} else {
buffer += format.substr(i, 2);
}
++i; // skip next
}
return buffer;
}
Date.prototype.fmt = function(format) {
var d = this;
return format.replace(/%([CdFfHMmnRSTYy%])/g,
function(m, p1) {
switch (p1)
{
case "C": return String(Math.floor(d.getFullYear() / 100))
.padFront("0", 2);
case "d": return String(d.getDate()).padFront("0", 2);
case "F": return d.getMonth() + 1;
case "f": return d.getDate();
case "H": return String(d.getHours()).padFront("0", 2);
case "M": return String(d.getMinutes()).padFront("0", 2);
case "m": return String(d.getMonth() + 1).padFront("0", 2);
case "n": return "\n";
case "R": return String(d.getHours()).padFront("0", 2)
+ ":"
+ String(d.getMinutes()).padFront("0", 2);
case "S": return String(d.getSeconds()).padFront("0", 2);
case "T": return String(d.getHours()).padFront("0", 2)
+ ":"
+ String(d.getMinutes()).padFront("0", 2)
+ ":"
+ String(d.getSeconds()).padFront("0", 2);
case "Y": return d.getFullYear();
case "y": return String(d.getFullYear() % 100).padFront("0", 2);
default: return p1;
}
});
};
PointedEars