From: Alan Knowles Date: Thu, 11 Aug 2011 10:37:20 +0000 (+0000) Subject: Date.format support for 'P' - by Bo Fussing X-Git-Url: http://git.roojs.org/?p=roojs1;a=commitdiff_plain;h=e524653d5754a37f684a6b67e27bbd23e6a85858 Date.format support for 'P' - by Bo Fussing --- diff --git a/Date.js b/Date.js index 365334de50..88904904f4 100644 --- a/Date.js +++ b/Date.js @@ -48,6 +48,7 @@ Format Output Description i 05 Minutes with leading zeros s 01 Seconds, with leading zeros O -0600 Difference to Greenwich time (GMT) in hours + P -06:00 Difference to Greenwich time (GMT) with colon between hours and minutes T CST Timezone setting of the machine running the code Z -21600 Timezone offset in seconds (negative if west of UTC, positive if east) @@ -214,6 +215,8 @@ Date.getFormatCode = function(character) { return "String.leftPad(this.getSeconds(), 2, '0') + "; case "O": return "this.getGMTOffset() + "; + case "P": + return "this.getGMTColonOffset() + "; case "T": return "this.getTimezone() + "; case "Z": @@ -426,6 +429,17 @@ Date.formatCodeToRegex = function(character, currentGroup) { " (sn + String.leftPad(hr, 2, 0) + String.leftPad(mn, 2, 0)) : null;\n" ].join(""), s:"([+\-]\\d{4})"}; + case "P": + return {g:1, + c:[ + "o = results[", currentGroup, "];\n", + "var sn = o.substring(0,1);\n", + "var hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60);\n", + "var mn = o.substring(4,6) % 60;\n", + "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))?\n", + " (sn + String.leftPad(hr, 2, 0) + String.leftPad(mn, 2, 0)) : null;\n" + ].join(""), + s:"([+\-]\\d{4})"}; case "T": return {g:0, c:null, @@ -460,6 +474,18 @@ Date.prototype.getGMTOffset = function() { + String.leftPad(this.getTimezoneOffset() % 60, 2, "0"); }; +/** + * Get the offset from GMT of the current date (equivalent to the format specifier 'P'). + * @return {String} 2-characters representing hours and 2-characters representing minutes + * seperated by a colon and prefixed with + or - (e.g. '-06:00') + */ +Date.prototype.getGMTColonOffset = function() { + return (this.getTimezoneOffset() > 0 ? "-" : "+") + + String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset() / 60)), 2, "0") + + ":" + + String.leftPad(this.getTimezoneOffset() %60, 2, "0"); +} + /** * Get the numeric day number of the year, adjusted for leap year. * @return {Number} 0 through 364 (365 in leap years) @@ -775,4 +801,4 @@ Date.prototype.add = function(interval, value){ break; } return d; -}; \ No newline at end of file +};