1563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfunction arrayExists(array, x) { 2563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (var i = 0; i < array.length; i++) { 3563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (array[i] == x) return true; 4563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 5563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 6563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 7563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 8563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkDate.prototype.formatDate = function (input,time) { 9563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // formatDate : 10563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // a PHP date like function, for formatting date strings 11563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // See: http://www.php.net/date 12563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // 13563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // input : format string 14563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // time : epoch time (seconds, and optional) 15563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // 16563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // if time is not passed, formatting is based on 17563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // the current "this" date object's set time. 18563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // 19563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // supported: 20563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // a, A, B, d, D, F, g, G, h, H, i, j, l (lowercase L), L, 21563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // m, M, n, O, r, s, S, t, U, w, W, y, Y, z 22563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // 23563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // unsupported: 24563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // I (capital i), T, Z 25563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 26563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var switches = ["a", "A", "B", "d", "D", "F", "g", "G", "h", "H", 27563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "i", "j", "l", "L", "m", "M", "n", "O", "r", "s", 28563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "S", "t", "U", "w", "W", "y", "Y", "z"]; 29563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var daysLong = ["Sunday", "Monday", "Tuesday", "Wednesday", 30563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "Thursday", "Friday", "Saturday"]; 31563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var daysShort = ["Sun", "Mon", "Tue", "Wed", 32563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "Thu", "Fri", "Sat"]; 33563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var monthsShort = ["Jan", "Feb", "Mar", "Apr", 34563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "May", "Jun", "Jul", "Aug", "Sep", 35563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "Oct", "Nov", "Dec"]; 36563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var monthsLong = ["January", "February", "March", "April", 37563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "May", "June", "July", "August", "September", 38563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "October", "November", "December"]; 39563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var daysSuffix = ["st", "nd", "rd", "th", "th", "th", "th", // 1st - 7th 40563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "th", "th", "th", "th", "th", "th", "th", // 8th - 14th 41563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "th", "th", "th", "th", "th", "th", "st", // 15th - 21st 42563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "nd", "rd", "th", "th", "th", "th", "th", // 22nd - 28th 43563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "th", "th", "st"]; // 29th - 31st 44563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 45563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function a() { 46563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Lowercase Ante meridiem and Post meridiem 47563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return self.getHours() > 11? "pm" : "am"; 48563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 49563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function A() { 50563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Uppercase Ante meridiem and Post meridiem 51563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return self.getHours() > 11? "PM" : "AM"; 52563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 53563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 54563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function B(){ 55563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Swatch internet time. code simply grabbed from ppk, 56563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // since I was feeling lazy: 57563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // http://www.xs4all.nl/~ppk/js/beat.html 58563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var off = (self.getTimezoneOffset() + 60)*60; 59563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var theSeconds = (self.getHours() * 3600) + 60563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (self.getMinutes() * 60) + 61563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark self.getSeconds() + off; 62563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var beat = Math.floor(theSeconds/86.4); 63563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (beat > 1000) beat -= 1000; 64563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (beat < 0) beat += 1000; 65563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((""+beat).length == 1) beat = "00"+beat; 66563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ((""+beat).length == 2) beat = "0"+beat; 67563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return beat; 68563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 69563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 70563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function d() { 71563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Day of the month, 2 digits with leading zeros 72563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new String(self.getDate()).length == 1? 73563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "0"+self.getDate() : self.getDate(); 74563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 75563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function D() { 76563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // A textual representation of a day, three letters 77563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return daysShort[self.getDay()]; 78563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 79563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function F() { 80563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // A full textual representation of a month 81563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return monthsLong[self.getMonth()]; 82563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 83563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function g() { 84563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // 12-hour format of an hour without leading zeros 85563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return self.getHours() > 12? self.getHours()-12 : self.getHours(); 86563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 87563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function G() { 88563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // 24-hour format of an hour without leading zeros 89563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return self.getHours(); 90563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 91563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function h() { 92563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // 12-hour format of an hour with leading zeros 93563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (self.getHours() > 12) { 94563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var s = new String(self.getHours()-12); 95563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s.length == 1? 96563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "0"+ (self.getHours()-12) : self.getHours()-12; 97563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 98563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var s = new String(self.getHours()); 99563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return s.length == 1? 100563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "0"+self.getHours() : self.getHours(); 101563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 102563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 103563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function H() { 104563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // 24-hour format of an hour with leading zeros 105563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new String(self.getHours()).length == 1? 106563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "0"+self.getHours() : self.getHours(); 107563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 108563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function i() { 109563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Minutes with leading zeros 110563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new String(self.getMinutes()).length == 1? 111563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "0"+self.getMinutes() : self.getMinutes(); 112563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 113563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function j() { 114563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Day of the month without leading zeros 115563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return self.getDate(); 116563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 117563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function l() { 118563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // A full textual representation of the day of the week 119563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return daysLong[self.getDay()]; 120563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 121563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function L() { 122563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // leap year or not. 1 if leap year, 0 if not. 123563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // the logic should match iso's 8601 standard. 124563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var y_ = Y(); 125563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ( 126563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (y_ % 4 == 0 && y_ % 100 != 0) || 127563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (y_ % 4 == 0 && y_ % 100 == 0 && y_ % 400 == 0) 128563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ) { 129563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return 1; 130563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 131563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return 0; 132563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 133563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 134563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function m() { 135563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Numeric representation of a month, with leading zeros 136563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return self.getMonth() < 9? 137563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "0"+(self.getMonth()+1) : 138563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark self.getMonth()+1; 139563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 140563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function M() { 141563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // A short textual representation of a month, three letters 142563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return monthsShort[self.getMonth()]; 143563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 144563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function n() { 145563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Numeric representation of a month, without leading zeros 146563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return self.getMonth()+1; 147563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 148563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function O() { 149563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Difference to Greenwich time (GMT) in hours 150563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var os = Math.abs(self.getTimezoneOffset()); 151563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var h = ""+Math.floor(os/60); 152563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var m = ""+(os%60); 153563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark h.length == 1? h = "0"+h:1; 154563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark m.length == 1? m = "0"+m:1; 155563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return self.getTimezoneOffset() < 0 ? "+"+h+m : "-"+h+m; 156563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 157563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function r() { 158563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // RFC 822 formatted date 159563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var r; // result 160563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Thu , 21 Dec 2000 161563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark r = D() + ", " + j() + " " + M() + " " + Y() + 162563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // 16 : 01 : 07 +0200 163563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark " " + H() + ":" + i() + ":" + s() + " " + O(); 164563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return r; 165563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 166563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function S() { 167563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // English ordinal suffix for the day of the month, 2 characters 168563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return daysSuffix[self.getDate()-1]; 169563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 170563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function s() { 171563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Seconds, with leading zeros 172563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return new String(self.getSeconds()).length == 1? 173563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "0"+self.getSeconds() : self.getSeconds(); 174563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 175563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function t() { 176563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 177563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // thanks to Matt Bannon for some much needed code-fixes here! 178563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var daysinmonths = [null,31,28,31,30,31,30,31,31,30,31,30,31]; 179563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (L()==1 && n()==2) return 29; // leap day 180563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return daysinmonths[n()]; 181563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 182563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function U() { 183563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT) 184563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return Math.round(self.getTime()/1000); 185563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 186563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function W() { 187563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Weeknumber, as per ISO specification: 188563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // http://www.cl.cam.ac.uk/~mgk25/iso-time.html 189563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 190563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // if the day is three days before newyears eve, 191563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // there's a chance it's "week 1" of next year. 192563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // here we check for that. 193563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var beforeNY = 364+L() - z(); 194563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var afterNY = z(); 195563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var weekday = w()!=0?w()-1:6; // makes sunday (0), into 6. 196563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (beforeNY <= 2 && weekday <= 2-beforeNY) { 197563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return 1; 198563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 199563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // similarly, if the day is within threedays of newyears 200563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // there's a chance it belongs in the old year. 201563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ny = new Date("January 1 " + Y() + " 00:00:00"); 202563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var nyDay = ny.getDay()!=0?ny.getDay()-1:6; 203563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ( 204563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (afterNY <= 2) && 205563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (nyDay >=4) && 206563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark (afterNY >= (6-nyDay)) 207563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ) { 208563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Since I'm not sure we can just always return 53, 209563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // i call the function here again, using the last day 210563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // of the previous year, as the date, and then just 211563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // return that week. 212563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var prevNY = new Date("December 31 " + (Y()-1) + " 00:00:00"); 213563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return prevNY.formatDate("W"); 214563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 215563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 216563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // week 1, is the week that has the first thursday in it. 217563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // note that this value is not zero index. 218563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (nyDay <= 3) { 219563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // first day of the year fell on a thursday, or earlier. 220563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return 1 + Math.floor( ( z() + nyDay ) / 7 ); 221563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 222563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // first day of the year fell on a friday, or later. 223563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return 1 + Math.floor( ( z() - ( 7 - nyDay ) ) / 7 ); 224563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 225563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 226563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function w() { 227563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Numeric representation of the day of the week 228563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return self.getDay(); 229563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 230563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 231563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function Y() { 232563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // A full numeric representation of a year, 4 digits 233563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 234563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // we first check, if getFullYear is supported. if it 235563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // is, we just use that. ppks code is nice, but wont 236563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // work with dates outside 1900-2038, or something like that 237563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (self.getFullYear) { 238563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var newDate = new Date("January 1 2001 00:00:00 +0000"); 239563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var x = newDate .getFullYear(); 240563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (x == 2001) { 241563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // i trust the method now 242563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return self.getFullYear(); 243563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 244563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 245563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // else, do this: 246563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // codes thanks to ppk: 247563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // http://www.xs4all.nl/~ppk/js/introdate.html 248563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var x = self.getYear(); 249563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var y = x % 100; 250563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark y += (y < 38) ? 2000 : 1900; 251563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return y; 252563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 253563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function y() { 254563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // A two-digit representation of a year 255563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var y = Y()+""; 256563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return y.substring(y.length-2,y.length); 257563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 258563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark function z() { 259563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // The day of the year, zero indexed! 0 through 366 260563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var t = new Date("January 1 " + Y() + " 00:00:00"); 261563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var diff = self.getTime() - t.getTime(); 262563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return Math.floor(diff/1000/60/60/24); 263563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 264563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 265563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var self = this; 266563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (time) { 267563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // save time 268563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var prevTime = self.getTime(); 269563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark self.setTime(time); 270563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 271563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 272563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ia = input.split(""); 273563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var ij = 0; 274563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (ia[ij]) { 275563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (ia[ij] == "\\") { 276563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // this is our way of allowing users to escape stuff 277563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ia.splice(ij,1); 278563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else { 279563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (arrayExists(switches,ia[ij])) { 280563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ia[ij] = eval(ia[ij] + "()"); 281563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 282563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 283563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ij++; 284563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 285563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // reset time, back to what it was 286563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (prevTime) { 287563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark self.setTime(prevTime); 288563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 289563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return ia.join(""); 290563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 291563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 292563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvar date = new Date("1/1/2007 1:11:11"); 293563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 294563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkfor (i = 0; i < 500; ++i) { 295563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var shortFormat = date.formatDate("Y-m-d"); 296563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark var longFormat = date.formatDate("l, F d, Y g:i:s A"); 297563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark date.setTime(date.getTime() + 84266956); 298563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 299563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 300