if (!dojo._hasResource["dojox.date.php"]) { // _hasResource checks added by // build. Do not use _hasResource // directly in your code. dojo._hasResource["dojox.date.php"] = true; dojo.provide("dojox.date.php"); dojo.require("dojo.date"); dojox.date.php.format = function(/* Date */date, /* String */format, /* Object? */ overrides) { // summary: Get a formatted string for a given date object var df = new dojox.date.php.DateFormat(date); return df.format(format, overrides); } dojox.date.php.DateFormat = function(/* Date */date) { this.date = date; } dojo.extend(dojox.date.php.DateFormat, { weekdays : ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], weekdays_3 : ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], months : ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], months_3 : ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], monthdays : [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], format : function(/* String */format, /* Object? */overrides) { // summary: Format the internal date object var parts = []; for (var i = 0; i < format.length; i++) { var chr = format.charAt(i); if (overrides && typeof overrides[chr] == "function") { parts.push(overrides[chr].call(this)); } else if (typeof this[chr] == "function") { parts.push(this[chr]()); } else { parts.push(chr); } } return parts.join(""); }, // Day d : function() { // summary: Day of the month, 2 digits with leading zeros var j = this.j(); return (j.length == 1) ? "0" + j : j; }, D : function() { // summary: A textual representation of a day, three letters return this.weekdays_3[this.date.getDay()]; }, j : function() { // summary: Day of the month without leading zeros return this.date.getDate() + ""; }, l : function() { // summary: A full textual representation of the day of the // week return this.weekdays[this.date.getDay()]; }, N : function() { // summary: ISO-8601 numeric representation of the day of // the week (added in PHP 5.1.0) var w = this.w(); return (!w) ? 7 : w; }, S : function() { // summary: English ordinal suffix for the day of the month, // 2 characters switch (this.date.getDate()) { case 11 : case 12 : case 13 : return "th"; case 1 : case 21 : case 31 : return "st"; case 2 : case 22 : return "nd"; case 3 : case 23 : return "rd"; default : return "th"; } }, w : function() { // summary: Numeric representation of the day of the week return this.date.getDay() + ""; }, z : function() { // summary: The day of the year (starting from 0) var millis = this.date.getTime() - new Date(this.date.getFullYear(), 0, 1).getTime(); return Math.floor(millis / 86400000) + ""; }, // Week W : function() { // summary: ISO-8601 week number of year, weeks starting on // Monday (added in PHP 4.1.0) var week; var jan1_w = new Date(this.date.getFullYear(), 0, 1) .getDay() + 1; var w = this.date.getDay() + 1; var z = parseInt(this.z()); if (z <= (8 - jan1_w) && jan1_w > 4) { var last_year = new Date(this.date.getFullYear() - 1, this.date.getMonth(), this.date.getDate()); if (jan1_w == 5 || (jan1_w == 6 && dojo.date .isLeapYear(last_year))) { week = 53; } else { week = 52; } } else { var i; if (Boolean(this.L())) { i = 366; } else { i = 365; } if ((i - z) < (4 - w)) { week = 1; } else { var j = z + (7 - w) + (jan1_w - 1); week = Math.ceil(j / 7); if (jan1_w > 4) { --week; } } } return week; }, // Month F : function() { // summary: A full textual representation of a month, such // as January or March return this.months[this.date.getMonth()]; }, m : function() { // summary: Numeric representation of a month, with leading // zeros var n = this.n(); return (n.length == 1) ? "0" + n : n; }, M : function() { // summary: A short textual representation of a month, three // letters return months_3[this.date.getMonth()]; }, n : function() { // summary: Numeric representation of a month, without // leading zeros return this.date.getMonth() + 1 + ""; }, t : function() { // summary: Number of days in the given month return (Boolean(this.L()) && this.date.getMonth() == 1) ? 29 : this.monthdays[this.getMonth()]; }, // Year L : function() { // summary: Whether it's a leap year return (dojo.date.isLeapYear(this.date)) ? "1" : "0"; }, o : function() { // summary: // ISO-8601 year number. This has the same value as Y, // except that if // the ISO week number (W) belongs to the previous or next // year, that year is used instead. (added in PHP 5.1.0) // TODO: Figure out what this means }, Y : function() { // summary: A full numeric representation of a year, 4 // digits return this.date.getFullYear() + ""; }, y : function() { // summary: A two digit representation of a year return this.date.getFullYear.substsring(2, 4); }, // Time a : function() { // summary: Lowercase Ante meridiem and Post meridiem return this.date.getHours() >= 12 ? "pm" : "am"; }, b : function() { // summary: Uppercase Ante meridiem and Post meridiem return this.a().toUpperCase(); }, B : function() { // summary: // Swatch Internet time // A day is 1,000 beats. All time is measured from GMT + 1 var off = this.date.getTimezoneOffset() + 60; var secs = (this.date.getHours() * 3600) + (this.date.getMinutes() * 60) + this.getSeconds() + (off * 60); var beat = Math.abs(Math.floor(secs / 86.4) % 1000) + ""; while (beat.length < 2) beat = "0" + beat; return beat; }, g : function() { // summary: 12-hour format of an hour without leading zeros return (this.date.getHours() > 12) ? this.date.getHours() - 12 + "" : this.date.getHours() + ""; }, G : function() { // summary: 24-hour format of an hour without leading zeros return this.date.getHours() + ""; }, h : function() { // summary: 12-hour format of an hour with leading zeros var g = this.g(); return (g.length == 1) ? "0" + g : g; }, H : function() { // summary: 24-hour format of an hour with leading zeros var G = this.G(); return (G.length == 1) ? "0" + G : G; }, i : function() { // summary: Minutes with leading zeros var mins = this.date.getMinutes() + ""; return (mins.length == 1) ? "0" + mins : mins; }, s : function() { // summary: Seconds, with leading zeros var secs = this.date.getSeconds() + ""; return (secs.length == 1) ? "0" + secs : secs; }, // Timezone e : function() { // summary: Timezone identifier (added in PHP 5.1.0) return dojo.date.getTimezoneName(this.date); }, I : function() { // summary: Whether or not the date is in daylight saving // time // TODO: Can dojo.date do this? }, O : function() { // summary: Difference to Greenwich time (GMT) in hours var off = Math.abs(this.date.getTimezoneOffset()); var hours = Math.floor(off / 60) + ""; var mins = (off % 60) + ""; if (hours.length == 1) hours = "0" + hours; if (mins.length == 1) hours = "0" + mins; return ((this.date.getTimezoneOffset() < 0) ? "+" : "-") + hours + mins; }, P : function() { // summary: Difference to Greenwich time (GMT) with colon // between hours and minutes (added in PHP 5.1.3) var O = this.O(); return O.substring(0, 2) + ":" + O.substring(2, 4); }, T : function() { // summary: Timezone abbreviation // Guess... return this.e().substring(0, 3); }, Z : function() { // summary: // Timezone offset in seconds. The offset for timezones west // of UTC is always negative, // and for those east of UTC is always positive. return this.date.getTimezoneOffset() * -60; }, // Full Date/Time c : function() { // summary: ISO 8601 date (added in PHP 5) return this.Y() + "-" + this.m() + "-" + this.d() + "T" + this.h() + ":" + this.i() + ":" + this.s() + this.P(); }, r : function() { // summary: RFC 2822 formatted date return this.D() + ", " + this.d() + " " + this.M() + " " + this.Y() + " " + this.H() + ":" + this.i() + ":" + this.s() + " " + this.O(); }, U : function() { // summary: Seconds since the Unix Epoch (January 1 1970 // 00:00:00 GMT) return Math.floor(this.date.getTime() / 1000); } }); }