2
* Date prototype extensions. Doesn't depend on any
3
* other code. Doens't overwrite existing methods.
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
9
* Copyright (c) 2006 Jörn Zaefferer and Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
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!
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
21
* An Array of day names starting with Sunday.
23
* @example dayNames[0]
28
* @cat Plugins/Methods/Date
30
Date.dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
33
* An Array of abbreviated day names starting with Sun.
35
* @example abbrDayNames[0]
40
* @cat Plugins/Methods/Date
42
Date.abbrDayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
45
* An Array of month names starting with Janurary.
47
* @example monthNames[0]
52
* @cat Plugins/Methods/Date
54
Date.monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
57
* An Array of abbreviated month names starting with Jan.
59
* @example abbrMonthNames[0]
64
* @cat Plugins/Methods/Date
66
Date.abbrMonthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
69
* The first day of the week for this locale.
71
* @name firstDayOfWeek
73
* @cat Plugins/Methods/Date
76
Date.firstDayOfWeek = 1;
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).
83
* @cat Plugins/Methods/Date
86
Date.format = 'dd/mm/yyyy';
87
//Date.format = 'mm/dd/yyyy';
88
//Date.format = 'yyyy-mm-dd';
89
//Date.format = 'dd mmm yy';
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.
97
* @cat Plugins/Methods/Date
100
Date.fullYearStart = '20';
105
* Adds a given method under the given name
106
* to the Date prototype if it doesn't
111
function add(name, method) {
112
if( !Date.prototype[name] ) {
113
Date.prototype[name] = method;
118
* Checks if the year is a leap year.
120
* @example var dtm = new Date("01/12/2008");
126
* @cat Plugins/Methods/Date
128
add("isLeapYear", function() {
129
var y = this.getFullYear();
130
return (y%4==0 && y%100!=0) || y%400==0;
134
* Checks if the day is a weekend day (Sat or Sun).
136
* @example var dtm = new Date("01/12/2008");
142
* @cat Plugins/Methods/Date
144
add("isWeekend", function() {
145
return this.getDay()==0 || this.getDay()==6;
149
* Check if the day is a day of the week (Mon-Fri)
151
* @example var dtm = new Date("01/12/2008");
157
* @cat Plugins/Methods/Date
159
add("isWeekDay", function() {
160
return !this.isWeekend();
164
* Gets the number of days in the month.
166
* @example var dtm = new Date("01/12/2008");
167
* dtm.getDaysInMonth();
170
* @name getDaysInMonth
172
* @cat Plugins/Methods/Date
174
add("getDaysInMonth", function() {
175
return [31,(this.isLeapYear() ? 29:28),31,30,31,30,31,31,30,31,30,31][this.getMonth()];
179
* Gets the name of the day.
181
* @example var dtm = new Date("01/12/2008");
185
* @example var dtm = new Date("01/12/2008");
186
* dtm.getDayName(true);
189
* @param abbreviated Boolean When set to true the name will be abbreviated.
192
* @cat Plugins/Methods/Date
194
add("getDayName", function(abbreviated) {
195
return abbreviated ? Date.abbrDayNames[this.getDay()] : Date.dayNames[this.getDay()];
199
* Gets the name of the month.
201
* @example var dtm = new Date("01/12/2008");
202
* dtm.getMonthName();
205
* @example var dtm = new Date("01/12/2008");
206
* dtm.getMonthName(true);
209
* @param abbreviated Boolean When set to true the name will be abbreviated.
212
* @cat Plugins/Methods/Date
214
add("getMonthName", function(abbreviated) {
215
return abbreviated ? Date.abbrMonthNames[this.getMonth()] : Date.monthNames[this.getMonth()];
219
* Get the number of the day of the year.
221
* @example var dtm = new Date("01/12/2008");
222
* dtm.getDayOfYear();
227
* @cat Plugins/Methods/Date
229
add("getDayOfYear", function() {
230
var tmpdtm = new Date("1/1/" + this.getFullYear());
231
return Math.floor((this.getTime() - tmpdtm.getTime()) / 86400000);
235
* Get the number of the week of the year.
237
* @example var dtm = new Date("01/12/2008");
238
* dtm.getWeekOfYear();
241
* @name getWeekOfYear
243
* @cat Plugins/Methods/Date
245
add("getWeekOfYear", function() {
246
return Math.ceil(this.getDayOfYear() / 7);
250
* Set the day of the year.
252
* @example var dtm = new Date("01/12/2008");
253
* dtm.setDayOfYear(1);
255
* @result 'Tue Jan 01 2008 00:00:00'
259
* @cat Plugins/Methods/Date
261
add("setDayOfYear", function(day) {
268
* Add a number of years to the date object.
270
* @example var dtm = new Date("01/12/2008");
273
* @result 'Mon Jan 12 2009 00:00:00'
277
* @cat Plugins/Methods/Date
279
add("addYears", function(num) {
280
this.setFullYear(this.getFullYear() + num);
285
* Add a number of months to the date object.
287
* @example var dtm = new Date("01/12/2008");
290
* @result 'Tue Feb 12 2008 00:00:00'
294
* @cat Plugins/Methods/Date
296
add("addMonths", function(num) {
297
var tmpdtm = this.getDate();
299
this.setMonth(this.getMonth() + num);
301
if (tmpdtm > this.getDate())
302
this.addDays(-this.getDate());
308
* Add a number of days to the date object.
310
* @example var dtm = new Date("01/12/2008");
313
* @result 'Sun Jan 13 2008 00:00:00'
317
* @cat Plugins/Methods/Date
319
add("addDays", function(num) {
320
//this.setDate(this.getDate() + num);
321
this.setTime(this.getTime() + (num*86400000) );
326
* Add a number of hours to the date object.
328
* @example var dtm = new Date("01/12/2008");
331
* @result 'Sun Jan 13 2008 00:00:00'
335
* @cat Plugins/Methods/Date
337
add("addHours", function(num) {
338
this.setHours(this.getHours() + num);
343
* Add a number of minutes to the date object.
345
* @example var dtm = new Date("01/12/2008");
346
* dtm.addMinutes(60);
348
* @result 'Sat Jan 12 2008 01:00:00'
352
* @cat Plugins/Methods/Date
354
add("addMinutes", function(num) {
355
this.setMinutes(this.getMinutes() + num);
360
* Add a number of seconds to the date object.
362
* @example var dtm = new Date("01/12/2008");
363
* dtm.addSeconds(60);
365
* @result 'Sat Jan 12 2008 00:01:00'
369
* @cat Plugins/Methods/Date
371
add("addSeconds", function(num) {
372
this.setSeconds(this.getSeconds() + num);
377
* Sets the time component of this Date to zero for cleaner, easier comparison of dates where time is not relevant.
379
* @example var dtm = new Date();
382
* @result 'Sat Jan 12 2008 00:01:00'
386
* @cat Plugins/Methods/Date
387
* @author Kelvin Luck
389
add("zeroTime", function() {
390
this.setMilliseconds(0);
398
* Returns a string representation of the date object according to Date.format.
399
* (Date.toString may be used in other places so I purposefully didn't overwrite it)
401
* @example var dtm = new Date("01/12/2008");
403
* @result '12/01/2008' // (where Date.format == 'dd/mm/yyyy'
407
* @cat Plugins/Methods/Date
408
* @author Kelvin Luck
410
add("asString", function(format) {
411
var r = format || Date.format;
412
if (r.split('mm').length>1) { // ugly workaround to make sure we don't replace the m's in e.g. noveMber
413
r = r.split('mmmm').join(this.getMonthName(false))
414
.split('mmm').join(this.getMonthName(true))
415
.split('mm').join(_zeroPad(this.getMonth()+1))
417
r = r.split('m').join(this.getMonth()+1);
419
r = r.split('yyyy').join(this.getFullYear())
420
.split('yy').join((this.getFullYear() + '').substring(2))
421
.split('dd').join(_zeroPad(this.getDate()))
422
.split('d').join(this.getDate());
427
* 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 invalid date object
428
* (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)
430
* @example var dtm = Date.fromString("12/01/2008");
432
* @result 'Sat Jan 12 2008 00:00:00' // (where Date.format == 'dd/mm/yyyy'
436
* @cat Plugins/Methods/Date
437
* @author Kelvin Luck
439
Date.fromString = function(s)
443
var d = new Date('01/01/1970');
445
if (s == '') return d;
450
var r = /(dd?d?|mm?m?|yy?yy?)+([^(m|d|y)])?/g;
452
while ((results = r.exec(f)) != null)
454
switch (results[1]) {
461
matcher += '(\\d+\\d?\\d?\\d?)+';
462
order.push(results[1].substr(0, 1));
465
matcher += '([a-z]{3})';
470
matcher += results[2];
474
var dm = new RegExp(matcher);
475
var result = s.match(dm);
476
for (var i=0; i<order.length; i++) {
477
var res = result[i+1];
483
d.setMonth(Number(res)-1);
486
for (var j=0; j<Date.abbrMonthNames.length; j++) {
487
if (Date.abbrMonthNames[j].toLowerCase() == res) break;
501
var _zeroPad = function(num) {
503
return s.substring(s.length-2)
504
//return ('0'+num).substring(-2); // doesn't work on IE :(
b'\\ No newline at end of file'