Liste die den nächsten Monat mit Tagesangabe darstellt.

  • Hallo an alle,

    wie hoffentlich schon in der Überschrift ersichtlich, versuche ichden nächsten monat auflisten zu lassen, ich habe die Idee verfolgt
    soviele Informationen wie möglich abzufragen so das ich sie im Script dafür verwenden kann, jedoch komme ich leider nicht auf den passenden ansatz,
    Das script soll im prinzip eine Liste erstellen die folgendes enthält

    Nächster Monat :
    1.10.13 Mo
    2.10.13 Di

    usw.

    Jedoch komme ich einfach nicht darauf wie das gehen soll, hier noch mein bisheriger Ansatz.

    Spoiler anzeigen
    [autoit]

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

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If @MON + 1 = 13 Then ;Wenn die Berechnung der Nummer des aktuellen
    $monatN = 1 ;Monats 13 Ergibt, erkennt die Rechnung das es nur
    $monat0 = @MON ;12 Monate Gibt und setzt den Monat auf 1
    $JahrN = @YEAR + 1 ;Und geht ein jahr vorwärts
    Else
    $monatN = @MON + 1 ;Wenn es jedoch einen Monat von 1-12 ausgibt
    $monat0 = @MON ;definiert er den aktuellen Monat und den Neuen
    $JahrN = @YEAR ;natürlich im aktuellen Jahr =)
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If @WDAY = 2 Then
    $Tagname = "Montag"
    $TagWoche00 = 1 ;1 Tag /W
    $TagKue = "Mo"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If @WDAY = 3 Then
    $Tagname = "Dienstag"
    $TagWoche00 = 2 ;2 Tag /W
    $TagKue = "Di"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If @WDAY = 4 Then
    $Tagname = "Mittwoch"
    $TagWoche00 = 3 ;3 Tag /W
    $TagKue = "Mi"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If @WDAY = 5 Then
    $Tagname = "Donnerstag"
    $TagWoche00 = 4 ;4 Tag /W
    $TagKue = "Do"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If @WDAY = 6 Then
    $Tagname = "Freitag"
    $TagWoche00 = 5 ;5 Tag /W
    $TagKue = "Fr"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If @WDAY = 7 Then
    $Tagname = "Samstag"
    $TagWoche00 = 6 ;6 Tag /W
    $TagKue = "Sa"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If @WDAY = 1 Then
    $Tagname = "Sonntag"
    $TagWoche00 = 7 ;7 Tag /W
    $TagKue = "So"
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $MonatnameN = _DateToMonth($monatN) ;Monatsnamenerkennung

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If $MonatnameN = "January" Then
    $MonatnameN2 = "Januar"
    $monat00 = 1 ;1ter Monat
    $MonKue = "Jan"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $MonatnameN = "February" Then
    $MonatnameN2 = "Februar"
    $monat00 = 2 ;2ter Monat
    $MonKue = "Feb"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $MonatnameN = "March" Then
    $MonatnameN2 = "März"
    $monat00 = 3 ;3ter Monat
    $MonKue = "Mär"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $MonatnameN = "April" Then
    $MonatnameN2 = "April"
    $monat00 = 4 ;4ter Monat
    $MonKue = "Apr"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $MonatnameN = "May" Then
    $MonatnameN2 = "Mai"
    $monat00 = 5 ;5ter Monat
    $MonKue = "Mai"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $MonatnameN = "June" Then
    $MonatnameN2 = "Juni"
    $monat00 = 6 ;6ter Monat
    $MonKue = "Jun"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $MonatnameN = "July" Then
    $MonatnameN2 = "July"
    $monat00 = 7 ;7ter Monat
    $MonKue = "Jul"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $MonatnameN = "August" Then
    $MonatnameN2 = "August"
    $monat00 = 8 ;8ter Monat
    $MonKue = "Aug"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $MonatnameN = "September" Then
    $MonatnameN2 = "September"
    $monat00 = 9 ;9ter Monat
    $MonKue = "Sep"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $MonatnameN = "October" Then
    $MonatnameN2 = "Oktober"
    $monat00 = 10 ;10ter Monat
    $MonKue = "Okt"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $MonatnameN = "November" Then
    $MonatnameN2 = "November"
    $monat00 = 11 ;11ter Monat
    $MonKue = "Nov"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $MonatnameN = "December" Then
    $MonatnameN2 = "Dezember"
    $monat00 = 12 ;12ter Monat
    $MonKue = "Dez"
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $iDaysN = _DateDaysInMonth($JahrN, $monatN) ;wie viele tage hat der nächste Monat
    $iDaysN2 = _DateDaysInMonth($JahrN, @MON) ;wie viele tage hat der aktuelle Monat
    $DayNumN = String($iDaysN) ; Ausgabe $iDays als String

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $ShiftNum = $DayNumN * 3 ; Anzahl Schichten
    $FShiftNum = $DayNumN ; Anzahl Früh Schichten
    $SShiftNum = $DayNumN ; Anzahl Spät Schichten
    $NSchiftNum = $DayNumN ; Anzahl Nacht Schichten
    $FSLShiftNum = $DayNumN ; Anzahl Früh Schichtleitungen
    $SSLShiftNum = $DayNumN ; Anzahl Spät Schichtleitungen
    $NSLShiftNum = $DayNumN ; Anzahl Nacht Schichtleitungen
    $date = StringSplit(_NowDate(), ".")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $daydif = $iDaysN2 - $date[1] ; Verbleibende Tage Aktueller Monat

    [/autoit]

    Gruß Eistee

  • Naja du bist doch fast fertig und hast bereits alles was du dazu brauchst, auch wenn du das ziemlich umständlich machst.

    1. Du kennst das heutige Datum.
    2. Du kennst den heutigen Wochentag.
    3. Du weist wieviele Tage der aktuelle Monat noch haben wird.
    4. Du weist wieviele Tage der nächste Monat haben wird.

    Das sollte ausreichen. Nun musst du nur noch den richtigen Wochentag für den Monatsersten des kommenden Monats ermitteln, dazu würde ich einfach die noch verbleibenden Tage des Monats hernehmen und den Tag solange ändern bis du am Ende ankommst, dann weist du welcher Tag der Monatserste ist und kannst von hier aus dann wiederum weiterzählen bis alle Monatstage erstellt wurden. Du brauchst dafür lediglich eine Schleife, ein Array und ein bisschen Logik. Vermutlich bieten die Datumsfunktionen oder spezielle Date UDF's aber bereits eine Möglichkeit um den Wochentag eines gegebenen Datums zu bestimmen, wenn du da nichts finden solltest musst du es eben wie oben beschrieben selbst ermitteln.

    EDIT: Eine Schleife braucht man eigentlich garnicht, etwas rechnen würde es auch tun um ans Ziel zu kommen und den korrekten Tag aus dem Array auszulesen.

  • Hast du dir in der Hilfe mal die Date-Funktionen angeschaut mittlerweile?

    [autoit]


    #include <Date.au3>

    [/autoit][autoit][/autoit][autoit]

    For $i = 0 To 3 Step 1
    MsgBox(64, "DateTime", _DateTimeFormat(_DateAdd('d', $i, _NowCalcDate()), 1))
    Next

    [/autoit]

    Grüße Yaerox

    Grüne Hölle

  • Was auch immer du für ein Programm schreibst, du fragtest nach der Möglichkeit die Tage des kommenden Monats zu ermitteln in einem von dir gewünschten Format. Nun schauen wir uns die Funktionen mal genauer an:

    [autoit]

    _NowCalcDate() ;Returns the current Date in format YYYY/MM/DD.

    [/autoit][autoit]

    _DateAdd; Calculates a new date based on a given date and add an interval.

    [/autoit][autoit]

    _DateTimeFormat ;Returns the date in the PC's regional settings format.

    [/autoit]

    So, was tu ich also in den Zeilen. Die Schleife sollte eig. klar sein, sonst würde ich mir die Basics nochmal anschauen. Ich sage für $i = 0 bis 3 (also 4 Durchläufe) gebe eine MessageBox aus mit dem heutigen Datum + $i Tage. Sprich Du bekommst das Datum von heute, morgen, übermorgen, und überübermorgen.

    Ich habe es nun in einer MessageBox ausgeben lassen. Du müsstest also in deiner Anwendung wenn du die nächsten 30 Tage haben möchstest die Schleiße vergrößern, also statt To 3 To n. Folgend musst du wissen was du damit vor hast. Wenn du all diese Daten irgendwo speichern willst du das indem du den Rückgabewert in einem Feld/einer Variable oder sonst so hinschreibst und speicherst.

    Grüße Yaerox

    Grüne Hölle

    • Offizieller Beitrag

    Hier mal ein einfaches Kalenderprogramm:

    Spoiler anzeigen
    [autoit]


    #include <ComboConstants.au3>
    #include <Date.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $sMonthNames = 'Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember'
    Global $aMonthNames = StringSplit($sMonthNames, '|')
    Global $aWeekDays = StringSplit('Mo,Di,Mi,Do,Fr,Sa,So', ',')
    Global $aIDDays[42]
    Global $aIDWeekNr[6]
    $hGui = GUICreate('Kalender', 640, 300)
    $idMonth = GUICtrlCreateCombo('', 10, 28, 150, 32, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, $sMonthNames, $aMonthNames[@MON])
    GUICtrlSetFont(-1, 12, 600, 0, 'Tahoma', 4)
    For $i = 1 To 7
    GUICtrlCreateLabel($aWeekDays[$i], 174 + $i * 40, 28, 32, 22, $SS_CENTER)
    GUICtrlSetFont(-1, 14, 400, 0, 'Arial', 4)
    GUICtrlSetBkColor(-1, 0x4444AA)
    GUICtrlSetColor(-1, 0xFFFFFF)
    Next
    For $i = 0 To 5
    $aIDWeekNr[$i] = GUICtrlCreateLabel('', 160, 68 + $i * 40, 32, 22, $SS_CENTER)
    GUICtrlSetFont(-1, 14, 400, 0, 'Arial', 4)
    GUICtrlSetBkColor(-1, 0x4444AA)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetState(-1, $GUI_HIDE)
    For $j = 0 To 6
    $aIDDays[$i * 7 + $j] = GUICtrlCreateLabel('', 214 + $j * 40, 68 + $i * 40, 32, 22, $SS_CENTER)
    GUICtrlSetFont(-1, 14, 400, 0, 'Arial', 4)
    Next
    Next
    GUISetState()
    _SetCalendar(@YEAR, @MON)

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idMonth
    $sMonth = GUICtrlRead($idMonth)
    For $i = 1 To $aMonthNames[0]
    If $sMonth = $aMonthNames[$i] Then _SetCalendar(@YEAR, $i)
    Next
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _SetCalendar($iYear, $iMon)
    Local $iDaysInMonth = _DateDaysInMonth($iYear, $iMon), $iDayInMonth = 0
    Local $iDayOfWeek = _DateToDayOfWeekISO($iYear, $iMon, 1)
    For $i = 0 To 5
    GUICtrlSetState($aIDWeekNr[$i], $GUI_HIDE)
    GUICtrlSetData($aIDWeekNr[$i], '')
    Next
    For $i = 0 To 41
    GUICtrlSetData($aIDDays[$i], '')
    Next
    For $i = 0 To 5
    For $j = 0 To 6
    If $iDayOfWeek - 1 <= $i * 7 + $j Then
    $iDayInMonth += 1
    GUICtrlSetState($aIDWeekNr[$i], $GUI_SHOW)
    GUICtrlSetData($aIDWeekNr[$i], _WeekNumberISO($iYear, $iMon, $iDayInMonth))
    GUICtrlSetData($aIDDays[$i * 7 + $j], $iDayInMonth)
    GUICtrlSetColor($aIDDays[$i * 7 + $j], 0x000000)
    EndIf
    If _DateToDayOfWeekISO($iYear, $iMon, $iDayInMonth) = 7 Then
    GUICtrlSetFont($aIDDays[$i * 7 + $j], 14, 800, 0, 'Arial', 4)
    GUICtrlSetColor($aIDDays[$i * 7 + $j], 0xFF2222)
    EndIf
    If $iDayInMonth >= $iDaysInMonth Then ExitLoop 2
    Next
    Next
    EndFunc

    [/autoit]
  • Die letzte Woche ja, sofern sie nicht komplett ist, aber bei dir wird auch die vorletzte (23.-29. Dezember) schon als Woche 1 angezeigt und die letzte Woche dann nochmals als Woche 1.

  • Win 7 64 Bit / AutoIt (ich muss es jedesmal nachschlagen "-.-) 3.3.8.1 ist 23. - 29. Dezember Woche 52 und 30. + 31. Woche 1 des folgejahres.

    Grüße Yaerox

    Grüne Hölle

  • Bei Version 3.3.9.5 auch.

    Ich denke nicht, dass sich in den letzten paar AutoIt Versionen so viel geändert hat. Und am Betriebssystem sollte es ja eigentlich auch nicht liegen können.