/** * Version: 1.0 Alpha-1 * Build Date: 12-Nov-2007 * Copyright (c) 2006-2007, Coolite Inc. (http://www.coolite.com/). All rights reserved. * License: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/. * Website: http://www.datejs.com/ or http://www.coolite.com/datejs/ */ /** ************************************************************** ** SugarPak - Domain Specific Language - Syntactical Sugar ** ************************************************************** */ /** * Gets a date that is set to the current date and time. * @return {Date} The current date and time. */ Date.now = function () { return new Date(); }; /** * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM). * @return {Date} The current date. */ Date.today = function () { return Date.now().clearTime(); }; // private Date.prototype._orient = +1; /** * Moves the date to the next instance of a date as specified by a trailing date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()). * Example

Date.today().next().friday();
Date.today().next().fri();
Date.today().next().march();
Date.today().next().mar();
Date.today().next().week();
* * @return {Date} this */ Date.prototype.next = function () { this._orient = +1; return this; }; /** * Moves the date to the previous instance of a date as specified by a trailing date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()). * Example

Date.today().last().friday();
Date.today().last().fri();
Date.today().last().march();
Date.today().last().mar();
Date.today().last().week();
* * @return {Date} this */ Date.prototype.last = Date.prototype.prev = Date.prototype.previous = function () { this._orient = -1; return this; }; // private Date.prototype._is = false; /** * Performs a equality check when followed by either a month name or day name function. * Example

Date.today().is().friday(); // true|false
Date.today().is().fri();
Date.today().is().march();
Date.today().is().mar();
* * @return {bool} true|false */ Date.prototype.is = function () { this._is = true; return this; }; // private Number.prototype._dateElement = "day"; /** * Creates a new Date (Date.now()) and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year). * Example

// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.
(3).days().fromNow();
(6).months().fromNow();

// Declared Number variables do not require parentheses. 
var n = 6;
n.months().fromNow();
* * @return {Date} A new Date instance */ Number.prototype.fromNow = function () { var c = {}; c[this._dateElement] = this; return Date.now().add(c); }; /** * Creates a new Date (Date.now()) and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year). * Example

// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.
(3).days().ago();
(6).months().ago();

// Declared Number variables do not require parentheses. 
var n = 6;
n.months().ago();
* * @return {Date} A new Date instance */ Number.prototype.ago = function () { var c = {}; c[this._dateElement] = this * -1; return Date.now().add(c); }; // Build dynamic date element, month name and day name functions. (function () { var $D = Date.prototype, $N = Number.prototype; /* Do NOT modify the following string tokens. These tokens are used to build dynamic functions. */ var dx = ("sunday monday tuesday wednesday thursday friday saturday").split(/\s/), mx = ("january february march april may june july august september october november december").split(/\s/), px = ("Millisecond Second Minute Hour Day Week Month Year").split(/\s/), de; // Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()). var df = function (n) { return function () { if (this._is) { this._is = false; return this.getDay() == n; } return this.moveToDayOfWeek(n, this._orient); }; }; for (var i = 0 ; i < dx.length ; i++) { $D[dx[i]] = $D[dx[i].substring(0, 3)] = df(i); } // Create month name functions and abbreviated month name functions (eg. january(), march(), mar()). var mf = function (n) { return function () { if (this._is) { this._is = false; return this.getMonth() === n; } return this.moveToMonth(n, this._orient); }; }; for (var j = 0 ; j < mx.length ; j++) { $D[mx[j]] = $D[mx[j].substring(0, 3)] = mf(j); } // Create date element functions and plural date element functions used with Date (eg. day(), days(), months()). var ef = function (j) { return function () { if (j.substring(j.length - 1) != "s") { j += "s"; } return this["add" + j](this._orient); }; }; // Create date element functions and plural date element functions used with Number (eg. day(), days(), months()). var nf = function (n) { return function () { this._dateElement = n; return this; }; }; for (var k = 0 ; k < px.length ; k++) { de = px[k].toLowerCase(); $D[de] = $D[de + "s"] = ef(px[k]); $N[de] = $N[de + "s"] = nf(de); } }()); /** * Converts the current date instance into a JSON string value. * @return {String} JSON string of date */ Date.prototype.toJSONString = function () { return this.toString("yyyy-MM-ddThh:mm:ssZ"); }; /** * Converts the current date instance to a string using the culture specific shortDatePattern. * @return {String} A string formatted as per the culture specific shortDatePattern */ Date.prototype.toShortDateString = function () { return this.toString(Date.CultureInfo.formatPatterns.shortDatePattern); }; /** * Converts the current date instance to a string using the culture specific longDatePattern. * @return {String} A string formatted as per the culture specific longDatePattern */ Date.prototype.toLongDateString = function () { return this.toString(Date.CultureInfo.formatPatterns.longDatePattern); }; /** * Converts the current date instance to a string using the culture specific shortTimePattern. * @return {String} A string formatted as per the culture specific shortTimePattern */ Date.prototype.toShortTimeString = function () { return this.toString(Date.CultureInfo.formatPatterns.shortTimePattern); }; /** * Converts the current date instance to a string using the culture specific longTimePattern. * @return {String} A string formatted as per the culture specific longTimePattern */ Date.prototype.toLongTimeString = function () { return this.toString(Date.CultureInfo.formatPatterns.longTimePattern); }; /** * Get the ordinal suffix of the current day. * @return {String} "st, "nd", "rd" or "th" */ Date.prototype.getOrdinal = function () { switch (this.getDate()) { case 1: case 21: case 31: return "st"; case 2: case 22: return "nd"; case 3: case 23: return "rd"; default: return "th"; } };