vb获取当天的公历节日并显示倒计时
1、辅助函数:获取某月第几个星期几:
'判断某月的第几个星期几,实例:getweek(2016,9,2,0),表示2016年9月的第二个星期日的日期是多少
Function getweek(year As Integer, yue As Integer, num As Integer, week As Integer) As String
Dim day As String '月份的天数
For I = 1 To 7
If Weekday(year & "-" & yue & "-" & I) - 1 = week Then
day = I '第1个星期几的日期
End If
Next I
For I = 1 To num - 1
day = day + 7 '第num个星期几的日期
Next I
'修正,防止出现如32号的错误信息
Select Case yue
Case 1, 3, 5, 7, 8, 10, 12 '31天的月数
If day > 31 Then
getweek = ""
Else
getweek = Format(year & "-" & yue & "-" & day, "yyyy-mm-dd")
End If
Case 4, 6, 9, 11 '30天的月数
If day > 30 Then
getweek = ""
Else
getweek = Format(year & "-" & yue & "-" & day, "yyyy-mm-dd")
End If
Case 2 '平闰月
Dim temp As Integer
temp = 28
If year Mod 100 = 0 And year Mod 400 = 0 Then
temp = 29
End If
If year Mod 100 <> 0 And year Mod 4 = 0 Then
temp = 29
End If
If day > temp Then
getweek = ""
Else
getweek = Format(year & "-" & yue & "-" & day, "yyyy-mm-dd")
End If
End Select
End Function
2、主要函数:
'应用:xqjr(2016,10,1,"1")
Function xqjr(myyear As Integer, month As Integer, day As Integer, myms As String) As String
'myms:0表示返回节日或者空;1表示返回节日或者距离节日多少天
Dim riqi As String
Dim tempriqi(9 To 2000) As String, s As String, j As Integer
j = 9
riqi = Format(myyear & "-" & month & "-" & day, "yyyy-mm-dd")
Dim tsjr(1 To 500) As String '节日日期
Dim jierimc(1 To 500) As String '节日名称
'以下为特殊节日,某月的第几个星期几的节日
tsjr(1) = getweek(myyear, 11, 4, 4) '感恩节
tsjr(2) = getweek(myyear, 5, 2, 0) '母亲节
tsjr(3) = getweek(myyear, 6, 3, 0) '父亲节
tsjr(4) = getweek(myyear, 9, 3, 2) '国际和平日
tsjr(5) = getweek(myyear, 9, 4, 0) '国际聋人节
tsjr(6) = getweek(myyear, 5, 3, 0) '全国助残节
tsjr(7) = getweek(myyear, 9, 3, 6) '全国国防教育日
tsjr(8) = getweek(myyear, 10, 2, 3) '国际减轻自然灾害
jrmc = Array("感恩节", "母亲节", "父亲节", "国际和平日", "国际聋人节", "全国助残节", "全国国防教育日", "国际减轻自然灾害")
For I = 1 To 8 '将特殊节日名称正规化
jierimc(I) = jrmc(I - 1)
Next I
If Dir(App.Path & "/festival.txt") <> "" Then '加载文件中更多节日信息
Open App.Path & "/festival.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, s
If s <> "" And Left(s, 1) = "&" Then
tempriqi(j) = Right(s, Len(s) - 1)
j = j + 1
End If
Loop
Close #1
Dim tempyue As String, tempri As String, tempjieri As String '解读节日数据信息
Dim t(1 To 3) As Integer
For I = 9 To j
If InStr(tempriqi(I), "月") <> 0 And InStr(tempriqi(I), "日") <> 0 And InStr(tempriqi(I), "-") <> 0 Then
t(1) = InStr(tempriqi(I), "月")
t(2) = InStr(tempriqi(I), "日")
t(3) = InStr(tempriqi(I), "-")
tempyue = Left(tempriqi(I), t(1) - 1)
tempri = Mid(tempriqi(I), t(1) + 1, t(2) - t(1) - 1)
tempjieri = Right(tempriqi(I), Len(tempriqi(I)) - t(3))
tsjr(I) = Format(myyear & "-" & tempyue & "-" & tempri, "yyyy-mm-dd")
jierimc(I) = tempjieri
End If
Next I
End If
'完成加载所有节日信息
'此时注释:tsjr(1 to 500) 为节日日期;jierimc(1 To 500) 为对应节日名称
Select Case myms
Case "0" '模式0,表示结果只返回节日或者空
xqjr = ""
For I = 1 To j
If riqi = tsjr(I) Then
xqjr = jierimc(I)
Exit Function
End If
Next I
Case "1" '模式1,表示提示距离最近的节日有多少天
Dim min As Integer, myday As Integer
Dim sjc(1 To 500) As Integer
For I = 1 To j - 1 '计算所有节日的时间差
If DateDiff("d", riqi, tsjr(I)) >= 0 Then
sjc(I) = DateDiff("d", riqi, tsjr(I))
Else
sjc(I) = 365
End If
Next I
min = sjc(1)
For I = 1 To j - 1 '找出最小时间差的节日
If min >= sjc(I) Then
min = sjc(I)
myday = I
End If
Next I
Select Case min '时间差(天数)判断
Case 0
xqjr = "今天是" & jierimc(myday)
Case 1
xqjr = "明天为" & jierimc(myday)
Case 2
xqjr = "后天为" & jierimc(myday)
Case Else
xqjr = "距离" & jierimc(myday) & "还有" & min & "天"
End Select
End Select
End Function
3、一.上述函数没有任何文件的前提下,只能显示八个特殊的节日,如感恩节、父亲节等
二.如果需要添加更多的节日,请在程序目录添加festival.txt文件,里面存放更多的节日信息
格式如:&1月1日-元旦
三.附录节日信息:
&1月1日-元旦
&2月2日-世界湿地日
&2月14日-情人节
&3月3日-全国爱耳日
&3月5日-青年志愿者服务日
&3月8日-国际妇女节
&3月9日-保护母亲河日
&3月12日-中国植树节
&3月14日-白色情人节
&3月14日-国际警察日
&3月15日-世界消费者权益日
&3月21日-世界森林日
&3月22日-世界水日
&3月23日-世界气象日
&3月24日-世界防治结核病日
&4月1日-愚人节
&4月5日-清明节
&4月7日-世界卫生日
&4月22日-世界地球日
&4月26日-世界知识产权日
&5月1日-国际劳动节
&5月3日-世界哮喘日
&5月4日-中国青年节
&5月8日-世界红十字日
&5月12日-国际护士节
&5月15日-国际家庭日
&5月17日-世界电信日
&5月20日-全国学生营养日
&5月23日-国际牛奶日
&5月31日-世界无烟日
&6月1日-国际儿童节
&6月5日-世界环境日
&6月6日-全国爱眼日
&6月17日-世界防治荒漠化和干旱日
&6月23日-国际奥林匹克日
&6月25日-全国土地日
&6月26日-国际禁毒日
&7月1日-中国共产党诞生日
&7月7日-中国人民抗日战争纪念日
&7月11日-世界人口日
&8月1日-中国人民解放军建军节
&8月12日-国际青年节
&9月8日-国际扫盲日
&9月10日-中国教师节
&9月16日-中国脑健康日
&9月20日-全国爱牙日
&9月21日-世界停火日
&9月27日-世界旅游日
&10月1日-国庆节
&10月4日-世界动物日
&10月5日-世界教师日
&10月8日-全国高血压日
&10月9日-世界邮政日
&10月10日-世界精神卫生日
&10月14日-世界标准日
&10月15日-国际盲人节
&10月16日-世界粮食日
&10月17日-国际消除贫困日
&10月24日-世界发展新闻日
&10月28日-中国男性健康日
&10月29日-国际生物多样性日
&10月31日-万圣节
&11月8日-中国记者节
&11月9日-消防宣传日
&11月14日-世界糖尿病日
&11月17日-国际大学生节
&11月25日-国际消除对妇女的暴力日
&12月1日-世界爱滋病日
&12月3日-世界残疾人日
&12月4日-全国法制宣传日
&12月9日-世界足球日
&12月24日-平安夜
&12月25日-圣诞节
&12月29日-国际生物多样性日
