找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6714|回复: 6

[脚本] 求一个脚本,ROS330下计算当天星期几的脚本?(已解决)

[复制链接]
发表于 2011-1-8 13:15:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 weikun444 于 2011-1-8 17:48 编辑

如题,还请各位大大们指点一下,给个脚本。
routeros
发表于 2011-1-8 13:47:24 | 显示全部楼层
msxo发那个提前WEB通知就可以计算星期几。
routeros
回复

使用道具 举报

 楼主| 发表于 2011-1-8 17:48:14 | 显示全部楼层
我就说我复制了还不行,原来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 [/sys clock get date]
: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 0  3]
: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 ( "日期" . [/sys cl get date] . "时间" . [/sys cl get time] . "星期" . $WEEK )

routeros
回复

使用道具 举报

发表于 2011-1-8 18:53:51 | 显示全部楼层
测试成功了?
routeros
回复

使用道具 举报

发表于 2011-1-8 21:42:16 | 显示全部楼层
回复 weikun444 的帖子

呵呵,哪弄来的脚本,
这脚本有误差
routeros
回复

使用道具 举报

发表于 2011-1-8 21:46:57 | 显示全部楼层
routeros
回复

使用道具 举报

发表于 2011-1-8 21:52:28 | 显示全部楼层
本帖最后由 mxso 于 2011-1-8 21:54 编辑

这是官网(wiki)上的:
  1. # Calculates day of the week for a givien date
  2. # Month: jan,feb ... nov,dec   (must be lower-case)
  3. # Day: 1 - 31
  4. # Year: 1900 - 2999
  5. # mmm/dd/yyyy   same format as [/system clock get date]
  6. # (ex. jul/22/2009)

  7. :local date [/system clock get date]



  8. # Math Calculation here
  9. :local result ""
  10. :local months [:toarray "jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec"]
  11. :local monthtbl [:toarray "0,3,3,6,1,4,6,2,5,0,3,5"]
  12. :local daytbl [:toarray "sun,mon,tue,wed,thu,fri,sat"]

  13. :local month [:pick $date 0 3]
  14. :local day [:pick $date 4 6]
  15. :local dayc [:pick $date 5 6]
  16. :local century [:pick $date 7 9]
  17. :local year [:pick $date 9 11]
  18. :local yearc [:pick $date 10 11]

  19. # if the first char is a 0 (zero) only read last char, else script fails
  20. :if ([:pick $date 4 5] = 0) do={ :set day ($dayc)}
  21. :if ([:pick $date 9 10] = 0) do=[:set year ($yearc)]

  22. :local sum 0
  23. :set sum ($sum + (2 * (3 - ($century - (($century / 4) * 4)))))
  24. :set sum ($sum + ($year / 4))
  25. :set sum ($sum + $year + $day)
  26. :for mindex from=0 to=[:len $months] do={
  27.   :if ([:pick $months $mindex] = $month) do={:set sum ($sum + [:pick $monthtbl $mindex]) }
  28. }
  29. :set sum ($sum - (($sum / 7) * 7))
  30. :set result [:pick $daytbl $sum]

  31. # END Math Calculation

  32. :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
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-12-22 20:11 , Processed in 0.050096 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表