驚艷於一個相容於ColdFusion,但是可免費商用的Railo,跌跌撞撞的研究過程,希望能有同好一起交流指教。
2011年6月27日 星期一
ColdFusion常用字串函數
Asc("0") = 48
Asc("A") = 65
Asc("Apple") = 65
Chr 根據所輸入之ASCII Code值(需介於0 – 255),傳回對應之字元。
Chr(65) = "A"
Chr(Asc("A")) = "A"
CJustify 將原字串內容依新的字串長度予以置中對齊。
CJustify("Center", 10) = " Center "
Compare 依據ASCII Code值比較兩個字串大小(大小寫有差別),第一字串大於第二字串,傳回1
第一字串等於第二字串,傳回0
第一字串小於第二字串,傳回-1
Compare("coo", "Coo") = 1
Compare("Abc", "Abc") = 0
Compare("coo", "koo") = -1
CompareNocase 依據ASCII Code值比較兩個字串大小(大小寫沒有差別),傳回值同Compare。
CompareNocase("boo", "Boo") = 0
CompareNocase("boo", "foo") = -1
Find 找尋子字串是否包含於母字串中(大小寫有差別),並可設定母字串搜尋起始位置。若包含於母字串中,則傳回母字串中第一位相同字元之位置,反之,則傳回0。
Find("idf", "Abcidfgh", 1) = 4
Find("idg", "Abcidfgh", 1) = 0
FindNoCase 找尋子字串是否包含於母字串中(大小寫沒有差別),其他同Find。
Find("IDF", "Abcidfgh", 1) = 4
Find("idg", "Abcidfgh", 1) = 0
FindOneOf 找尋子字串集合中之任一字元是否存在於母字串(大小寫有差別),若存在則傳回母字串中第一個相同字元之位置,反之,則回傳0。
FindOneOf("ghd", "abcdefghijk", 1) = 4
FindOneOf("GhD", "abcdefghijk", 1) = 8
Insert 將子字串插入母字串所指定的位置當中。
Insert("abc", "123456789", 4) = "1234abc56789"
Insert("abc", "123456789", 0) = "abc123456789"
LCase 將字串中之英文字母轉換成小寫。
LCase("ColdFusion") = "coldfusion"
LCase("ABCD1234") = "abcd1234"
Left 從母字串之起始位置取出子字串。
Left("ColdFusion", 4) = "Cold"
Left("ColdFusion", 20) = "ColdFusion"
Len 傳回字串長度。
Len("ColdFusion") = 10
Len("Cold" & "Fusion") = 10
Len("") = 0
LJustify 將原字串內容依新的字串長度予以置左對齊。
LJustify("Left", 10) = "Left "
LTrim 去除字串中左邊的空格。
LTrim(" Leetide ") = "Leetide "
Mid 從母字串中取出子字串。
Mid("Dictionary", 3, 4) = "ctio"
Mid("Dictionary", 1, 15) = "Dictionary"
RemoveChars 移除字串中字元。
RemoveChars("ColdFusion", 3, 4) = "Cosion"
RemoveChars("ColdFusion", 3, 15) = "Co"
RepeatString 複製字串於原字串當中。
RepeatString ("ColdFusion", 2) = "ColdFusionColdFusion"
RepeatString ("ColdFusion", 0) = ""
Replace 取代字串中之特定字元(大小寫有差別)。
Replace("CACACA", "C", "Q") = "QACACA"
Replace("CACACA", "C", "Q", "ONE") = "QACACA"
Replace("CACACA", "C", "Q", "ALL") = "QAQAQA"
預設值為"ONE"
ReplaceList 取代字串中之特定字元列(大小寫有差別)。
ReplaceList("CABARET", "CA,BA,T", "SA,DA,K") = "SADAREK"
ReplaceList("CABARET", "CA,BA,T", "TA,DA,K") = "KADAREK" ,其中"CA"先被轉換成"TA",但隨後的"T"又被轉換成"K",故"CA"最終將轉換成"KA",此為Recursive之用法。
ReplaceNoCase 取代字串中之特定字元(大小寫沒有差別)。
Replace("cacaca", "C", "B") = "Bacaca"
Replace("CACACA", "c", "b", "ONE") = "bACACA"
Replace("CACACA", "C", "b", "ALL") = "bAbAbA"
預設值為"ONE"
Reverse 反置字串內容。
Reverse("ABCD") = "DCBA"
Replace("CACACA", "c", "b", "ONE") = "bACACA"
Right從母字串之最後一位字元取出子字串。
Right("ColdFusion", 6) = "Fusion"
Right("ColdFusion", 20) = "ColdFusion"
RJustify 將原字串內容依新的字串長度予以置右對齊。
RJustify("Right", 10) = " Right"
RTrim 去除字串中右邊的空格。
RTrim(" Leetide ") = " Leetide"
SpanExcluding 從字串起始位置依序取出字元,直到有相同特定字元時才停止(大小寫有差別)。
SpanExcluding ("I am happy", "h") = "I am "
SpanExcluding("Book", "b") = "Book"
SpanIncluding 從字串起始位置依序取出字元,直到沒有相同特定字元時才停止(大小寫有差別)。
SpanExcluding ("Sensitivity", "eStinsvy") = "Sensitivity"
SpanExcluding ("Sensitivity", "eStin") = "Sen"
Trim 去除字串中左邊與右邊的空格。
Trim(" Leetide ") = "Leetide"
Trim(" baby face ") = "baby face"
UCase 將字串中之英文字母轉換成大寫。
UCase("ColdFusion") = "COLDFUSION"
UCase("Yankee") = "YANKEE"
Val 將字串轉換成數字,若無法轉換則傳回0。
Val("1290") = 1290
Val("Ghost") = 0
Val("66Ghost") = 66
更多字串函數,可參考Adobe線上文件
2011年1月7日 星期五
ColdFusion函數應用 - 找特定日期
假設有個初始日期
<cfset yourdate = "2011-01-18">
找上週的第一天 (週日)
<CFSET preWeekFirstday = #dateadd("d",-(DayOfWeek(yourdate)+6),yourDate)#>
找上週的最後一天(週六)
<CFSET preWeekEndday = #dateadd("d",-DayOfWeek(yourdate),yourDate)#>
找當週的第一天 (週日)
<CFSET weekFirstday = #dateadd("d",-(DayOfWeek(yourdate)-1),yourDate)#>
找當週的最後一天(週六)
<CFSET weekEndday = #dateadd("d",7-DayOfWeek(yourdate),yourDate)#>
找下週的第一天 (週日)
<CFSET nextWeekFirstday = #dateadd("d",7-(DayOfWeek(yourdate)-1),yourDate)#>
找下週的最後一天(週六)
<CFSET nextWeekEndday = #dateadd("d",14-DayOfWeek(yourdate),yourDate)#>
找某週次的第一天 (週日)
<CFSET weekNum = 5> <!--- 假設要找第五週的資料 --->
<CFSET yearFday = year(yourdate)&"-1-1"> <!--- 該年第一天 --->
<CFSET xFirstday = #dateadd("d",fix((1-DayOfWeek(yearFday))+(weekNum-1)*7),yearFday)#>
找某週次的最後一天(週六)
<CFSET xEndday = #dateadd("d",fix((7-DayOfWeek(yearFday))+(weekNum-1)*7),yearFday)#>
完整程式碼參考:
<!--- 設定初始日期 --->
<cfset yourDate = "2011-01-18">
<!--- 找上週的第一天(週日) --->
<CFSET preWeekFirstday = #dateadd("d",-(DayOfWeek(yourdate)+6),yourDate)#>
<!--- 找上週的最後一天(週六) --->
<CFSET preWeekEndday = #dateadd("d",-DayOfWeek(yourdate),yourDate)#>
<!--- 找當週的第一天(週日) --->
<CFSET weekFirstday = #dateadd("d",-(DayOfWeek(yourdate)-1),yourDate)#>
<!--- 找當週的最後一天(週六) --->
<CFSET weekEndday = #dateadd("d",7-DayOfWeek(yourdate),yourDate)#>
<!--- 找下週的第一天(週日) --->
<CFSET nextWeekFirstday = #dateadd("d",7-(DayOfWeek(yourdate)-1),yourDate)#>
<!--- 找下週的最後一天(週六) --->
<CFSET nextWeekEndday = #dateadd("d",14-DayOfWeek(yourdate),yourDate)#>
<!--- 找該年某週次的第一天(週日) --->
<CFSET weekNum = 5> <!--- 假設要找第五週的資料 --->
<CFSET yearFday = year(yourdate)&"-1-1"> <!--- 該年第一天 --->
<CFSET xFirstday = #dateadd("d",fix((1-DayOfWeek(yearFday))+(weekNum-1)*7),yearFday)#>
<!--- 找該年某週次的最後一天(週六) --->
<CFSET xEndday = #dateadd("d",fix((7-DayOfWeek(yearFday))+(weekNum-1)*7),yearFday)#>
<!--- 找當週週次 --->
<CFSET yourWeek = week(yourdate)>
<!--- 結果輸出 --->
初 始 日 期:#DateFormat(yourdate, "YYYY/MM/DD")# <hr>
上週的第一天 (週日):#DateFormat(preWeekFirstday, "YYYY/MM/DD")# <Br>
上週的最後一天(週六):#DateFormat(preWeekEndday, "YYYY/MM/DD")# <Br><Br>
當週的第一天 (週日):#DateFormat(weekFirstday, "YYYY/MM/DD")# <Br>
當週的最後一天(週六):#DateFormat(weekEndday, "YYYY/MM/DD")# <Br><Br>
下週的第一天 (週日):#DateFormat(nextWeekFirstday, "YYYY/MM/DD")# <Br>
下週的最後一天(週六):#DateFormat(nextWeekEndday, "YYYY/MM/DD")# <Br><Br>
第#weekNum#週的第一天 (週日):#DateFormat(xFirstday, "YYYY/MM/DD")# <Br>
第#weekNum#週的最後一天(週六):#DateFormat(xEndday, "YYYY/MM/DD")# <Br><Br>
當 週 週 次:#yourWeek# <Br>
輸出結果:
ColdFusion時間函數: 常用基本時間(日期)函數
‧Now() = {ts '2011-01-07 12:30:13'}
‧CreateDate(2011, 5, 1) = {ts '2011-05-01 00:00:00'}
‧CreateTime(1, 2, 3) = {ts '1899-12-30 01:02:03'}
‧CreateDateTime(2011,5,1,1,2,3) = {ts'2011-05-01 01:02:03'}
‧CreateODBCDate(now()) = {d '2011-02-01'}
‧CreateODBCTime('2011-1-2 03:04:05') = {t '03:04:05'}
‧CreateODBCDateTime(now()) = {ts '2011-02-01 16:23:02'}
‧ParseDateTime(‘2011-1-2 3:4:5') = {ts'2011-01-02 03:04:05'}
(將字串改成時間物件,括弧中可再加第二個變數’POP’代表格林威治時間,中間須用逗號相隔)
秀出時間變數
‧DateFormat(Now(), 'yyyy/mm/dd') = 2011/01/02
第一個變數須為時間變數,第二個變數可以任意參差d日期小於10者前面不補0、dd日期小於10者前面補0、ddd以英文簡寫顯示日期如Mon表星期一、dddd以英文全名顯示日期如Monday表星期一、m 月份小於10者前面不補0、Mm 月份小於10者前面補0、mmm以英文簡寫顯示月份如Feb表二月、mmmm以英文全名顯示月份如February表二月、y年份小於10者前面不補0、yy年份小於100者前面不補0、yyyy年份以四位數字顯示)
‧TimeFormat(Now(), 'HH:mm:sstt') = 03:04:05AM
第一個變數須為時間變數,第二個變數可以任意參差12小時制的h時數小於10者前面不補0、12小時制的hh日期小於10者前面補0、24小時制的H時數小於10者前面不補0、24小時制的HH時數小於10者前面補0、m分鐘小於10者前面不補0、mm時數小於10者前面補0、s秒數小於10者前面不補0、ss秒數小於10者前面補0、t秀出A或P代表上午或下午、tt秀出AM或PM代表上午或下午)
時間加減
‧DateAdd('d','2011-2-2','5') = {ts'2011-01-28 0:0:0'}
(加-5天,其中第一個參數可使用:yyyy年、q季、m月、y年中的天數、d天、w星期的天數、ww週數、h小時數、n分鐘數和s秒數)
‧DateDiff('d', '2011-2-2','2011-2-3') = 1(兩個日期相差天數,其中第一個參數可使用:yyyy年、q季、m月、y年中的天數、d天、w星期的天數、ww週數、h小時數、n分鐘數和s秒數)
‧DatePart('d', '2011-1-2') = 2(傳回時間變數中的日期,其中第一個參數可使用:yyyy年、q季、m月、y年中的天數、d天、w星期的天數、ww週數、h小時數、n分鐘數和s秒數)
‧DateCompare('2011-1-2', '2011-1-5') = -1(比較兩個日期誰先誰後,結果以-1和+1表示)
‧CreateTimeSpan(1,1,1,1) = 1.04237268519(將日期以浮點數表示,單位是天,四個參數依序是天數、小時、分鐘和秒鐘)
抓取時間變數值:
‧Year(Now()) = 2011(取年份數值)
‧Month('2011-5-1') = 5(取月份數值)
‧Day('2011-1-2 03:04:05') = 2 (該月份的2號)
‧Hour('2011-1-2 03:04:05') = 3 (取小時數值)
‧Minute('03:04:05') = 4 (取分鐘數值)
‧Second('2011-1-2 03:04:05') = 5(取秒鐘數值)
時間排序值:
‧Quarter('2011-2-2 03:04:05') = 1(本年度的第一季)
‧DayOfWeek('2011-1-7 03:04:05') = 6 (該星期的第7天)
‧MonthAsString(8) = August (本年度第8月是August)
‧DayOfWeekAsString('1') = Sunday (1~7代表週日到週六)
‧Week('2011-2-15') (本年度的第8週)
‧DayOfYear('2011-2-2 03:04:05') = 33(本年度的第33天)
‧FirstDayOfMonth(now()) =32(本月初1是本年度第32天)
其他:
‧DaysInYear('2011-2-2 03:04:05') = 356 (本年度有365天)
‧DaysInMonth('2011-2-2 03:04:05') = 28 (本月份的天數)
‧IsNumericDate(now()) =YES(判別是否為有效的數值時間)
‧IsDate('2011-2-31') = NO(判別是否為有效的字串時間)
‧IsLeapYear(Now()) = YES (是否為閏年)
更多時間函數,可參考Adobe線上文件