求一个脚本,ROS330下计算当天星期几的脚本?(已解决)
本帖最后由 weikun444 于 2011-1-8 17:48 编辑如题,还请各位大大们指点一下,给个脚本。 msxo发那个提前WEB通知就可以计算星期几。 我就说我复制了还不行,原来330变量是要声明的。以下是脚本,330上通过:
##############################################################
#脚本名称:week #
#脚本功能:计算当前日期是星期几 #
#脚本用法:在其他脚本中运行/sys scr run week #
# 然后用变量$WEEK取得计算结果,0为星期天 #
#脚本作者:hcb #
#创建日期:2007-11-30 #
##############################################################
:global str
:global tmp
:global YY
:global DD
:global n
:global MM
:global s
:global i
:global y1
:global w1
:global day
:global d
:global m2
:global temp
:global m
:global WEEK 0
#-------------------------------------------------------
#取当前日期,变成数字YY(年),MM(月),DD(日)
:set str (jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec)
:set tmp
:set YY [:tonum ([:pick $tmp 7 11])]
:set s [:pick $tmp 4 6]
:if ([:find $s "0"]=0) do={:set s [:pick $s 1 [:len $s]]}
:set DD [:tonum ($s)]
:set n 1
:set MM $n
:set s [:pick $tmp 03]
:foreach i in=$str do={
:if ($s=$i) do={:set MM $n}
:set n ($n + 1)
}
#------------------------------------------------------
#以2000年1月1日星期6为基准,
#计算2000年1月1日到现在经过了多少天
#设置基准年
:set y1 2000
#设置基准年1月1日是星期几
:set w1 6
#计算初始天数,即星期几-1
:set day 0
:if ($w1>0) do={:set day ($w1 - 1)} else={:set day 6}
#计算到现在的总天数
:set d 0
:for y from=$y1 to=$YY do={
:set m2 12
:if ($y=$YY) do={:set m2 $MM}
:for m from=1 to=$m2 do={
# ####若是本月,则该月取现在天数
:if ($y=$YY && $m=$MM) do={:set d $DD} \
else={
# ####若是2月,要考虑平月闰月
:if ($m=2) do={
# ####润年是四年一润
:if ($y -($y/4)*4=0) do={:set d 29} else={:set d 28}
}
:if ($m!=2) do={
# ####若是小月,则该月天数为30天,否则是31天
:if ($m=4||$m=6||$m=9||$m=11) do={:set d 30} else={:set d 31}
}
}
# ####总天数加该月天数
:set day ($day + $d)
}
}
#----------------------------------------------------------
#计算总天数除以7的余数就是星期几
#这是一个特殊的算法,由于ROS没有求余的运算,又不支持小数,故如此
:set WEEK ($day -($day/7)*7)
:log info ( "日期" . . "时间" . . "星期" . $WEEK )
测试成功了?
回复 weikun444 的帖子
呵呵,哪弄来的脚本,
这脚本有误差 :lol 本帖最后由 mxso 于 2011-1-8 21:54 编辑
这是官网(wiki)上的:# Calculates day of the week for a givien date
# Month: jan,feb ... nov,dec (must be lower-case)
# Day: 1 - 31
# Year: 1900 - 2999
# mmm/dd/yyyy same format as
# (ex. jul/22/2009)
:local date
# Math Calculation here
:local result ""
:local months [:toarray "jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec"]
:local monthtbl [:toarray "0,3,3,6,1,4,6,2,5,0,3,5"]
:local daytbl [:toarray "sun,mon,tue,wed,thu,fri,sat"]
:local month [:pick $date 0 3]
:local day [:pick $date 4 6]
:local dayc [:pick $date 5 6]
:local century [:pick $date 7 9]
:local year [:pick $date 9 11]
:local yearc [:pick $date 10 11]
# if the first char is a 0 (zero) only read last char, else script fails
:if ([:pick $date 4 5] = 0) do={ :set day ($dayc)}
:if ([:pick $date 9 10] = 0) do=[:set year ($yearc)]
:local sum 0
:set sum ($sum + (2 * (3 - ($century - (($century / 4) * 4)))))
:set sum ($sum + ($year / 4))
:set sum ($sum + $year + $day)
:for mindex from=0 to=[:len $months] do={
:if ([:pick $months $mindex] = $month) do={:set sum ($sum + [:pick $monthtbl $mindex]) }
}
:set sum ($sum - (($sum / 7) * 7))
:set result [:pick $daytbl $sum]
# END Math Calculation
:put ([:pick $date 0 3] . "/" . [:pick $date 4 6] . "/" . [:pick $date 7 9] . [:pick $date 9 11] . " is on a " . $result)
原连接:http://wiki.mikrotik.com/wiki/Script_to_find_the_day_of_the_week
页:
[1]