12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- 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
- }));
- }
- };
- });
|