Jump to content

[SOLVED] How do I find every Monday within a date range in Autoit?


Recommended Posts

Is it possible to use Autoit to find every Monday within a date range? An example would be I want to find every Monday between 1/9/19 through 4/9/19. Then Autoit would give me all the dates on which Monday lands between those two dates. 

Sorry but I don't have any code so far. I was wondering if it was even possible. I read the help file and I didn't see a function that could do that. 

Edited by nooneclose
Link to comment
Share on other sites

  • Developers

Sure, shouldn't be too hard. Here is an example you can study/play with:

#include <date.au3>
$startjuldate = _DateToDayValue(2019,1,9)
$endjuldate = _DateToDayValue(2019,4,9)
Global $iYear, $iMonth, $iDay

For $x =  $startjuldate To $endjuldate
    _DayValueToDate ( $x, $iYear,$iMonth, $iDay )
    if _DateToDayOfWeek($iYear,$iMonth,$iDay) = 2 Then
        ConsoleWrite("Monday " & $iMonth & "/" & $iDay & "/" & $iYear & @CRLF)
    EndIf
Next

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to comment
Share on other sites

@Jos Thank you again, Jos the code you posted works great. I just have one more question would it be possible to do something like this:

; The starting date
    $startjuldate = _DateToDayValue($StartDate[1])  ;_DateToDayValue(2019,1,9) 
    ; The ending date
    $endjuldate = _DateToDayValue($EndDate[1])  ;_DateToDayValue(2019,4,9) 
    
    Global $iYear, $iMonth, $iDay

    For $Index = $startjuldate To $endjuldate
        _DayValueToDate ( $Index, $iYear, $iMonth, $iDay )
        ; Finds the day based on its numerical value (1 = Sunday)
        If _DateToDayOfWeek($iYear, $iMonth, $iDay) = 2 Then
            ConsoleWrite("Monday " & $iMonth & "/" & $iDay & "/" & $iYear & @CRLF)
        EndIf
    Next

 For this, to work I need the code to be able to read a value in from an array. Is it possible to give a start date and an end date from an array element? 

Is there a function or something that can do this? (I know these array elements won't work here because of the _DateToDayValue calls for more args)

Link to comment
Share on other sites

@Jos I was able to figure it out using string manipulation. Here is what I have come up with:

$DayIndex = 0

    While $DayIndex < $IndexRows

        ; Gets the Start date from the array
        $Temp = $StartDate[DayIndex]
        $TempStart = StringLeft($Temp, 8)
        $StartTempYear  = StringLeft($TempStart, 4)
        $StartTempMonth = StringMid($TempStart, 5, 2)
        $StartTempDay   = StringRight($TempStart, 2)

        ; Gets the End date from the array
        $Temp = $EndDate[DayIndex]
        $TempEnd = StringLeft($Temp, 8)
        $EndTempYear  = StringLeft($TempEnd, 4)
        $EndTempMonth = StringMid($TempEnd, 5, 2)
        $EndTempDay   = StringRight($TempEnd, 2)

        ; The starting date
        $startjuldate = _DateToDayValue($StartTempYear, $StartTempMonth, $StartTempDay)  ;_DateToDayValue(2019,1,9)
        ; The ending date
        $endjuldate = _DateToDayValue($EndTempYear, $EndTempMonth, $EndTempDay)          ;_DateToDayValue(2019,4,9)

        Global $iYear, $iMonth, $iDay

        For $Index = $startjuldate To $endjuldate
            _DayValueToDate ( $Index, $iYear, $iMonth, $iDay )
            ; Finds the day based on its numerical value (1 = Sunday)
            If _DateToDayOfWeek($iYear, $iMonth, $iDay) = 1 Then
                ConsoleWrite("Sunday " & $iMonth & "/" & $iDay & "/" & $iYear & @CRLF)
            ElseIf _DateToDayOfWeek($iYear, $iMonth, $iDay) = 2 Then
                ConsoleWrite("Monday " & $iMonth & "/" & $iDay & "/" & $iYear & @CRLF)
            ElseIf _DateToDayOfWeek($iYear, $iMonth, $iDay) = 3 Then
                ConsoleWrite("Tuesday " & $iMonth & "/" & $iDay & "/" & $iYear & @CRLF)
            ElseIf _DateToDayOfWeek($iYear, $iMonth, $iDay) = 4 Then
                ConsoleWrite("Wednesday " & $iMonth & "/" & $iDay & "/" & $iYear & @CRLF)
            ElseIf _DateToDayOfWeek($iYear, $iMonth, $iDay) = 5 Then
                ConsoleWrite("Thursday " & $iMonth & "/" & $iDay & "/" & $iYear & @CRLF)
            ElseIf _DateToDayOfWeek($iYear, $iMonth, $iDay) = 6 Then
                ConsoleWrite("Friday " & $iMonth & "/" & $iDay & "/" & $iYear & @CRLF)
            ElseIf _DateToDayOfWeek($iYear, $iMonth, $iDay) = 7 Then
                ConsoleWrite("Saturday " & $iMonth & "/" & $iDay & "/" & $iYear & @CRLF)
            EndIf
        Next

        $DayIndex += 1

    WEnd

There most likely is a better way and if there is please tell me:) anyway thanks again you were a huge help! 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...