1/* 2 * Date prototype extensions. Doesn't depend on any 3 * other code. Doens't overwrite existing methods. 4 * 5 * Adds dayNames, abbrDayNames, monthNames and abbrMonthNames static properties and isLeapYear, 6 * isWeekend, isWeekDay, getDaysInMonth, getDayName, getMonthName, getDayOfYear, getWeekOfYear, 7 * setDayOfYear, addYears, addMonths, addDays, addHours, addMinutes, addSeconds methods 8 * 9 * Copyright (c) 2006 Jörn Zaefferer and Brandon Aaron ([email protected] || http://brandonaaron.net) 10 * 11 * Additional methods and properties added by Kelvin Luck: firstDayOfWeek, dateFormat, zeroTime, asString, fromString - 12 * I've added my name to these methods so you know who to blame if they are broken! 13 * 14 * Dual licensed under the MIT and GPL licenses: 15 * http://www.opensource.org/licenses/mit-license.php 16 * http://www.gnu.org/licenses/gpl.html 17 * 18 */ 19 20/** 21 * An Array of day names starting with Sunday. 22 * 23 * @example dayNames[0] 24 * @result 'Sunday' 25 * 26 * @name dayNames 27 * @type Array 28 * @cat Plugins/Methods/Date 29 */ 30Date.dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; 31 32/** 33 * An Array of abbreviated day names starting with Sun. 34 * 35 * @example abbrDayNames[0] 36 * @result 'Sun' 37 * 38 * @name abbrDayNames 39 * @type Array 40 * @cat Plugins/Methods/Date 41 */ 42Date.abbrDayNames = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']; 43 44/** 45 * An Array of month names starting with Janurary. 46 * 47 * @example monthNames[0] 48 * @result 'January' 49 * 50 * @name monthNames 51 * @type Array 52 * @cat Plugins/Methods/Date 53 */ 54Date.monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; 55 56/** 57 * An Array of abbreviated month names starting with Jan. 58 * 59 * @example abbrMonthNames[0] 60 * @result 'Jan' 61 * 62 * @name monthNames 63 * @type Array 64 * @cat Plugins/Methods/Date 65 */ 66Date.abbrMonthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; 67 68/** 69 * The first day of the week for this locale. 70 * 71 * @name firstDayOfWeek 72 * @type Number 73 * @cat Plugins/Methods/Date 74 * @author Kelvin Luck 75 */ 76Date.firstDayOfWeek = 1; 77 78/** 79 * The format that string dates should be represented as (e.g. 'dd/mm/yyyy' for UK, 'mm/dd/yyyy' for US, 'yyyy-mm-dd' for Unicode etc). 80 * 81 * @name format 82 * @type String 83 * @cat Plugins/Methods/Date 84 * @author Kelvin Luck 85 */ 86Date.format = 'dd/mm/yyyy'; 87//Date.format = 'mm/dd/yyyy'; 88//Date.format = 'yyyy-mm-dd'; 89//Date.format = 'dd mmm yy'; 90 91/** 92 * The first two numbers in the century to be used when decoding a two digit year. Since a two digit year is ambiguous (and date.setYear 93 * only works with numbers < 99 and so doesn't allow you to set years after 2000) we need to use this to disambiguate the two digit year codes. 94 * 95 * @name format 96 * @type String 97 * @cat Plugins/Methods/Date 98 * @author Kelvin Luck 99 */ 100Date.fullYearStart = '20'; 101 102(function() { 103 104 /** 105 * Adds a given method under the given name 106 * to the Date prototype if it doesn't 107 * currently exist. 108 * 109 * @private 110 */ 111 function add(name, method) { 112 if( !Date.prototype[name] ) { 113 Date.prototype[name] = method; 114 } 115 }; 116 117 /** 118 * Checks if the year is a leap year. 119 * 120 * @example var dtm = new Date("01/12/2008"); 121 * dtm.isLeapYear(); 122 * @result true 123 * 124 * @name isLeapYear 125 * @type Boolean 126 * @cat Plugins/Methods/Date 127 */ 128 add("isLeapYear", function() { 129 var y = this.getFullYear(); 130 return (y%4==0 && y%100!=0) || y%400==0; 131 }); 132 133 /** 134 * Checks if the day is a weekend day (Sat or Sun). 135 * 136 * @example var dtm = new Date("01/12/2008"); 137 * dtm.isWeekend(); 138 * @result false 139 * 140 * @name isWeekend 141 * @type Boolean 142 * @cat Plugins/Methods/Date 143 */ 144 add("isWeekend", function() { 145 return this.getDay()==0 || this.getDay()==6; 146 }); 147 148 /** 149 * Check if the day is a day of the week (Mon-Fri) 150 * 151 * @example var dtm = new Date("01/12/2008"); 152 * dtm.isWeekDay(); 153 * @result false 154 * 155 * @name isWeekDay 156 * @type Boolean 157 * @cat Plugins/Methods/Date 158 */ 159 add("isWeekDay", function() { 160 return !this.isWeekend(); 161 }); 162 163 /** 164 * Gets the number of days in the month. 165 * 166 * @example var dtm = new Date("01/12/2008"); 167 * dtm.getDaysInMonth(); 168 * @result 31 169 * 170 * @name getDaysInMonth 171 * @type Number 172 * @cat Plugins/Methods/Date 173 */ 174 add("getDaysInMonth", function() { 175 return [31,(this.isLeapYear() ? 29:28),31,30,31,30,31,31,30,31,30,31][this.getMonth()]; 176 }); 177 178 /** 179 * Gets the name of the day. 180 * 181 * @example var dtm = new Date("01/12/2008"); 182 * dtm.getDayName(); 183 * @result 'Saturday' 184 * 185 * @example var dtm = new Date("01/12/2008"); 186 * dtm.getDayName(true); 187 * @result 'Sat' 188 * 189 * @param abbreviated Boolean When set to true the name will be abbreviated. 190 * @name getDayName
191 * @type String 192 * @cat Plugins/Methods/Date 193 */ 194 add("getDayName", function(abbreviated) { 195 return abbreviated ? Date.abbrDayNames[this.getDay()] : Date.dayNames[this.getDay()]; 196 }); 197 198 /** 199 * Gets the name of the month. 200 * 201 * @example var dtm = new Date("01/12/2008"); 202 * dtm.getMonthName(); 203 * @result 'Janurary' 204 * 205 * @example var dtm = new Date("01/12/2008"); 206 * dtm.getMonthName(true); 207 * @result 'Jan' 208 * 209 * @param abbreviated Boolean When set to true the name will be abbreviated. 210 * @name getDayName 211 * @type String 212 * @cat Plugins/Methods/Date 213 */ 214 add("getMonthName", function(abbreviated) { 215 return abbreviated ? Date.abbrMonthNames[this.getMonth()] : Date.monthNames[this.getMonth()]; 216 }); 217 218 /** 219 * Get the number of the day of the year. 220 * 221 * @example var dtm = new Date("01/12/2008"); 222 * dtm.getDayOfYear(); 223 * @result 11 224 * 225 * @name getDayOfYear 226 * @type Number 227 * @cat Plugins/Methods/Date 228 */ 229 add("getDayOfYear", function() { 230 var tmpdtm = new Date("1/1/" + this.getFullYear()); 231 return Math.floor((this.getTime() - tmpdtm.getTime()) / 86400000); 232 }); 233 234 /** 235 * Get the number of the week of the year. 236 * 237 * @example var dtm = new Date("01/12/2008"); 238 * dtm.getWeekOfYear(); 239 * @result 2 240 * 241 * @name getWeekOfYear 242 * @type Number 243 * @cat Plugins/Methods/Date 244 */ 245 add("getWeekOfYear", function() { 246 return Math.ceil(this.getDayOfYear() / 7); 247 }); 248 249 /** 250 * Set the day of the year. 251 * 252 * @example var dtm = new Date("01/12/2008"); 253 * dtm.setDayOfYear(1); 254 * dtm.toString(); 255 * @result 'Tue Jan 01 2008 00:00:00' 256 * 257 * @name setDayOfYear 258 * @type Date 259 * @cat Plugins/Methods/Date 260 */ 261 add("setDayOfYear", function(day) { 262 this.setMonth(0); 263 this.setDate(day); 264 return this; 265 }); 266 267 /** 268 * Add a number of years to the date object. 269 * 270 * @example var dtm = new Date("01/12/2008"); 271 * dtm.addYears(1); 272 * dtm.toString(); 273 * @result 'Mon Jan 12 2009 00:00:00' 274 * 275 * @name addYears 276 * @type Date 277 * @cat Plugins/Methods/Date 278 */ 279 add("addYears", function(num) { 280 this.setFullYear(this.getFullYear() + num); 281 return this; 282 }); 283 284 /** 285 * Add a number of months to the date object. 286 * 287 * @example var dtm = new Date("01/12/2008"); 288 * dtm.addMonths(1); 289 * dtm.toString(); 290 * @result 'Tue Feb 12 2008 00:00:00' 291 * 292 * @name addMonths 293 * @type Date 294 * @cat Plugins/Methods/Date 295 */ 296 add("addMonths", function(num) { 297 var tmpdtm = this.getDate(); 298 299 this.setMonth(this.getMonth() + num); 300 301 if (tmpdtm > this.getDate()) 302 this.addDays(-this.getDate()); 303 304 return this; 305 }); 306 307 /** 308 * Add a number of days to the date object. 309 * 310 * @example var dtm = new Date("01/12/2008"); 311 * dtm.addDays(1); 312 * dtm.toString(); 313 * @result 'Sun Jan 13 2008 00:00:00' 314 * 315 * @name addDays 316 * @type Date 317 * @cat Plugins/Methods/Date 318 */ 319 add("addDays", function(num) { 320 var timezoneOffsetBefore = this.getTimezoneOffset(), 321 timezoneOffsetAfter; 322 this.setTime(this.getTime() + (num*86400000) ); 323 timezoneOffsetAfter = this.getTimezoneOffset(); 324 325 // If the timezone has changed between days then adjust the time to reflect this 326 if(timezoneOffsetAfter !== timezoneOffsetBefore){ 327 this.setTime(this.getTime() + ((timezoneOffsetAfter-timezoneOffsetBefore) * 60 * 1000)); 328 } 329 return this; 330 }); 331 332 /** 333 * Add a number of hours to the date object. 334 * 335 * @example var dtm = new Date("01/12/2008"); 336 * dtm.addHours(24); 337 * dtm.toString(); 338 * @result 'Sun Jan 13 2008 00:00:00' 339 * 340 * @name addHours 341 * @type Date 342 * @cat Plugins/Methods/Date 343 */ 344 add("addHours", function(num) { 345 this.setHours(this.getHours() + num); 346 return this; 347 }); 348 349 /** 350 * Add a number of minutes to the date object. 351 * 352 * @example var dtm = new Date("01/12/2008"); 353 * dtm.addMinutes(60); 354 * dtm.toString(); 355 * @result 'Sat Jan 12 2008 01:00:00' 356 * 357 * @name addMinutes 358 * @type Date 359 * @cat Plugins/Methods/Date 360 */ 361 add("addMinutes", function(num) { 362 this.setMinutes(this.getMinutes() + num); 363 return this; 364 }); 365 366 /** 367 * Add a number of seconds to the date object. 368 * 369 * @example var dtm = new Date("01/12/2008"); 370 * dtm.addSeconds(60); 371 * dtm.toString(); 372 * @result 'Sat Jan 12 2008 00:01:00' 373 * 374 * @name addSeconds 375 * @type Date 376 * @cat Plugins/Methods/Date 377 */ 378 add("addSeconds", function(num) { 379 this.setSeconds(this.getSeconds() + num); 380 return this; 381 }); 382 383 /** 384 * Sets the time component of this Date to zero for cleaner, easier comparison of dates where time is not relevant. 385 * 386 * @example var dtm = new Date(); 387 * dtm.zeroTime(); 388 * dtm.toString(); 389 * @result 'Sat Jan 12 2008 00:01:00' 390 * 391 * @name zeroTime 392 * @type Date 393 * @cat Plugins/Methods/Date 394 * @author Kelvin Luck 395 */ 396 add("zeroTime", function() { 397 this.setMilliseconds(0); 398 this.setSeconds(0); 399 this.setMinutes(0); 400 this.setHours(0); 401 return this; 402 }); 403 404 /** 405 * Returns a string representation of the date object according to Date.format. 406 * (Date.toString may be used in other places so I purposefully didn't overwrite it) 407 * 408 * @example var dtm = new Date("01/12/2008"); 409 * dtm.asString(); 410 * @result '12/01/2008' // (where Date.format == 'dd/mm/yyyy' 411 * 412 * @name asString 413 * @type Date 414 * @cat Plugins/Methods/Date 415 * @author Kelvin Luck 416 */ 417 add("asString", function(format) { 418 var r = format || Date.format; 419 return r 420 .split('yyyy').join(this.getFullYear()) 421 .split('yy').join((this.getFullYear() + '').substring(2)) 422 .split('dd').join(_zeroPad(this.getDate())) 423 .split('d').join(this.getDate()) 424 .split('DD').join(this.getDayName(false)) 425 .split('D').join(this.getDayName(true)) 426 .split('mmmm').join(this.getMonthName(false)) 427 .split('mmm').join(this.getMonthName(true)) 428 .split('mm').join(_zeroPad(this.getMonth()+1)) 429 .split('hh').join(_zeroPad(this.getHours())) 430 .split('min').join(_zeroPad(this.getMinutes())) 431 .split('ss').join(_zeroPad(this.getSeconds())); 432 }); 433 434 /** 435 * Returns a new date object created from the passed String according to Date.format or false if the attempt to do this results in an invali
435d date object 436 * (We can't simple use Date.parse as it's not aware of locale and I chose not to overwrite it incase it's functionality is being relied on elsewhere) 437 * 438 * @example var dtm = Date.fromString("12/01/2008"); 439 * dtm.toString(); 440 * @result 'Sat Jan 12 2008 00:00:00' // (where Date.format == 'dd/mm/yyyy' 441 * 442 * @name fromString 443 * @type Date 444 * @cat Plugins/Methods/Date 445 * @author Kelvin Luck 446 */ 447 Date.fromString = function(s, format) 448 { 449 var f = format || Date.format, 450 d = new Date('01/01/1977'), 451 mLength = 0, 452 iM, iD, iY, 453 i, mStr; 454 455 iM = f.indexOf('mmmm'); 456 if (iM > -1) { 457 for (i=0; i<Date.monthNames.length; i++) { 458 mStr = s.substr(iM, Date.monthNames[i].length); 459 if (Date.monthNames[i] == mStr) { 460 mLength = Date.monthNames[i].length - 4; 461 break; 462 } 463 } 464 d.setMonth(i); 465 } else { 466 iM = f.indexOf('mmm'); 467 if (iM > -1) { 468 mStr = s.substr(iM, 3); 469 for (i=0; i<Date.abbrMonthNames.length; i++) { 470 if (Date.abbrMonthNames[i] == mStr) break; 471 } 472 d.setMonth(i); 473 } else { 474 d.setMonth(Number(s.substr(f.indexOf('mm'), 2)) - 1); 475 } 476 } 477 478 iY = f.indexOf('yyyy'); 479 480 if (iY > -1) { 481 if (iM < iY) 482 { 483 iY += mLength; 484 } 485 d.setFullYear(Number(s.substr(iY, 4))); 486 } else { 487 if (iM < iY) 488 { 489 iY += mLength; 490 } 491 // TODO - this doesn't work very well - are there any rules for what is meant by a two digit year? 492 d.setFullYear(Number(Date.fullYearStart + s.substr(f.indexOf('yy'), 2))); 493 } 494 iD = f.indexOf('dd'); 495 if (iM < iD) 496 { 497 iD += mLength; 498 } 499 d.setDate(Number(s.substr(iD, 2))); 500 if (isNaN(d.getTime())) { 501 return false; 502 } 503 return d; 504 }; 505 506 // utility method 507 var _zeroPad = function(num) { 508 var s = '0'+num; 509 return s.substring(s.length-2) 510 //return ('0'+num).substring(-2); // doesn't work on IE :( 511 }; 512 513})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.