Jump to content

Weekdates from _WeekNumberISO()


Go to solution Solved by Malkey,

Recommended Posts

I have a program where I use the weeknumber to choose a period of time. One "Gui change" is equal to one week. I want to be able to get the Monday, Tuesday, Wednesday, Thursday and Friday dates for a week given to the function. For example in this function, it checks for given weeks:

Func WeekCheck($Input)
If $Input = 8 Or $Input = 17 Or $Input = 4 Or $Input = 13 Or $Input = 22 Then
One()
ElseIf $Input = 2 Or $Input = 11 Or $Input = 19 Then
Two()
ElseIf $Input = 7 Then
Three()
ElseIf $Input = 24 Then
Extra()
Else
Sleep(1)
EndIf
EndFunc   ;==>WeekCheck
 
The $Input is a weeknumber which determines the rest.
I now have this function:
 
Func LabelCheck($Input)
If $Input = 14 Then $Label = Label("31.03", "01.04", "02.04", "03.04", "04.04")
If $Input = 15 Then $Label = Label("07.04", "08.04", "09.04", "10.04", "11.04")
If $Input = 16 Then $Label = Label("14.04", "15.04", "16.04", "17.04", "18.04")
If $Input = 17 Then $Label = Label("21.04", "22.04", "23.04", "24.04", "25.04")
If $Input = 18 Then $Label = Label("28.04", "29.04", "30.04", "01.05", "02.05")
If $Input = 19 Then $Label = Label("05.05", "06.05", "07.05", "08.05", "09.05")
If $Input = 20 Then $Label = Label("12.05", "13.05", "14.05", "15.05", "16.05")
If $Input = 21 Then $Label = Label("19.05", "20.05", "21.05", "22.05", "23.05")
If $Input = 22 Then $Label = Label("26.05", "27.05", "28.05", "29.05", "30.05")
If $Input = 23 Then $Label = Label("02.06", "03.06", "04.06", "05.06", "06.06")
If $Input = 24 Then $Label = Label("09.06", "10.06", "11.06", "12.06", "13.06")
EndFunc   ;==>LabelCheck

Which does this:

Func Label($text1, $text2, $text3, $text4, $text5)
Local $Div1 = 80, $Div2 = 145, $Div3 = 205, $Div4 = 270, $Div5 = 335
GUICtrlCreateLabel($text1, $Div1, 5, 40, 15)
GUICtrlSetFont(-1, 12, "", "", "Arial")
GUICtrlCreateLabel($text2, $Div2, 5, 40, 15)
GUICtrlSetFont(-1, 12, "", "", "Arial")
GUICtrlCreateLabel($text3, $Div3, 5, 40, 15)
GUICtrlSetFont(-1, 12, "", "", "Arial")
GUICtrlCreateLabel($text4, $Div4, 5, 40, 15)
GUICtrlSetFont(-1, 12, "", "", "Arial")
GUICtrlCreateLabel($text5, $Div5, 5, 40, 15)
GUICtrlSetFont(-1, 12, "", "", "Arial")
EndFunc   ;==>Label

But I want a more automated version so I don't need to add the dates in a week manually.

Something like Label($Day1, $Day2, $Day3, $Day4, $Day5)

Or Label($Day[0], $Day[1], $Day[2], $Day[3], $Day[4])

Where the $Day is based off the weekdate. It could not be from the current date, because it needs to work for any week.

Link to comment
Share on other sites

  • Solution

This example converts a year's week number to the days' dates of that week starting on the Monday - the first day of theweek.

#include <Date.au3>
#include <Array.au3>

Local $iWeekNum = 1
Local $Year = 2014

Local $s = _DateFromWeekNumber($Year, $iWeekNum)
Local $sDates = _DateFormat($s, "dddd MMM.dd.yyyy")
For $i = 1 To 6
    $sDates &= "|" & _DateFormat(_DateAdd("D", $i, $s), "dddd MMM.dd.yyyy")
Next
;ConsoleWrite($sDates & @LF)
Local $aDates = StringSplit($sDates, "|", 2)
_ArrayDisplay($aDates)


; The week with the first Thursday of the year is week number 1.
;Returns the date of the Monday of the week number.
Func _DateFromWeekNumber($iYear, $iWeekNum)
    Local $Date, $sFirstDate = _DateToDayOfWeek($iYear, 1, 1)
    If $sFirstDate < 6 Then
        $Date = _DateAdd("D", 2 - $sFirstDate, $iYear & "/01/01")
    ElseIf $sFirstDate = 6 Then
        $Date = _DateAdd("D", $sFirstDate - 3, $iYear & "/01/01")
    ElseIf $sFirstDate = 7 Then
        $Date = _DateAdd("D", $sFirstDate - 5, $iYear & "/01/01")
    EndIf
    ;ConsoleWrite(_DateToDayOfWeek($iYear, 1, 1) &"  ")
    Local $aDate = StringSplit($Date, "/", 2)
    Return _DateAdd("w", $iWeekNum - 1, $aDate[0] & "/" & $aDate[1] & "/" & $aDate[2])
EndFunc   ;==>_DateFromWeekNumber

; Format date
; $sDate, input date in the format yyyy/MM/dd[ hh:mm:ss]
Func _DateFormat($sDate, $sFormat)
    $hGui = GUICreate("")
    $idDate = GUICtrlCreateDate($sDate, 10, 10)
    GUICtrlSendMsg($idDate, 0x1032, 0, $sFormat) ; or "dddd, MMMM d, yyyy hh:mm:ss tt"); or "hh:mm tt"
    $FormatedDate = GUICtrlRead($idDate)
    GUIDelete($hGui)
    Return $FormatedDate
EndFunc   ;==>_DateFormat
Link to comment
Share on other sites

 

This example converts a year's week number to the days' dates of that week starting on the Monday - the first day of theweek.

#include <Date.au3>
#include <Array.au3>

Local $iWeekNum = 1
Local $Year = 2014

Local $s = _DateFromWeekNumber($Year, $iWeekNum)
Local $sDates = _DateFormat($s, "dddd MMM.dd.yyyy")
For $i = 1 To 6
    $sDates &= "|" & _DateFormat(_DateAdd("D", $i, $s), "dddd MMM.dd.yyyy")
Next
;ConsoleWrite($sDates & @LF)
Local $aDates = StringSplit($sDates, "|", 2)
_ArrayDisplay($aDates)


; The week with the first Thursday of the year is week number 1.
;Returns the date of the Monday of the week number.
Func _DateFromWeekNumber($iYear, $iWeekNum)
    Local $Date, $sFirstDate = _DateToDayOfWeek($iYear, 1, 1)
    If $sFirstDate < 6 Then
        $Date = _DateAdd("D", 2 - $sFirstDate, $iYear & "/01/01")
    ElseIf $sFirstDate = 6 Then
        $Date = _DateAdd("D", $sFirstDate - 3, $iYear & "/01/01")
    ElseIf $sFirstDate = 7 Then
        $Date = _DateAdd("D", $sFirstDate - 5, $iYear & "/01/01")
    EndIf
    ;ConsoleWrite(_DateToDayOfWeek($iYear, 1, 1) &"  ")
    Local $aDate = StringSplit($Date, "/", 2)
    Return _DateAdd("w", $iWeekNum - 1, $aDate[0] & "/" & $aDate[1] & "/" & $aDate[2])
EndFunc   ;==>_DateFromWeekNumber

; Format date
; $sDate, input date in the format yyyy/MM/dd[ hh:mm:ss]
Func _DateFormat($sDate, $sFormat)
    $hGui = GUICreate("")
    $idDate = GUICtrlCreateDate($sDate, 10, 10)
    GUICtrlSendMsg($idDate, 0x1032, 0, $sFormat) ; or "dddd, MMMM d, yyyy hh:mm:ss tt"); or "hh:mm tt"
    $FormatedDate = GUICtrlRead($idDate)
    GUIDelete($hGui)
    Return $FormatedDate
EndFunc   ;==>_DateFormat

Thanks. I was able to change it to my needs and implement it into my other functions.

Link to comment
Share on other sites

Would be nice if you shared your modification with us.

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

Would be nice if you shared your modification with us.

Func LabelCheck($Input)
$LabelDelete = GUICtrlDelete($Label1) & GUICtrlDelete($Label2) & GUICtrlDelete($Label3) & GUICtrlDelete($Label4) & GUICtrlDelete($Label5)


Local $Year = @YEAR


Local $s = _DateFromWeekNumber($Year, $Input)
Local $sDates = _DateFormat($s, "dd.MM")
For $i = 1 To 6
$sDates &= "|" & _DateFormat(_DateAdd("D", $i, $s), "dd.MM")
Next
;ConsoleWrite($sDates & @LF)
Local $aDates = StringSplit($sDates, "|", 2)
$Label = Label($aDates[0], $aDates[1], $aDates[2], $aDates[3], $aDates[4])
EndFunc   ;==>LabelCheck


Func _DateFromWeekNumber($iYear, $iWeekNum)
Local $Date, $sFirstDate = _DateToDayOfWeek($iYear, 1, 1)
If $sFirstDate < 6 Then
$Date = _DateAdd("D", 2 - $sFirstDate, $iYear & "/01/01")
ElseIf $sFirstDate = 6 Then
$Date = _DateAdd("D", $sFirstDate - 3, $iYear & "/01/01")
ElseIf $sFirstDate = 7 Then
$Date = _DateAdd("D", $sFirstDate - 5, $iYear & "/01/01")
EndIf
;ConsoleWrite(_DateToDayOfWeek($iYear, 1, 1) &"  ")
Local $aDate = StringSplit($Date, "/", 2)
Return _DateAdd("w", $iWeekNum - 1, $aDate[0] & "/" & $aDate[1] & "/" & $aDate[2])
EndFunc   ;==>_DateFromWeekNumber


Func _DateFormat($sDate, $sFormat)
$hGui = GUICreate("")
$idDate = GUICtrlCreateDate($sDate, 10, 10)
GUICtrlSendMsg($idDate, 0x1032, 0, $sFormat) ; or "dddd, MMMM d, yyyy hh:mm:ss tt"); or "hh:mm tt"
$FormatedDate = GUICtrlRead($idDate)
GUIDelete($hGui)
Return $FormatedDate
EndFunc   ;==>_DateFormat
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

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...