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

📄 dateutils.as

📁 flex 实现的一个showcase 喜欢flex的朋友可以
💻 AS
字号:
package com.teknision.utils{

	import com.teknision.utils.*;

	public class DateUtils{
		
		/////////////////////////////////////////////////////
		
		private static var monthsEngArr:Array=["January","February","March","April","May","June","July","August","September","October","November","December"]
		private static var monthsFrArr:Array=["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"]
		private static var daysEngArr:Array=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]
		private static var daysFrArr:Array=["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"]
		
		private static var commonLangFormatConversions:Array;
		
		//[Read-Only]
		public static var msInSec:Number=1000
		public static var msInMin:Number=msInSec*60
		public static var msInHour:Number=msInMin*60
		public static var msInDay:Number=msInHour*24
		public static var msInWeek:Number=msInDay*7
		/*we cant hardcode ms for months or years because these values are not constant*/
		
		
		
		//////////////////////////////////////////////////////
		
		function DateUtils(){
			//
			
		}
		
		/////////////////////////////////////////////////////
		/*
		Characters that show how ColdFusion displays a date:
		d: Day of the month as digits; no leading zero for single-digit days. 
		dd: Day of the month as digits; leading zero for single-digit days. 
		w: Day of the week as a three-letter abbreviation. 
		ww: Day of the week as its full name. 
		m: Month as digits; no leading zero for single-digit months. 
		mm: Month as digits; leading zero for single-digit months. 
		mmm: Month as a three-letter abbreviation. 
		mmmm: Month as its full name. 
		yy: Year as last two digits; leading zero for years less than 10. 
		yyyy: Year represented by four digits. 
		 */
	
		/*
		-takes a date from flash's date obj
		-will return the date in whatever format you gave it in, only the codes will be replaced
		-ex 'format'="w, mmmm dd, yyyy") retruns Wed, April 05, 2006
		*/
		
		////////////////////////////////////////////////////////////////////////
		
		private static function initLangFormatConversions():void{
			/*
			//with day of week
			"w, mmmm dd, yyyy"-Wed, April 05, 2006
			"w, mmmm d, yyyy"-Wed, April 5, 2006
			"w, mmm dd, yyyy"-Wed, Apr 05, 2006
			"w, mmm d, yyyy"-Wed, Apr 5, 2006
			"ww, mmmm dd, yyyy"-Wednesday, April 05, 2006
			"ww, mmmm d, yyyy"-Wednesday, April 5, 2006
			"ww, mmm dd, yyyy"-Wednesday, Apr 05, 2006
			"ww, mmm d, yyyy"-Wednesday, Apr 5, 2006
			
			//without day of week
			"mmmm dd, yyyy"-April 05, 2006
			"mmmm d, yyyy"-April 5, 2006
			"mmm dd, yyyy"-Apr 05, 2006
			"mmm d, yyyy"-Apr 5, 2006
			
			//numerical
			"m/d/yy"-4/5/06
			"mm/d/yy"-04/5/06
			"m/dd/yy"-4/05/06
			"mm/dd/yy"-04/05/06
			
			*/
			
			commonLangFormatConversions=new Array()
			commonLangFormatConversions.push({eng:"w, mmmm dd, yyyy",fr:"w, le dd mmmm, yyyy"})
			commonLangFormatConversions.push({eng:"w, mmmm d, yyyy",fr:"w, le d mmmm, yyyy"})
			commonLangFormatConversions.push({eng:"w, mmm dd, yyyy",fr:"w, le dd mmm, yyyy"})
			commonLangFormatConversions.push({eng:"w, mmm d, yyyy",fr:"w, le d mmm, yyyy"})
			commonLangFormatConversions.push({eng:"ww, mmmm dd, yyyy",fr:"ww, le dd mmmm, yyyy"})
			commonLangFormatConversions.push({eng:"ww, mmmm d, yyyy",fr:"ww, le d mmmm, yyyy"})
			commonLangFormatConversions.push({eng:"ww, mmm dd, yyyy",fr:"ww, le dd mmm, yyyy"})
			commonLangFormatConversions.push({eng:"ww, mmm d, yyyy",fr:"ww, le d mmm, yyyy"})
			commonLangFormatConversions.push({eng:"mmmm dd, yyyy",fr:"le dd mmmm, yyyy"})
			commonLangFormatConversions.push({eng:"mmmm d, yyyy",fr:"le d mmmm, yyyy"})
			commonLangFormatConversions.push({eng:"mmm dd, yyyy",fr:"le dd mmm, yyyy"})
			commonLangFormatConversions.push({eng:"mmm d, yyyy",fr:"le d mmm, yyyy"})
			commonLangFormatConversions.push({eng:"m/d/yy",fr:"d/m/yy"})
			commonLangFormatConversions.push({eng:"mm/d/yy",fr:"d/mm/yy"})
			commonLangFormatConversions.push({eng:"m/dd/yy",fr:"dd/m/yy"})
			commonLangFormatConversions.push({eng:"mm/dd/yy",fr:"dd/mm/yy"})
		}
		
		
		//////////////////////////////////////////////////////////////////////////
		//FORMATTING
		
		public static function formatDate(dateObj:Date,format:String,language:String):String{//language not incorporated yet
			
			var day:Number;
			var dayStr:String;
			var month:Number;
			var monthStr:String;
			var year:Number;
			var yearStr:String;
			var convertedDate:String;
			var abbrev:String
			
			initLangFormatConversions();
			//decode format
			//determine whether format s verbal or numeric
			var type:String="verbal"
			if(format=="m/d/yy"||format=="mm/d/yy"||format=="m/dd/yy"||format=="mm/dd/yy"){
				type="numeric"
			}
			
			//eng/fr conversions
			//do a check for a few common english formats and make sure theey're formatted correctly for french
			if(language=="french"){
				for(var i:uint=0;i<commonLangFormatConversions.length;i++){
					
					var conversion:Object=commonLangFormatConversions[i]
					if(format==conversion.eng){
						trace("found a match: "+format+", converting to: "+conversion.fr)
						format=conversion.fr
					}
				}
			}
			
			var formatKey:String=format
			//day of week
			//check to see if it has a day of the week in it
			if(StringUtils.contains(formatKey,"w")){
				
				if(StringUtils.contains(formatKey,"ww")){
					//day of week, full
					var weekday:String=getVerbalDayOfWeek(dateObj)
					if(language=="french"){
						weekday=getVerbalDayOfWeek(dateObj,"french")
					} 
					convertedDate=StringUtils.replaceStr(formatKey,"ww",weekday)
				} else if(StringUtils.contains(formatKey,"w")){
					//day of week, 3 letter abbrev
					weekday=getVerbalDayOfWeek(dateObj)
					if(language=="french"){
						weekday=getVerbalDayOfWeek(dateObj,"french")
					}
					
					abbrev=weekday.substr(0,3)
					convertedDate=StringUtils.replaceStr(formatKey,"w",abbrev)
				} 
				formatKey=convertedDate
			}
			
			if(StringUtils.contains(formatKey,"d")){
				if(StringUtils.contains(formatKey,"dd")){
					//day of month, with leading zero
					day=dateObj.getDate();
					
					if(day<10){
						dayStr="0"+day
					}
					convertedDate=StringUtils.replaceStr(formatKey,"dd",dayStr)
				} else if(StringUtils.contains(formatKey,"d")){
					//day of month, no leading zero
					dayStr=dateObj.getDate().toString();
					if(type=="verbal"){
						if(dayStr=="1"){
							dayStr="1er"
						}
					}
					convertedDate=StringUtils.replaceStr(formatKey,"d",dayStr)
				}
				formatKey=convertedDate
			}
			
			//month
			if(StringUtils.contains(formatKey,"m")){
				if(StringUtils.contains(formatKey,"mmmm")){
					monthStr=getVerbalMonth(dateObj);
					if(language=="french"){
						monthStr=getVerbalMonth(dateObj,"french")
					} 
					convertedDate=StringUtils.replaceStr(formatKey,"mmmm",monthStr)
					
				}else if(StringUtils.contains(formatKey,"mmm")){
					monthStr=getVerbalMonth(dateObj)
					if(language=="french"){
						monthStr=getVerbalMonth(dateObj,"french")
					}
					abbrev=monthStr.substr(0,3)
					convertedDate=StringUtils.replaceStr(formatKey,"mmm",abbrev)
				}else if(StringUtils.contains(formatKey,"mm")){
					month=dateObj.getMonth()+1
					if(month<10){
						monthStr="0"+month
					}else{
						monthStr = month.toString();
					}
					convertedDate=StringUtils.replaceStr(formatKey,"mm",monthStr)
				}else if(StringUtils.contains(formatKey,"m")){
					month=dateObj.getMonth()+1;
					monthStr =  month.toString();
					convertedDate=StringUtils.replaceStr(formatKey,"m",monthStr);
				}
				formatKey=convertedDate
			}
			
			//year
			if(StringUtils.contains(formatKey,"y")){
				if(StringUtils.contains(formatKey,"yyyy")){
					yearStr=dateObj.getFullYear().toString();
					convertedDate=StringUtils.replaceStr(formatKey,"yyyy",yearStr)
				} else if(StringUtils.contains(formatKey,"yy")){
					//year abbrev
					yearStr=dateObj.getFullYear().toString();
					abbrev=yearStr.substring(2)
					convertedDate=StringUtils.replaceStr(formatKey,"yy",abbrev)
				}
				formatKey=convertedDate
				
			}
			return formatKey
		}
		
		public static function getVerbalDayOfWeek(dateObj:Date,language:String=null):String{
			var weekDay:String=daysEngArr[dateObj.getDay()]
			if(language=="french"){
				weekDay=daysFrArr[dateObj.getDay()]
			}
			return weekDay
		}
		
		public static function getOrdinalNumber(i_date:Date):String {
			
			var getExt:String = new String();
			
			switch (i_date.date) {
			case 1 :
				getExt = "st";
				break;
			case 21 :
				getExt = "st";
				break;
			case 31 :
				getExt = "st";
				break;
			case 2 :
				getExt = "nd";
				break;
			case 22 :
				getExt = "nd";
				break;
			case 3 :
				getExt = "rd";
				break;
			case 23 :
				getExt = "rd";
				break;
			default :
				getExt = "th";
				break;
			}
			
			return (i_date.date+getExt);

		}
		
		public static function getVerbalMonth(dateObj:Date,language:String=null):String{
			var month:String=monthsEngArr[dateObj.getMonth()]
			if(language=="french"){
				month=monthsFrArr[dateObj.getMonth()]
			}
			return month
		}
		
		//////////////////////////////////////////////////////////////////////
		//DIFF-FINISHED, BUT NOT SURE IF DONE RIGHT,MIGHT NEED TWEAKING
		/*
		returns number of days between 2 dateObjs in a given time period:
		- "milliseconds"
		- "seconds"
		- "minutes"
		- "hours"
		- "days"
		- "weeks"
		- "months"
		- "years"
		 */
		 
		public static function getDateDiff(date1:Date,date2:Date,timeFormat:String):Number{
			var msInDay:Number=86400000
			var NumDate1:Number=date1 as Number
			var NumDate2:Number=date2 as Number
			var diffInMs:Number=Math.floor((Math.abs(NumDate1-NumDate2))); //returns in ms
			var diff:Number=0;
			if(timeFormat==null){
				//return days
				diff=diffInMs/msInDay
			}else if(timeFormat=="milliseconds"){
				diff=diffInMs
			}else if(timeFormat=="seconds"){
				diff=diffInMs/msInSec
			}else if(timeFormat=="minutes"){
				diff=diffInMs/msInMin
			}else if(timeFormat=="hours"){
				diff=diffInMs/msInHour
			}else if(timeFormat=="days"){
				diff=diffInMs/msInDay
			}else if(timeFormat=="weeks"){
				diff=diffInMs/msInWeek
			}else if(timeFormat=="months"){
				var days:Number=diffInMs/msInDay
				var yearDiff:Number;
				var monthDiff:Number;
				//check to see if both days are in the same month
				//or which ones are before and after
				if(date1.getFullYear()==date2.getFullYear()){
					//both dates in same year
					diff=Math.abs(date1.getMonth()-date2.getMonth())
				} else if(date1.getFullYear()<date2.getFullYear()){
					if(date1.getMonth()>date2.getMonth()){
						yearDiff=Math.ceil(date1.getFullYear()-date2.getFullYear())
						monthDiff=Math.abs(date1.getMonth()-date2.getMonth())
						diff=(yearDiff*12)-monthDiff
					}else if(date1.getMonth()<date2.getMonth()){
						yearDiff=Math.ceil(date1.getFullYear()-date2.getFullYear())
						monthDiff=Math.abs(date1.getMonth()-date2.getMonth())
						diff=(yearDiff*12)+monthDiff
					}
				} else if(date1.getFullYear()>date2.getFullYear()){
					if(date1.getMonth()>date2.getMonth()){
						yearDiff=Math.ceil(date1.getFullYear()-date2.getFullYear())
						monthDiff=Math.abs(date1.getMonth()-date2.getMonth())
						diff=(yearDiff*12)+monthDiff
					}else if(date1.getMonth()<date2.getMonth()){
						yearDiff=Math.ceil(date1.getFullYear()-date2.getFullYear())
						monthDiff=Math.abs(date1.getMonth()-date2.getMonth())
						diff=(yearDiff*12)-monthDiff
					}
				}
			}else if(timeFormat=="years"){
				days=diffInMs/msInDay
				diff=days/365
			}
			
			return diff
			
		}
		
		//////////////////////////////////////////////////////////////////////
		//MAX/MIN
		//returns the greater(newer) of and array of date objects
		public static function dateMax(dateObjArr:Array):Date{
			var greatest:Date=dateObjArr[0]
			for(var i:uint=0;i<dateObjArr.length;i++){
				var dateObj:Date=dateObjArr[i]
				if(dateObj>greatest){
					greatest=dateObj
				}
			}
			return greatest
		}
		
		//returns the lesser(older) of an array of date objects
		public static function dateMin(dateObjArr:Array):Date{
			var least:Date=dateObjArr[0]
			for(var i:uint=0;i<dateObjArr.length;i++){
				var dateObj:Date=dateObjArr[i]
				if(dateObj<least){
					least=dateObj
				}
			}
			return least
		}
		
		//////////////////////////////////////////////////////////////////////
		//DAYS IN MONTH
		public static function getDaysInMonth(dateObj:Date):Number{
			var days:Number=0
			var month:Number=dateObj.getMonth()
			//trace("month: "+month)
			if (month==0||month==2||month==4||month==6||month==7||month==9||month==11) {
				days=31;
			} else if (month==3||month==5||month==8||month==10) {
				days=30;
			} else if (month==1) {
				if (isLeapYear(dateObj)) {
				  days=29;
				} else {
				  days=28;
				}
			}
			//trace("days: "+days)
			return (days);
		}
		
		//////////////////////////////////////////////////////////////////////
		//IS A GIVEN YEAR A LEAP YEAR
		
		public static function isLeapYear(val:*):Boolean{//accepts a dateObj or a year written in a String
		/*
		**RULES FOR DETERMINING IF A GIVEN YEAR IS A LEAP YEAR**
		1. Every year evenly divisible by 4 is PROBABLY a leap year
		2. The exception to rule #1 is that every year evenly divisible by 100 is NOT a leap year.
		3. The exception to rule #2 is that every year evenly divisible by 100 that is also evenly divisible by 400 IS a leap year.
	
		*/
			var year:*=val;
			if(typeof(val)=="object"){
				year=val.getFullYear()
			} 
			if (year % 4 == 0) {		
				if (year % 100 == 0) {	
					if(year % 400 == 0){
						trace(year+" is a leap year")
						return (true);
					} else {
						trace(year+" is a not leap year")
						return (false);
					}
				} else {			
					trace(year+" is a leap year")
					return (true);		
				}	
			} else {		
				trace(year+" is a not leap year")
				return (false);	
			}
		}
		
		////////////////////////////////////////////////////////////////////////////
		//RETURNS A DATEOBJ FOR A GIVEN AMOUNT OF TIME BEFORE OR AFTER A GIVEN DATEOBJ
		//TIME PARAMETERS CAN BE POSITIVE OR NEGATIVE
		//NOT TESTED
		
		public static function getNewCalculatedDate(myDate:Date,y:Number,m:Number,w:Number,d:Number,h:Number,min:Number,s:Number,ms:Number):Date{
			
			var dateObj:Date = new Date(myDate);
			
			dateObj.setFullYear(dateObj.getFullYear()+y);
			dateObj.setMonth(dateObj.getMonth()+m)
			dateObj.setDate(dateObj.getDate()+(w*7))
			dateObj.setDate(dateObj.getDate()+d)
			dateObj.setHours(dateObj.getHours()+h);
			dateObj.setMinutes(dateObj.getMinutes()+min);
			dateObj.setSeconds(dateObj.getSeconds()+s)
			dateObj.setMilliseconds(dateObj.getMilliseconds()+ms)
			
			return dateObj
		}
	
	}
}

⌨️ 快捷键说明

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