⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 format.js

📁 struts hibernet spring
💻 JS
📖 第 1 页 / 共 2 页
字号:
/*	Copyright (c) 2004-2006, The Dojo Foundation	All Rights Reserved.	Licensed under the Academic Free License version 2.1 or above OR the	modified BSD license. For more information on Dojo licensing, see:		http://dojotoolkit.org/community/licensing.shtml*/dojo.provide("dojo.date.format");dojo.require("dojo.date.common");dojo.require("dojo.date.supplemental");dojo.require("dojo.lang.array");dojo.require("dojo.lang.common");dojo.require("dojo.lang.func");dojo.require("dojo.string.common");dojo.require("dojo.i18n.common");// Load the bundles containing localization information for// names and formatsdojo.requireLocalization("dojo.i18n.calendar", "gregorian");dojo.requireLocalization("dojo.i18n.calendar", "gregorianExtras");//NOTE: Everything in this module assumes Gregorian calendars.// Other calendars will be implemented in separate modules.(function(){dojo.date.format = function(/*Date*/dateObject, /*Object?*/options){//// summary://		Format a Date object as a String, using locale-specific settings.//// description://		Create a string from a Date object using a known localized pattern.//		By default, this method formats both date and time from dateObject.//		Formatting patterns are chosen appropriate to the locale.  Different//		formatting lengths may be chosen, with "full" used by default.//		Custom patterns may be used or registered with translations using//		the addCustomBundle method.//		Formatting patterns are implemented using the syntax described at//		http://www.unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns//// dateObject://		the date and/or time to be formatted.  If a time only is formatted,//		the values in the year, month, and day fields are irrelevant.  The//		opposite is true when formatting only dates.//// options: object {selector: string, formatLength: string, datePattern: string, timePattern: string, locale: string}//		selector- choice of timeOnly,dateOnly (default: date and time)//		formatLength- choice of long, short, medium or full (plus any custom additions).  Defaults to 'full'//		datePattern,timePattern- override pattern with this string//		am,pm- override strings for am/pm in times//		locale- override the locale used to determine formatting rules//	if(typeof options == "string"){		dojo.deprecated("dojo.date.format", "To format dates with POSIX-style strings, please use dojo.date.strftime instead", "0.5");		return dojo.date.strftime(dateObject, options);	}	// Format a pattern without literals	function formatPattern(dateObject, pattern){		return pattern.replace(/[a-zA-Z]+/g, function(match){			var s;			var c = match.charAt(0);			var l = match.length;			var pad;			var widthList = ["abbr", "wide", "narrow"];			switch(c){				case 'G':					if(l>3){dojo.unimplemented("Era format not implemented");}					s = info.eras[dateObject.getFullYear() < 0 ? 1 : 0];					break;				case 'y':					s = dateObject.getFullYear();					switch(l){						case 1:							break;						case 2:							s = String(s).substr(-2);							break;						default:							pad = true;					}					break;				case 'Q':				case 'q':					s = Math.ceil((dateObject.getMonth()+1)/3);					switch(l){						case 1: case 2:							pad = true;							break;						case 3:						case 4:							dojo.unimplemented("Quarter format not implemented");					}					break;				case 'M':				case 'L':					var m = dateObject.getMonth();					var width;					switch(l){						case 1: case 2:							s = m+1; pad = true;							break;						case 3: case 4: case 5:							width = widthList[l-3];							break;					}					if(width){						var type = (c == "L") ? "standalone" : "format";						var prop = ["months",type,width].join("-");						s = info[prop][m];					}					break;				case 'w':					var firstDay = 0;					s = dojo.date.getWeekOfYear(dateObject, firstDay); pad = true;					break;				case 'd':					s = dateObject.getDate(); pad = true;					break;				case 'D':					s = dojo.date.getDayOfYear(dateObject); pad = true;					break;				case 'E':				case 'e':				case 'c': // REVIEW: don't see this in the spec?					var d = dateObject.getDay();					var width;					switch(l){						case 1: case 2:							if(c == 'e'){								var first = dojo.date.getFirstDayOfWeek(options.locale);								d = (d-first+7)%7;							}							if(c != 'c'){								s = d+1; pad = true;								break;							}							// else fallthrough...						case 3: case 4: case 5:							width = widthList[l-3];							break;					}					if(width){						var type = (c == "c") ? "standalone" : "format";						var prop = ["days",type,width].join("-");						s = info[prop][d];					}					break;				case 'a':					var timePeriod = (dateObject.getHours() < 12) ? 'am' : 'pm';					s = info[timePeriod];					break;				case 'h':				case 'H':				case 'K':				case 'k':					var h = dateObject.getHours();					// strange choices in the date format make it impossible to write this succinctly					switch (c) {						case 'h': // 1-12							s = (h % 12) || 12;							break;						case 'H': // 0-23							s = h;							break;						case 'K': // 0-11							s = (h % 12);							break;						case 'k': // 1-24							s = h || 24;							break;					}					pad = true;					break;				case 'm':					s = dateObject.getMinutes(); pad = true;					break;				case 's':					s = dateObject.getSeconds(); pad = true;					break;				case 'S':					s = Math.round(dateObject.getMilliseconds() * Math.pow(10, l-3));					break;				case 'v': // FIXME: don't know what this is. seems to be same as z?				case 'z':					// We only have one timezone to offer; the one from the browser					s = dojo.date.getTimezoneName(dateObject);					if(s){break;}					l=4;					// fallthrough... use GMT if tz not available				case 'Z':					var offset = dateObject.getTimezoneOffset();					var tz = [						(offset<=0 ? "+" : "-"),						dojo.string.pad(Math.floor(Math.abs(offset)/60), 2),						dojo.string.pad(Math.abs(offset)% 60, 2)					];					if(l==4){						tz.splice(0, 0, "GMT");						tz.splice(3, 0, ":");					}					s = tz.join("");					break;				case 'Y':				case 'u':				case 'W':				case 'F':				case 'g':				case 'A':					dojo.debug(match+" modifier not yet implemented");					s = "?";					break;				default:					dojo.raise("dojo.date.format: invalid pattern char: "+pattern);			}			if(pad){ s = dojo.string.pad(s, l); }			return s;		});	}	options = options || {};	var locale = dojo.hostenv.normalizeLocale(options.locale);	var formatLength = options.formatLength || 'full';	var info = dojo.date._getGregorianBundle(locale);	var str = [];	var sauce = dojo.lang.curry(this, formatPattern, dateObject);	if(options.selector != "timeOnly"){		var datePattern = options.datePattern || info["dateFormat-"+formatLength];		if(datePattern){str.push(_processPattern(datePattern, sauce));}	}	if(options.selector != "dateOnly"){		var timePattern = options.timePattern || info["timeFormat-"+formatLength];		if(timePattern){str.push(_processPattern(timePattern, sauce));}	}	var result = str.join(" "); //TODO: use locale-specific pattern to assemble date + time	return result; /*String*/};dojo.date.parse = function(/*String*/value, /*Object?*/options){//// summary://		Convert a properly formatted string to a primitive Date object,//		using locale-specific settings.//// description://		Create a Date object from a string using a known localized pattern.//		By default, this method parses looking for both date and time in the string.//		Formatting patterns are chosen appropriate to the locale.  Different//		formatting lengths may be chosen, with "full" used by default.//		Custom patterns may be used or registered with translations using//		the addCustomBundle method.//		Formatting patterns are implemented using the syntax described at//		http://www.unicode.org/reports/tr35/#Date_Format_Patterns//// value://		A string representation of a date//// options: object {selector: string, formatLength: string, datePattern: string, timePattern: string, locale: string, strict: boolean}//		selector- choice of timeOnly, dateOnly, dateTime (default: dateOnly)//		formatLength- choice of long, short, medium or full (plus any custom additions).  Defaults to 'full'//		datePattern,timePattern- override pattern with this string//		am,pm- override strings for am/pm in times//		locale- override the locale used to determine formatting rules//		strict- strict parsing, off by default//	options = options || {};	var locale = dojo.hostenv.normalizeLocale(options.locale);	var info = dojo.date._getGregorianBundle(locale);	var formatLength = options.formatLength || 'full';	if(!options.selector){ options.selector = 'dateOnly'; }	var datePattern = options.datePattern || info["dateFormat-" + formatLength];	var timePattern = options.timePattern || info["timeFormat-" + formatLength];	var pattern;	if(options.selector == 'dateOnly'){		pattern = datePattern;	}	else if(options.selector == 'timeOnly'){		pattern = timePattern;	}else if(options.selector == 'dateTime'){		pattern = datePattern + ' ' + timePattern; //TODO: use locale-specific pattern to assemble date + time	}else{		var msg = "dojo.date.parse: Unknown selector param passed: '" + options.selector + "'.";		msg += " Defaulting to date pattern.";		dojo.debug(msg);		pattern = datePattern;	}	var groups = [];	var dateREString = _processPattern(pattern, dojo.lang.curry(this, _buildDateTimeRE, groups, info, options));	var dateRE = new RegExp("^" + dateREString + "$");	var match = dateRE.exec(value);	if(!match){		return null;	}	var widthList = ['abbr', 'wide', 'narrow'];	//1972 is a leap year.  We want to avoid Feb 29 rolling over into Mar 1,	//in the cases where the year is parsed after the month and day.	var result = new Date(1972, 0);	var expected = {};	for(var i=1; i<match.length; i++){		var grp=groups[i-1];		var l=grp.length;		var v=match[i];		switch(grp.charAt(0)){			case 'y':				if(l != 2){					//interpret year literally, so '5' would be 5 A.D.					result.setFullYear(v);					expected.year = v;				}else{					if(v<100){						v = Number(v);						//choose century to apply, according to a sliding window						//of 80 years before and 20 years after present year						var year = '' + new Date().getFullYear();						var century = year.substring(0, 2) * 100;						var yearPart = Number(year.substring(2, 4));						var cutoff = Math.min(yearPart + 20, 99);						var num = (v < cutoff) ? century + v : century - 100 + v;						result.setFullYear(num);						expected.year = num;					}else{						//we expected 2 digits and got more...						if(options.strict){							return null;						}						//interpret literally, so '150' would be 150 A.D.						//also tolerate '1950', if 'yyyy' input passed to 'yy' format						result.setFullYear(v);						expected.year = v;					}				}				break;			case 'M':				if (l>2) {					if(!options.strict){						//Tolerate abbreviating period in month part						v = v.replace(/\./g,'');						//Case-insensitive						v = v.toLowerCase();					}					var months = info['months-format-' + widthList[l-3]].concat();					for (var j=0; j<months.length; j++){						if(!options.strict){							//Case-insensitive							months[j] = months[j].toLowerCase();						}						if(v == months[j]){							result.setMonth(j);							expected.month = j;							break;						}					}					if(j==months.length){						dojo.debug("dojo.date.parse: Could not parse month name: '" + v + "'.");						return null;					}				}else{					result.setMonth(v-1);					expected.month = v-1;				}				break;			case 'E':			case 'e':				if(!options.strict){					//Case-insensitive					v = v.toLowerCase();				}				var days = info['days-format-' + widthList[l-3]].concat();				for (var j=0; j<days.length; j++){					if(!options.strict){						//Case-insensitive						days[j] = days[j].toLowerCase();					}					if(v == days[j]){						//TODO: not sure what to actually do with this input,						//in terms of setting something on the Date obj...?						//without more context, can't affect the actual date						break;					}				}				if(j==days.length){					dojo.debug("dojo.date.parse: Could not parse weekday name: '" + v + "'.");					return null;				}				break;				case 'd':				result.setDate(v);				expected.date = v;				break;			case 'a': //am/pm				var am = options.am || info.am;				var pm = options.pm || info.pm;				if(!options.strict){					v = v.replace(/\./g,'').toLowerCase();					am = am.replace(/\./g,'').toLowerCase();					pm = pm.replace(/\./g,'').toLowerCase();				}				if(options.strict && v != am && v != pm){					dojo.debug("dojo.date.parse: Could not parse am/pm part.");					return null;				}				var hours = result.getHours();				if(v == pm && hours < 12){					result.setHours(hours + 12); //e.g., 3pm -> 15				} else if(v == am && hours == 12){					result.setHours(0); //12am -> 0				}				break;			case 'K': //hour (1-24)				if(v==24){v=0;}				// fallthrough...			case 'h': //hour (1-12)			case 'H': //hour (0-23)			case 'k': //hour (0-11)				//TODO: strict bounds checking, padding				if(v>23){					dojo.debug("dojo.date.parse: Illegal hours value");					return null;				}				//in the 12-hour case, adjusting for am/pm requires the 'a' part				//which for now we will assume always comes after the 'h' part				result.setHours(v);				break;			case 'm': //minutes				result.setMinutes(v);				break;			case 's': //seconds				result.setSeconds(v);				break;			case 'S': //milliseconds				result.setMilliseconds(v);				break;			default:				dojo.unimplemented("dojo.date.parse: unsupported pattern char=" + grp.charAt(0));		}	}	//validate parse date fields versus input date fields	if(expected.year && result.getFullYear() != expected.year){		dojo.debug("Parsed year: '" + result.getFullYear() + "' did not match input year: '" + expected.year + "'.");		return null;	}	if(expected.month && result.getMonth() != expected.month){		dojo.debug("Parsed month: '" + result.getMonth() + "' did not match input month: '" + expected.month + "'.");		return null;	}	if(expected.date && result.getDate() != expected.date){		dojo.debug("Parsed day of month: '" + result.getDate() + "' did not match input day of month: '" + expected.date + "'.");		return null;	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -