📄 dateutils.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 + -