ASP 日期的加減運(yùn)算實(shí)現(xiàn)代碼
更新時(shí)間:2009年12月15日 13:09:37 作者:
今天在工作中遇到了一個(gè)問題,需要按時(shí)間查詢,可是查詢出來的結(jié)果顯示的不正確。
舉個(gè)例子來說,要查找出2007-10-12至2007-10-31之間在網(wǎng)站上注冊的會員,選擇好日期后,點(diǎn)擊“查詢”按鈕,發(fā)現(xiàn)2007-10-31注冊的會員的信息根本沒有顯示出來,試驗(yàn)了幾次結(jié)果都是一樣。調(diào)試程序發(fā)現(xiàn),原來是在SQL語句這里出現(xiàn)了問題。
SQL語句如下:SELECT * FROM userinfo WHERE regtime >= '2007-10-12' AND regtime <= '2007-10-31'。初看上去這條SQL語句沒有錯(cuò)誤,可是對照數(shù)據(jù)庫中相應(yīng)字段保存的值以后,發(fā)現(xiàn)保存的值并不是簡單的日期形式,而是日期+時(shí)間的形式,即:yyyy-MM-dd HH:mm:ss,這時(shí)SQL語句在判斷regtime和'2007-10-31'的大小時(shí),會認(rèn)為'2007-10-31'寫的不完整,所以不會認(rèn)為這兩個(gè)值是相等的。這可怎么辦呢?
不用著急,ASP為我們提供了日期加減的函數(shù),來幫我們解決這一問題。
1.日期相加
DateAdd 函數(shù)
返回已添加指定時(shí)間間隔的日期。
DateAdd(interval, number, date)
DateAdd 函數(shù)的語法有以下參數(shù)
?。?)interval 必選項(xiàng)。字符串表達(dá)式,表示要添加的時(shí)間間隔。有關(guān)數(shù)值,請參閱“設(shè)置”部分。
?。?)number 必選項(xiàng)。數(shù)值表達(dá)式,表示要添加的時(shí)間間隔的個(gè)數(shù)。數(shù)值表達(dá)式可以是正數(shù)(得到未來的日期)或負(fù)數(shù)(得到過去的日期)。
(3)date 必選項(xiàng)。Variant 或要添加 interval 的表示日期的文字。
設(shè)置
interval 參數(shù)可以有以下值:
設(shè)置 描述
yyyy 年
q 季度
m 月
y 一年的日數(shù)
d 日
w 一周的日數(shù)
ww 周
h 小時(shí)
n 分鐘
s 秒
說明
可用 DateAdd 函數(shù)從日期中添加或減去指定時(shí)間間隔。例如可以使用 DateAdd 從當(dāng)天算起 30 天以后的日期或從現(xiàn)在算起 45 分鐘以后的時(shí)間。要向 date 添加以“日”為單位的時(shí)間間隔,可以使用“一年的日數(shù)”(“y”)、“日”(“d”)或“一周的日數(shù)”(“w”)。
DateAdd 函數(shù)不會返回?zé)o效日期。如下示例將 95 年 1 月 31 日加上一個(gè)月:
NewDate = DateAdd("m", 1, "31-Jan-95")
在這個(gè)示例中,DateAdd 返回 95 年 2 月 28 日,而不是 95 年 2 月 31 日。如果 date 為 96 年 1 月 31 日,則返回 96 年 2 月 29 日,這是因?yàn)?1996 是閏年。
如果計(jì)算的日期是在公元 100 年之前,則會產(chǎn)生錯(cuò)誤。
如果 number 不是 Long 型值,則在計(jì)算前四舍五入為最接近的整數(shù)。
2.日期相減
DateDiff 函數(shù)
返回兩個(gè)日期之間的時(shí)間間隔。
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
DateDiff 函數(shù)的語法有以下參數(shù):
?。?)interval 必選項(xiàng)。字符串表達(dá)式,表示用于計(jì)算 date1 和 date2 之間的時(shí)間間隔。有關(guān)數(shù)值,請參閱“設(shè)置”部分。
(2)date1, date2 必選項(xiàng)。日期表達(dá)式。用于計(jì)算的兩個(gè)日期。
?。?)Firstdayofweek 可選項(xiàng)。指定星期中第一天的常數(shù)。如果沒有指定,則默認(rèn)為星期日。有關(guān)數(shù)值,請參閱“設(shè)置”部分。
?。?)Firstweekofyear 可選項(xiàng)。指定一年中第一周的常數(shù)。如果沒有指定,則默認(rèn)為 1 月 1 日所在的星期。有關(guān)數(shù)值,請參閱“設(shè)置”部分。
設(shè)置
interval 參數(shù)可以有以下值:
設(shè)置 描述
yyyy 年
q 季度
m 月
y 一年的日數(shù)
d 日
w 一周的日數(shù)
ww 周
h 小時(shí)
n 分鐘
s 秒
firstdayofweek 參數(shù)可以有以下值:
常數(shù) 值 描述
vbUseSystem 0 使用區(qū)域語言支持 (NLS) API 設(shè)置。
vbSunday 1 星期日(默認(rèn))
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六
firstweekofyear 參數(shù)可以有以下值:
常數(shù) 值 描述
vbUseSystem 0 使用區(qū)域語言支持 (NLS) API 設(shè)置。
vbFirstJan1 1 由 1 月 1 日所在的星期開始(默認(rèn))。
vbFirstFourDays 2 由在新年中至少有四天的第一周開始。
vbFirstFullWeek 3 由在新的一年中第一個(gè)完整的周開始。
說明
DateDiff 函數(shù)用于判斷在兩個(gè)日期之間存在的指定時(shí)間間隔的數(shù)目。例如可以使用 DateDiff 計(jì)算兩個(gè)日期相差的天數(shù),或者當(dāng)天到當(dāng)年最后一天之間的星期數(shù)。
要計(jì)算 date1 和 date2 相差的天數(shù),可以使用“一年的日數(shù)”(“y”)或“日”(“d”)。當(dāng) interval 為“一周的日數(shù)”(“w”)時(shí),DateDiff 返回兩個(gè)日期之間的星期數(shù)。如果 date1 是星期一,則 DateDiff 計(jì)算到 date2 之前星期一的數(shù)目。此結(jié)果包含 date2 而不包含 date1。如果 interval 是“周”(“ww”),則 DateDiff 函數(shù)返回日歷表中兩個(gè)日期之間的星期數(shù)。函數(shù)計(jì)算 date1 和 date2 之間星期日的數(shù)目。如果 date2 是星期日,DateDiff 將計(jì)算 date2,但即使 date1 是星期日,也不會計(jì)算 date1。
如果 date1 晚于 date2,則 DateDiff 函數(shù)返回負(fù)數(shù)。
firstdayofweek 參數(shù)會對使用“w”和“ww”間隔符號的計(jì)算產(chǎn)生影響。
如果 date1 或 date2 是日期文字,則指定的年度會成為日期的固定部分。但是如果 date1 或 date2 被包括在引號 (" ") 中并且省略年份,則在代碼中每次計(jì)算 date1 或 date2 表達(dá)式時(shí),將插入當(dāng)前年份。這樣就可以編寫適用于不同年份的程序代碼。
在 interval 為“年”(“yyyy”)時(shí),比較 12 月 31 日和來年的 1 月 1 日,雖然實(shí)際上只相差一天,DateDiff 返回 1 表示相差一個(gè)年份。
SQL語句如下:SELECT * FROM userinfo WHERE regtime >= '2007-10-12' AND regtime <= '2007-10-31'。初看上去這條SQL語句沒有錯(cuò)誤,可是對照數(shù)據(jù)庫中相應(yīng)字段保存的值以后,發(fā)現(xiàn)保存的值并不是簡單的日期形式,而是日期+時(shí)間的形式,即:yyyy-MM-dd HH:mm:ss,這時(shí)SQL語句在判斷regtime和'2007-10-31'的大小時(shí),會認(rèn)為'2007-10-31'寫的不完整,所以不會認(rèn)為這兩個(gè)值是相等的。這可怎么辦呢?
不用著急,ASP為我們提供了日期加減的函數(shù),來幫我們解決這一問題。
1.日期相加
DateAdd 函數(shù)
返回已添加指定時(shí)間間隔的日期。
DateAdd(interval, number, date)
DateAdd 函數(shù)的語法有以下參數(shù)
?。?)interval 必選項(xiàng)。字符串表達(dá)式,表示要添加的時(shí)間間隔。有關(guān)數(shù)值,請參閱“設(shè)置”部分。
?。?)number 必選項(xiàng)。數(shù)值表達(dá)式,表示要添加的時(shí)間間隔的個(gè)數(shù)。數(shù)值表達(dá)式可以是正數(shù)(得到未來的日期)或負(fù)數(shù)(得到過去的日期)。
(3)date 必選項(xiàng)。Variant 或要添加 interval 的表示日期的文字。
設(shè)置
interval 參數(shù)可以有以下值:
設(shè)置 描述
yyyy 年
q 季度
m 月
y 一年的日數(shù)
d 日
w 一周的日數(shù)
ww 周
h 小時(shí)
n 分鐘
s 秒
說明
可用 DateAdd 函數(shù)從日期中添加或減去指定時(shí)間間隔。例如可以使用 DateAdd 從當(dāng)天算起 30 天以后的日期或從現(xiàn)在算起 45 分鐘以后的時(shí)間。要向 date 添加以“日”為單位的時(shí)間間隔,可以使用“一年的日數(shù)”(“y”)、“日”(“d”)或“一周的日數(shù)”(“w”)。
DateAdd 函數(shù)不會返回?zé)o效日期。如下示例將 95 年 1 月 31 日加上一個(gè)月:
NewDate = DateAdd("m", 1, "31-Jan-95")
在這個(gè)示例中,DateAdd 返回 95 年 2 月 28 日,而不是 95 年 2 月 31 日。如果 date 為 96 年 1 月 31 日,則返回 96 年 2 月 29 日,這是因?yàn)?1996 是閏年。
如果計(jì)算的日期是在公元 100 年之前,則會產(chǎn)生錯(cuò)誤。
如果 number 不是 Long 型值,則在計(jì)算前四舍五入為最接近的整數(shù)。
2.日期相減
DateDiff 函數(shù)
返回兩個(gè)日期之間的時(shí)間間隔。
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
DateDiff 函數(shù)的語法有以下參數(shù):
?。?)interval 必選項(xiàng)。字符串表達(dá)式,表示用于計(jì)算 date1 和 date2 之間的時(shí)間間隔。有關(guān)數(shù)值,請參閱“設(shè)置”部分。
(2)date1, date2 必選項(xiàng)。日期表達(dá)式。用于計(jì)算的兩個(gè)日期。
?。?)Firstdayofweek 可選項(xiàng)。指定星期中第一天的常數(shù)。如果沒有指定,則默認(rèn)為星期日。有關(guān)數(shù)值,請參閱“設(shè)置”部分。
?。?)Firstweekofyear 可選項(xiàng)。指定一年中第一周的常數(shù)。如果沒有指定,則默認(rèn)為 1 月 1 日所在的星期。有關(guān)數(shù)值,請參閱“設(shè)置”部分。
設(shè)置
interval 參數(shù)可以有以下值:
設(shè)置 描述
yyyy 年
q 季度
m 月
y 一年的日數(shù)
d 日
w 一周的日數(shù)
ww 周
h 小時(shí)
n 分鐘
s 秒
firstdayofweek 參數(shù)可以有以下值:
常數(shù) 值 描述
vbUseSystem 0 使用區(qū)域語言支持 (NLS) API 設(shè)置。
vbSunday 1 星期日(默認(rèn))
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六
firstweekofyear 參數(shù)可以有以下值:
常數(shù) 值 描述
vbUseSystem 0 使用區(qū)域語言支持 (NLS) API 設(shè)置。
vbFirstJan1 1 由 1 月 1 日所在的星期開始(默認(rèn))。
vbFirstFourDays 2 由在新年中至少有四天的第一周開始。
vbFirstFullWeek 3 由在新的一年中第一個(gè)完整的周開始。
說明
DateDiff 函數(shù)用于判斷在兩個(gè)日期之間存在的指定時(shí)間間隔的數(shù)目。例如可以使用 DateDiff 計(jì)算兩個(gè)日期相差的天數(shù),或者當(dāng)天到當(dāng)年最后一天之間的星期數(shù)。
要計(jì)算 date1 和 date2 相差的天數(shù),可以使用“一年的日數(shù)”(“y”)或“日”(“d”)。當(dāng) interval 為“一周的日數(shù)”(“w”)時(shí),DateDiff 返回兩個(gè)日期之間的星期數(shù)。如果 date1 是星期一,則 DateDiff 計(jì)算到 date2 之前星期一的數(shù)目。此結(jié)果包含 date2 而不包含 date1。如果 interval 是“周”(“ww”),則 DateDiff 函數(shù)返回日歷表中兩個(gè)日期之間的星期數(shù)。函數(shù)計(jì)算 date1 和 date2 之間星期日的數(shù)目。如果 date2 是星期日,DateDiff 將計(jì)算 date2,但即使 date1 是星期日,也不會計(jì)算 date1。
如果 date1 晚于 date2,則 DateDiff 函數(shù)返回負(fù)數(shù)。
firstdayofweek 參數(shù)會對使用“w”和“ww”間隔符號的計(jì)算產(chǎn)生影響。
如果 date1 或 date2 是日期文字,則指定的年度會成為日期的固定部分。但是如果 date1 或 date2 被包括在引號 (" ") 中并且省略年份,則在代碼中每次計(jì)算 date1 或 date2 表達(dá)式時(shí),將插入當(dāng)前年份。這樣就可以編寫適用于不同年份的程序代碼。
在 interval 為“年”(“yyyy”)時(shí),比較 12 月 31 日和來年的 1 月 1 日,雖然實(shí)際上只相差一天,DateDiff 返回 1 表示相差一個(gè)年份。
相關(guān)文章
實(shí)例分析之用ASP編程實(shí)現(xiàn)網(wǎng)絡(luò)內(nèi)容快速查找的代碼
實(shí)例分析之用ASP編程實(shí)現(xiàn)網(wǎng)絡(luò)內(nèi)容快速查找的代碼...2007-03-03Microsoft JET Database Engine(0x80004005)未指定錯(cuò)誤的解決方法
今天在配置iis asp運(yùn)行環(huán)境的時(shí)候提示Microsoft JET Database Engine(0x80004005)未指定錯(cuò)誤,不過最后通過如下方法解決了,這里腳本之家小編特為大家分享下,方便需要的朋友2014-06-06asp控制xml數(shù)據(jù)庫的經(jīng)典代碼
本文為大家分享了六段經(jīng)典的asp控制xml數(shù)據(jù)庫代碼,感興趣的小伙伴們可以參考一下2015-09-09不用模板只用ASP+FSO生成靜態(tài)HTML頁的一個(gè)方法
不用模板只用ASP+FSO生成靜態(tài)HTML頁的一個(gè)方法...2006-09-09asp連接mysql數(shù)據(jù)庫詳細(xì)實(shí)現(xiàn)代碼
文章詳細(xì)的介紹在asp中如何來連接mysql數(shù)據(jù)庫并查出數(shù)據(jù)并輸出,同時(shí)也介紹了連接mysql核心代碼及中文亂碼解決辦法2012-04-04