📄 remind.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 + -