webui-aria2/js/libs/dojox/date/relative.js.uncompressed.js
2012-05-01 19:52:07 +08:00

93 lines
3.0 KiB
JavaScript

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