lnlyf 发表于 2012-4-23 15:26:59

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

本帖最后由 lnlyf 于 2012-4-23 18:09 编辑

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

user3000 发表于 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

netegg 发表于 2012-4-23 16:12:33

什么叫每个月的第三个星期五,年管不管

502762378 发表于 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

lnlyf 发表于 2012-4-23 16:47:58

什么叫每个月的第三个星期五,年管不管
netegg 发表于 2012-4-23 16:12 http://www.autoitx.com/images/common/back.gif


    谢谢,年不用管的。

lnlyf 发表于 2012-4-23 16:59:14

谢谢user3000 和502762378 两位高手。
502762378 的方法即得到当月的第三个星期五,应该能满足需要了,再次感谢!!!

lnlyf 发表于 2012-4-23 17:06:09

不知道是不是楼主的意思
502762378 发表于 2012-4-23 16:20 http://www.autoitx.com/images/common/back.gif


    再请教下,如果是第三个星期四,该改哪里呢,新手看不明白,谢谢!

lnlyf 发表于 2012-4-23 17:13:11

再请教下,如果是第三个星期四,该改哪里呢,新手看不明白,谢谢!
lnlyf 发表于 2012-4-23 17:06 http://www.autoitx.com/images/common/back.gif


    把19改成18就可以得到星期四,但不明白原理,惭愧。。。

502762378 发表于 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

user3000 发表于 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 星期某天返回的数字决定的!

user3000 发表于 2012-4-23 17:46:42

回复 9# 502762378

$iWeekday = 7 应该是星期六!
西方是以星期天为每星期的第一天!
1 为星期天, 2为星期一...7为星期六!

user3000 发表于 2012-4-23 17:48:39

回复 9# 502762378

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

汗, 结果是自己错了, 惯性思维!

lnlyf 发表于 2012-4-23 18:07:19

谢谢两位高手的解答,问题已解决。

kings425 发表于 2014-9-22 21:43:46

股指期货交割?

kings425 发表于 2014-9-22 21:43:49

股指期货交割?
页: [1]
查看完整版本: [已解决]请问每月的第三个星期五如何表达