⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remind.vbs

📁 物业管理和办公自动化系统
💻 VBS
字号:
' 文件名:remind.vbs
' 功 能:实现函数
'				FirstRemindTime():获取第一次提醒时间
'               NextRemindTime():获取下次提醒时间(在循环提醒时才会用到,目前未用)
'               DefaultRemindMethod():获取缺省提醒方式

'-- 函数名  : FirstRemindTime
'-- 输入参数 : string sRemindMethod 提醒方式
'--      : datetime dtBaseTime  产生下次提醒时间的基准值
'-- 输出结果 : retRemindTime      下次提醒时间
'-- 功能   : 根据提醒方式和基准时间算出下次提醒时间

' 提醒方式sRemindMethod的可能值(要么是空,要么是8位数字)如下表
'     +-------------------+---------------------------------------------------------------------------------------------
'     |  sRemindMethod    |    说明                                                                                     
'     +-------------------+---------------------------------------------------------------------------------------------
'     |      ""           |   从不提醒                                                                                   
'     |    "0104****"     |   前两位“01”表一次性提醒,中间两位“04”表提前几分钟提醒,最后四位表示多少分钟                         
'     |    "0108****"     |   前两位“01”表一次性提醒,中间两位“08”表提前几小时提醒,最后四位表示多少小时                          
'     |    "0116****"     |   前两位“01”表一次性提醒,中间两位“16”表提前几天提醒,最后四位表示多少天
'     |    "0400****"     |   前两位“04”表每天提醒一次,中间两位“00”保留,最后四位表示每天的几点几分提醒
'     |    "08^^****"    |   前两位“08”表每周提醒一次,中间两位“^^”表示每周几(1-7)提醒,最后四位表示每周几的几点几分提醒
'     |    "16^^****"    |   前两位“16”表每月提醒一次,中间两位“^^”表示每月几号(1-28)提醒,最后四位表示每月几号的几点几分提醒
'     +-------------------+---------------------------------------------------------------------------------------------
'-----------------------------------------------------------
' 提醒方式 + 任务开始时间 --> 第一次提醒时间
'-----------------------------------------------------------
function FirstRemindTime(sRemindMethod, dtBaseTime)

	Dim nMinutes : nMinutes = 0
	Dim nHours	 : nHours = 0
	Dim nDays	 : nDays = 0

'	msgbox "参数1:" & sRemindMethod & ",参数2:" & dtBaseTime

	dtBaseTime = CDate(dtBaseTime)		' String 类型的变量转换成日期
	' 和当前系统时间比较,取较大者作为基准时间
	if dtBaseTime < date then
		dtBaseTime = date
	end if

	FirstRemindTime = ""				' 缺省为不需提醒
	'---------------------------------------------------------------------------------
	' 不需提醒, FirstRemindTime=""
	'---------------------------------------------------------------------------------
	if sRemindMethod = "" then 
'		msgbox "Never Remind"
		exit function			' 下次提醒时间为""
	end if

	'---------------------------------------------------------------------------------
	' 提前一段分/时/天提醒,只要基准时间 - 相应的分/时/秒
	'---------------------------------------------------------------------------------
	' 提前N分钟提醒
	if Left(sRemindMethod, 4) = "0104" then	
		nMinutes = Int(Right(sRemindMethod, 4))	' 提醒方式最后四位转换成分钟
		FirstRemindTime = DateAdd("n", - nMinutes, dtBaseTime)
'		msgbox "下次提醒时间:" & FirstRemindTime & "(提前" & nMinutes & "分钟提醒)"
		exit function
	end if

	' 提前N小时提醒
	if Left(sRemindMethod, 4) = "0108" then	
		nHours = Int(Right(sRemindMethod, 4))	' 提醒方式最后四位转换成小时
		FirstRemindTime = DateAdd("h", - nHours, dtBaseTime)
'		msgbox "下次提醒时间:" & FirstRemindTime & "(提前" & nHours & "小时提醒)"
		exit function
	end if
	
	' 提前N天提醒
	if Left(sRemindMethod, 4) = "0116" then
		nDays = Int(Right(sRemindMethod, 4))	' 提醒方式最后四位转换成天
		FirstRemindTime = DateAdd("d", - nDays, dtBaseTime)
'		msgbox "下次提醒时间:" & FirstRemindTime & "(提前" & nDays & "天提醒)"
		exit function
	end if

	'---------------------------------------------------------------------------------
	' 如果是循环提醒,先算出是什么时候提醒,即小时和分钟
	'---------------------------------------------------------------------------------
	Dim sHours, sMinutes
	nHours = Int(Left(Right(sRemindMethod,4),2))		' 倒数第三、第四位转换成小时
	nMinutes = Int(Right(sRemindMethod, 2))				' 倒数第一、第二位转换成分钟
	sHours = Left(Right(sRemindMethod,4),2)
	sMinutes = Right(sRemindMethod, 2)

	' 每天提醒
	if Left(sRemindMethod, 2) = "04" then
		if ((Hour(dtBaseTime) < nHours) or (Hour(dtBaseTime) = nHours and Minute(dtBaseTime) < nMinutes )) then
			' 如果dtBaseTime的时间比提醒时间早,则dtBaseTime的日期不变,时分改为提醒的时间
			FirstRemindTime = DateValue(dtBaseTime) & " " & sHours & ":" & sMinutes
		else
			' 如果dtBaseTime的时间比提醒时间晚,则dtBaseTime的日期加1,时分改为提醒的时间
			FirstRemindTime = DateValue(DateAdd("d", 1, dtBaseTime)) & " " & sHours & ":" & sMinutes
		end if
'		msgbox "下次提醒时间:" & FirstRemindTime
		exit function
	end if
		
	'----------------------------------------------------------------------------------------------------------------------
	' 每周N提醒
	' 如果基准时间的星期几 ≠ 提醒方式中的星期几,只要往后推几天就得到下次提醒时间的日期,下次提醒时间的时间就是提醒方式中的提醒时间
	' 如果基准时间的星期几 = 提醒方式中的星期几,如果基准时间的时分较小,则下次提醒时间=基准时间中的日期+提醒方式中的时间;
	'                                      如果基准时间的时分较大,则下次提醒时间=基准时间中的日期+7+提醒方式中的提醒时间
	'----------------------------------------------------------------------------------------------------------------------
	Dim nBaseWeekday, nRemindWeekday
	nBaseWeekday = weekday(dtBaseTime, vbMonday)			' 基准时间是星期几,其中vbMonday作为firstdayofweek(星期一为一周的开始)
	nRemindWeekday = Int(Right(Left(sRemindMethod,4),2))	' 每周几提醒
	if Left(sRemindMethod, 2) = "08" then
		if nBaseWeekday <> nRemindWeekday then
			FirstRemindTIme = DateValue(DateAdd("d", (nRemindWeekday+7-nBaseWeekday)mod(7), dtBaseTime)) & " " & sHours & ":" & sMinutes
		elseif ((Hour(dtBaseTime) < nHours) or (Hour(dtBaseTime) = nhours and Minute(dtBaseTime) < nMinutes)) then
			FirstRemindTime = DateValue(dtBaseTime) & " " & sHours & ":" & sMinutes
		else
			FirstRemindTime = DateValue(DateAdd("d", 7, dtBaseTime)) & " " & sHours & ":" & sMinutes
		end if
'		msgbox FirstRemindTime
		exit function
	end if


	'----------------------------------------------------------------------------------------------------------------------
	' 每月N号提醒
	' 如果基准时间的日期 ≠ 提醒方式中的日期,如果基准日期较小,下次提醒时间=基准日期的月+提醒日期的日+提醒方式中的提醒时间
	'                    如果基准日期较大,下次提醒时间=基准日期的月+1 +提醒日期的日+提醒方式的提醒时间
	' 如果基准时间的日期 = 提醒方式中的日期,如果基准时间的时分较小,则下次提醒时间=基准时间中的日期+提醒方式中的时间;
	'                                  如果基准时间的时分较大,则下次提醒时间=基准时间中的日期+一个月+提醒方式中的提醒时间
	'----------------------------------------------------------------------------------------------------------------------
	Dim nBaseMonthday, nRemindMonthday
	nBaseMonthday = day(dtBaseTime)							' 基准时间是几号
	nRemindMonthday = Int(Right(Left(sRemindMethod,4),2))	' 提醒日期是每月几号
	if Left(sRemindMethod, 2) = "16" then
		if nBaseMonthday < nRemindMonthday then
			FirstRemindTime = Year(dtBaseTime) & "-" & Month(dtBaseTime) & "-" & nRemindMonthday & " " & sHours & ":" & sMinutes
		elseif nBaseMonday > nRemindMonthday then
			FirstRemindTime = DateSerial(Year(dtBaseTime), Month(dtBaseTime) + 1, nRemindMonthday) & " " & sHours & ":" & sMinutes
		elseif ((Hour(dtBaseTime) < nHours) or (Hour(dtBaseTime) = nhours and Minute(dtBaseTime) < nMinutes)) then
			FirstRemindTime = DateValue(dtBaseTime) & " " & sHours & ":" & sMinutes
		else
			FirstRemindTime = DateValue(DateAdd("m", 1, dtBaseTime)) & " " & sHours & ":" & sMinutes
		end if
'		msgbox FirstRemindTime
		exit function
	end if
end function


' 暂时未用
function NextRemindTime(sRemindMethod, dtBase)
	if Left(sRemindMethod,2) = "04" then			' 每天提醒一次
		NextRemindTime = DateAdd("d", 1, dtBase)
	elseif Left(sRemindMethod,2) = "08" then		' 每周提醒一次
		NextRemindTime = DateAdd("ww", 1, dtBase)
	elseif Left(sRemindMethod,2) = "16" then		' 每月提醒一次
		NextRemindTime = DateAdd("m", 1, dtBase)
	end if
end function

function DefaultRemindMethod()
	' -- 函数名 : DefaultRemindMethod
	' -- 输入参数: (无)
	' -- 功能  : 获取缺省的提醒方式
	Dim sRemindMethod : sRemindMethod = "<%=Application("RAMinutes")%>"
	sRemindMethod = "0104" & Right("0000" & sRemindMethod, 4)	' 提前的分钟数前加四个0,然后取后四位
	DefaultRemindMethod = sRemindMethod	
end function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -