找回密码
 加入
搜索
查看: 3932|回复: 14

[AU3基础] [已解决]请问每月的第三个星期五如何表达

  [复制链接]
发表于 2012-4-23 15:26:59 | 显示全部楼层 |阅读模式
本帖最后由 lnlyf 于 2012-4-23 18:09 编辑

哪位老大帮帮忙,多谢了!

评分

参与人数 1金钱 +20 收起 理由
afan + 20 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2012-4-23 16:04:45 | 显示全部楼层
回复 1# lnlyf

#include <Date.au3>
$year = InputBox('输入年份', '输入年份,例如: 2012', 2012, '')
If $year = '' Or StringLen($year) <> 4 Or Not StringIsDigit($year) Then $year = @YEAR

$mon = InputBox('输入月份', '输月年份,例如: 6', 6, '')
If $mon = '' Or StringLen($mon) > 2 Or StringLen($mon) < 1 Or Not StringIsDigit($mon) Then $mon = @MON

$days = _DateDaysInMonth($year, $mon) ; 返回该年该月份的最大天数

Local $count = 0, $iWeekday
For $i = 1 To $days
        $iWeekday = _DateToDayOfWeek($year, $mon, $i)
        If $iWeekday = 6 Then $count += 1
        If $count = 3 Then
                MsgBox(0, '该月第3个星期五', StringFormat('%s-%s-%s', $year, $mon, $i))
                ExitLoop
        EndIf
Next

评分

参与人数 2金钱 +40 贡献 +1 收起 理由
lnlyf + 10 + 1 谢谢!
502762378 + 30 速度

查看全部评分

发表于 2012-4-23 16:12:33 | 显示全部楼层
什么叫每个月的第三个星期五,年管不管
发表于 2012-4-23 16:20:32 | 显示全部楼层
不知道是不是楼主的意思
#include <Date.au3>
MsgBox(1,"",test(@YEAR, @MON))
Func test($year,$MON)
        $iWeekday = _DateToDayOfWeekISO ($year, $MON, 1)
        If $iWeekday = 7 Then
                Return $year&"-"&$MON&"-"&(19+1)
        Else
            Return $year&"-"&$MON&"-"&(19-$iWeekday+1)
        EndIf
EndFunc

评分

参与人数 2金钱 +20 贡献 +1 收起 理由
lnlyf + 10 + 1 谢谢!
user3000 + 10 简洁

查看全部评分

 楼主| 发表于 2012-4-23 16:47:58 | 显示全部楼层
什么叫每个月的第三个星期五,年管不管
netegg 发表于 2012-4-23 16:12



    谢谢,年不用管的。
 楼主| 发表于 2012-4-23 16:59:14 | 显示全部楼层
谢谢user3000 和502762378 两位高手。
502762378 的方法即得到当月的第三个星期五,应该能满足需要了,再次感谢!!!
 楼主| 发表于 2012-4-23 17:06:09 | 显示全部楼层
不知道是不是楼主的意思
502762378 发表于 2012-4-23 16:20



    再请教下,如果是第三个星期四,该改哪里呢,新手看不明白,谢谢!
 楼主| 发表于 2012-4-23 17:13:11 | 显示全部楼层
再请教下,如果是第三个星期四,该改哪里呢,新手看不明白,谢谢!
lnlyf 发表于 2012-4-23 17:06



    把19改成18就可以得到星期四,但不明白原理,惭愧。。。
发表于 2012-4-23 17:38:42 | 显示全部楼层
不好意思,刚刚开完会
我是看着日历回答你的问题的,你看看日历就明白什么意思了
#include <Date.au3>
MsgBox(1,"",test(@YEAR, @MON))
Func test($year,$MON)
        $iWeekday = _DateToDayOfWeekISO ($year, $MON, 1);返回指定年月第一天星期的数字
        If $iWeekday = 7 Then;当为星期天时。。。
                Return $year&"-"&$MON&"-"&(19+1);两个礼拜零五天为19天,再加个星期天一天不就是天数吗?
        Else
            Return $year&"-"&$MON&"-"&(19-$iWeekday+1);
        EndIf
EndFunc

评分

参与人数 2金钱 +40 贡献 +1 收起 理由
lnlyf + 30 + 1
user3000 + 10

查看全部评分

发表于 2012-4-23 17:39:01 | 显示全部楼层
回复 8# lnlyf

4楼代码, 先推算出本月1号是星期几, 然后以此为基准继续推算第3个星期五!
如果1号是星期六, 则第3个星期五的号数将会是: +14 (两个星期) + 6(又过6天就是星期五)!
1号不是星期六, 则要多减出该星期已过的天数, 即代码里:  - $iWeekday
   
如果是星期四, 则是 14 + 5 ; 星期三 14+4
是6还是5还是4, 是由 @WDAY 星期某天返回的数字决定的!
发表于 2012-4-23 17:46:42 | 显示全部楼层
回复 9# 502762378

$iWeekday = 7 应该是星期六!
西方是以星期天为每星期的第一天!
1 为星期天, 2为星期一...7为星期六!
发表于 2012-4-23 17:48:39 | 显示全部楼层
回复 9# 502762378

_DateToDayOfWeekISO($iYear, $iMonth, $iDay)
返回一个指定日期的国际标准(ISO)星期(n)数
.成功: 返回一周中的星期几(范围1 到 7),1=Monday(星期一).

汗, 结果是自己错了, 惯性思维!
 楼主| 发表于 2012-4-23 18:07:19 | 显示全部楼层
谢谢两位高手的解答,问题已解决。
发表于 2014-9-22 21:43:46 | 显示全部楼层
股指期货交割?
发表于 2014-9-22 21:43:49 | 显示全部楼层
股指期货交割?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-28 19:47 , Processed in 0.082118 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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