vb获取当天的公历节日并显示倒计时

2025-10-19 10:29:23

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日-国际生物多样性日

vb获取当天的公历节日并显示倒计时

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢