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