我们可以用vb获取当天是否有相关的公历节日,如果没有则进行最近的节日倒计时
工具/原料
VB环境、windows环境
vb编译器
方法/步骤
1、辅助函数:获取某月第几个星期几:'判断某月的第几个星期几,实例:getweek(2016,9,2,0),表示2016年9月的第二个星期日的日期是多少Functiongetweek(yearAsInteger,yueAsInteger,numAsInteger,weekAsInteger)AsStringDimdayAsString'月份的天数ForI=1To7IfWeekday(year&"-"&yue&"-"&I)-1=weekThenday=I'第1个星期几的日期EndIfNextIForI=1Tonum-1day=day+7'第num个星期几的日期NextI'修正,防止出现如32号的错误信息SelectCaseyueCase1,3,5,7,8,10,12'31天的月数Ifday>31Thengetweek=""Elsegetweek=Format(year&"-"&yue&"-"&day,"yyyy-mm-dd")EndIfCase4,6,9,11'30天的月数Ifday>30Thengetweek=""Elsegetweek=Format(year&"-"&yue&"-"&day,"yyyy-mm-dd")EndIfCase2'平闰月DimtempAsIntegertemp=28IfyearMod100=0AndyearMod400=0Thentemp=29EndIfIfyearMod100<>0AndyearMod4=0Thentemp=29EndIfIfday>tempThengetweek=""Elsegetweek=Format(year&"-"&yue&"-"&day,"yyyy-mm-dd")EndIfEndSelectEndFunction
2、主要函数:'应用佼沣族昀:xqjr(2016,10,1,"1")Functionxqjr(myyearAsInteger,罪焐芡拂monthAsInteger,dayAsInteger,mymsAsString)AsString'myms:0表示返回节日或者空;1表示返回节日或者距离节日多少天DimriqiAsStringDimtempriqi(9To2000)AsString,sAsString,jAsIntegerj=9riqi=Format(myyear&"-"&month&"-"&day,"yyyy-mm-dd")Dimtsjr(1To500)AsString'节日日期Dimjierimc(1To500)AsString'节日名称'以下为特殊节日,某月的第几个星期几的节日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("感恩节","母亲节","父亲节","国际和平日","国际聋人节","全国助残节","全国国防教育日","国际减轻自然灾害")ForI=1To8'将特殊节日名称正规化jierimc(I)=jrmc(I-1)NextIIfDir(App.Path&"/festival.txt")<>""Then'加载文件中更多节日信息OpenApp.Path&"/festival.txt"ForInputAs#1DoWhileNotEOF(1)LineInput#1,sIfs<>""AndLeft(s,1)="&"Thentempriqi(j)=Right(s,Len(s)-1)j=j+1EndIfLoopClose#1DimtempyueAsString,tempriAsString,tempjieriAsString'解读节日数据信息Dimt(1To3)AsIntegerForI=9TojIfInStr(tempriqi(I),"月")<>0AndInStr(tempriqi(I),"日")<>0AndInStr(tempriqi(I),"-")<>0Thent(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)=tempjieriEndIfNextIEndIf'完成加载所有节日信息'此时注释:tsjr(1to500)为节日日期;jierimc(1To500)为对应节日名称SelectCasemymsCase"0"'模式0,表示结果只返回节日或者空xqjr=""ForI=1TojIfriqi=tsjr(I)Thenxqjr=jierimc(I)ExitFunctionEndIfNextICase"1"'模式1,表示提示距离最近的节日有多少天DimminAsInteger,mydayAsIntegerDimsjc(1To500)AsIntegerForI=1Toj-1'计算所有节日的时间差IfDateDiff("d",riqi,tsjr(I))>=0Thensjc(I)=DateDiff("d",riqi,tsjr(I))Elsesjc(I)=365EndIfNextImin=sjc(1)ForI=1Toj-1'找出最小时间差的节日Ifmin>=sjc(I)Thenmin=sjc(I)myday=IEndIfNextISelectCasemin'时间差(天数)判断Case0xqjr="今天是"&jierimc(myday)Case1xqjr="明天为"&jierimc(myday)Case2xqjr="后天为"&jierimc(myday)CaseElsexqjr="距离"&jierimc(myday)&"还有"&min&"天"EndSelectEndSelectEndFunction
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日-国际生物多样性日