summaryrefslogtreecommitdiff
path: root/js/dojo-1.7.2/dojox/date/relative.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo-1.7.2/dojox/date/relative.js')
-rw-r--r--js/dojo-1.7.2/dojox/date/relative.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/date/relative.js b/js/dojo-1.7.2/dojox/date/relative.js
new file mode 100644
index 0000000..d97c021
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/date/relative.js
@@ -0,0 +1,92 @@
+//>>built
+define("dojox/date/relative", ["dojo/_base/kernel", "dojo/_base/lang", "dojo/date/locale", "dojo/i18n"], function(dojo, dlang, ddl, i18n){
+
+dojo.getObject("date.relative", true, dojox);
+
+/*=====
+dojox.date.relative.__FormatOptions = function(){
+// locale: String
+// override the locale used to determine formatting rules
+// relativeDate: Date
+// Date to calculate relation to (defaults to new Date())
+// weekCheck: boolean
+// Whether or not to display the day of week (defaults true)
+ this.locale = locale;
+ this.relativeDate = relativeDate;
+ this.weekCheck = weekCheck;
+}
+=====*/
+
+var DAY = 1000*60*60*24,
+ SIX_DAYS = 6 * DAY,
+ del = dojo.delegate,
+ ggb = ddl._getGregorianBundle,
+ fmt = ddl.format;
+
+function _clearTime(date){
+ date = new Date(date);
+ date.setHours(0, 0, 0, 0);
+ return date;
+}
+
+dojox.date.relative.format = function(/*Date*/dateObject, /*dojox.date.relative.__FormatOptions?*/options){
+ // summary:
+ // Format a Date object as a String, using locale-specific settings,
+ // relative to the current date or some other date.
+ //
+ // description:
+ // Create a string from a Date object using the most significant information
+ // and a known localized pattern. This method formats both the date and
+ // time from dateObject. Formatting patterns are chosen appropriate to
+ // the locale.
+ //
+ // If the day portion of the date falls within the current date (or the
+ // relativeDate option, if present), then the time will be all that
+ // is displayed
+ //
+ // If the day portion of the date falls within the past week (or the
+ // week preceeding relativeDate, if present), then the display will show
+ // day of week and time. This functionality can be turned off by setting
+ // weekCheck to false.
+ //
+ // If the year portion of the date falls within the current year (or the
+ // year portion of relativeDate, if present), then the display will show
+ // month and day.
+ //
+ // Otherwise, this function is equivalent to calling dojo.date.format with
+ // formatLength of "medium"
+ //
+ // dateObject:
+ // the date and time to be formatted.
+
+ options = options || {};
+
+ var today = _clearTime(options.relativeDate || new Date()),
+ diff = today.getTime() - _clearTime(dateObject).getTime(),
+ fmtOpts = {locale: options.locale};
+
+ if(diff === 0){
+ // today: 9:32 AM
+ return fmt(dateObject, del(fmtOpts, {selector: "time"}));
+ }else if(diff <= SIX_DAYS && diff > 0 && options.weekCheck !== false){
+ // within the last week: Mon 9:32 am
+ return fmt(dateObject, del(fmtOpts, {selector: "date", datePattern: "EEE"})) +
+ " " +
+ fmt(dateObject, del(fmtOpts, {selector: "time", formatLength: "short"}));
+ }else if(dateObject.getFullYear() == today.getFullYear()){
+ // this year: Nov 1
+ var bundle = ggb(i18n.normalizeLocale(options.locale));
+ return fmt(dateObject, del(fmtOpts, {
+ selector: "date",
+ datePattern: bundle["dateFormatItem-MMMd"]
+ }));
+ }else{
+ // default: Jun 1, 2010
+ return fmt(dateObject, del(fmtOpts, {
+ selector: "date",
+ formatLength: "medium",
+ locale: options.locale
+ }));
+ }
+};
+});