Seite 2 von 2

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 03.01.2020 11:55
von edel
Erster Tag im Monat - 1

gruss

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 03.01.2020 15:29
von Nino
Velindos hat geschrieben:Zur Zeit Lese ich das aktuelle Systemdatum mit dieser Procedure aus!
Ich würde dazu PureBasics Date()-Funktion verwenden.
Velindos hat geschrieben:Was mir aber fehlt ist die Anzahl der Tage eines Monates
Dazu kann man eine kleine "Tabelle" (in Form eines Array oder von "Select"-Anweisungen) mit zusätzlicher Berücksichtigung der Schaltjahre benutzen. Sowas findet sich mehrfach im Forum.

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 03.01.2020 16:36
von HeX0R
Da braucht man doch keine Tabelle, Edel hat doch völlig Recht, mal abgesehen davon, dass es Folgemonat heissen müsste.

Code: Alles auswählen

Procedure GetDaysOfMonth(year, month)
	Protected Result
	
	If month = 12
		month = 0
		year + 1
	EndIf
	month + 1
	Result = Day(Date(year, month, 1, 0, 0, 0) - 1)
	
	ProcedureReturn Result
EndProcedure

Debug GetDaysOfMonth(2020, 2)
Debug GetDaysOfMonth(2019, 2)
Debug GetDaysOfMonth(2020, 12)

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 03.01.2020 16:38
von mk-soft
Hatte ich schon mal gebastelt und wieder verloren ...

Code: Alles auswählen

Procedure DayOfMonth(Date)
  Protected date2, year, month
  year = Year(date)
  month = Month(date)
  If month < 12
    month + 1
  Else
    Month = 1
  EndIf
  date2 = Date(year, month, 1, 0, 0, 0) - 86400
  ProcedureReturn Day(date2)
EndProcedure

Debug DayOfMonth(Date(2020, 2, 15,0 ,0 ,0 ))

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 03.01.2020 16:50
von Nino
@Hexor:
:allright:

Wenn edel etwas ausführlicher geschrieben hätte was er meint, hätte ich es vielleicht verstanden. :-)

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 03.01.2020 17:47
von ccode_new
Hier ist mal meine Version :mrgreen:

Code: Alles auswählen

;untrustworthy
;keine Gewähr

Procedure.s Konvertiere_den_Datumswert(Datumswert.i) ;Konvertierungsfunktion
  Protected.s ein_Datum
  If Datumswert <> -1
    ein_Datum = RSet(Str(Day(Datumswert)), 2, "0") + "." + RSet(Str(Month(Datumswert)), 2, "0") + "." + Str(Year(Datumswert))
    ProcedureReturn ein_Datum
  Else
    ProcedureReturn "Du hast ein ungültiges Datum eingegeben."
  EndIf
EndProcedure

Procedure.s Sage_mir_den_Monatsnamen(Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben.s) ;Anbei: Wieviel Speicher benötigt wohl mein Variablenname?
  Protected.SYSTEMTIME ST
  Protected.s ein_Datum = Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben
  Protected.s{10} Speicher_Puffer
  ST\wDay = Val(StringField(ein_Datum, 1, "."))
  ST\wMonth = Val(StringField(ein_Datum, 2, "."))
  ST\wYear = Val(StringField(ein_Datum, 3, "."))
  If GetDateFormat_(#Null, #Null, @ST, @"MMMM", @Speicher_Puffer, SizeOf(Speicher_Puffer))
    ProcedureReturn Speicher_Puffer
  Else
    ProcedureReturn "Du hast ein ungültiges Datum eingegeben."
  EndIf
EndProcedure

Procedure.i Zaehle_die_Tage_im_Monat(Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben.s)
  Protected.SYSTEMTIME ST
  Protected.s ein_Datum = Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben
  Protected.i ein_Datumswert
  ST\wDay = 1
  ST\wMonth = Val(StringField(ein_Datum, 2, "."))
  ST\wYear = Val(StringField(ein_Datum, 3, "."))
  ein_Datumswert = Date(ST\wYear, ST\wMonth, ST\wDay, 0, 0, 0)
  If ein_Datumswert <> -1
    If ST\wMonth = 12
      ST\wYear + 1
      ST\wMonth = 1
    Else
      ST\wMonth + 1
    EndIf
    ein_Datumswert = Date(ST\wYear, ST\wMonth, ST\wDay, 0, 0, 0) - 1
    If ein_Datumswert > 0
      ProcedureReturn Day(ein_Datumswert)
    EndIf
  Else
    ProcedureReturn -1 ;"= Du hast ein ungültiges Datum eingegeben."
  EndIf
EndProcedure

Procedure.b Ist_es_ein_Schaltjahr(jahr)
  If Date(jahr, 2, 29, 0, 0, 0) <> -1
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

Procedure.i Sage_mir_die_Kalenderwoche(Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben.s) ;Industrienorm DIN 1355
  Protected.SYSTEMTIME ST
  Protected.s ein_Datum = Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben
  Protected.i ein_Datumswert
  Protected.i aktueller_Tach
  Protected.i Wochentach1Jan
  Protected.s neues_Datum
  Protected.i Kalenderwoche
  Protected.b IstSchaltjahr
  ST\wDay = Val(StringField(ein_Datum, 1, "."))
  ST\wMonth = Val(StringField(ein_Datum, 2, "."))
  ST\wYear = Val(StringField(ein_Datum, 3, "."))
  ein_Datumswert = Date(ST\wYear, ST\wMonth, ST\wDay, 0, 0, 0)
  If ein_Datumswert <> -1
    aktueller_Tach = DayOfYear(ein_Datumswert)
    Wochentach1Jan = DayOfWeek(Date(ST\wYear, 1, 1, 0, 0, 0))
    If Wochentach1Jan >= 5
      Wochentach1Jan - 7
    EndIf
    If (aktueller_Tach + Wochentach1Jan) <= 1
      neues_Datum = "31.12."+Str((ST\wYear - 1))
      ProcedureReturn Sage_mir_die_Kalenderwoche(neues_Datum)
    EndIf
    Kalenderwoche = ((aktueller_Tach + Wochentach1Jan + 5) / 7)
    If Kalenderwoche >= 1 And Kalenderwoche <= 53
      If Kalenderwoche = 53
        IstSchaltjahr = Ist_es_ein_Schaltjahr(ST\wYear)
        If Not( (Wochentach1Jan = 4) Or (Wochentach1Jan = -3) Or ((Wochentach1Jan = 3) And IstSchaltjahr) Or ((Wochentach1Jan = -4) And IstSchaltjahr) )
          Kalenderwoche = 1
        EndIf
      EndIf
      ProcedureReturn Kalenderwoche
    EndIf
  Else
    ProcedureReturn -1 ;"= Du hast ein ungültiges Datum eingegeben."
  EndIf
EndProcedure

Procedure.s Sage_mir_den_Wochentag(Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben.s)
  Protected.SYSTEMTIME ST
  Protected.s ein_Datum = Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben
  Protected.s{10} Speicher_Puffer
  ST\wDay = Val(StringField(ein_Datum, 1, "."))
  ST\wMonth = Val(StringField(ein_Datum, 2, "."))
  ST\wYear = Val(StringField(ein_Datum, 3, "."))
  If GetDateFormat_(#Null, #Null, @ST, @"dddd", @Speicher_Puffer, SizeOf(Speicher_Puffer))
    ProcedureReturn Speicher_Puffer
  Else
    ProcedureReturn "Du hast ein ungültiges Datum eingegeben."
  EndIf
EndProcedure

Procedure Orakel(Anweisung.s, Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben.s)
  Protected.i jahr, tag, monat
  Protected.s ein_Datum = Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben
  tag = Val(StringField(ein_Datum, 1, "."))
  monat = Val(StringField(ein_Datum, 2, "."))
  jahr = Val(StringField(ein_Datum, 3, "."))
  Protected.i ein_Datumswert
  ein_Datumswert = Date(jahr, monat, tag, 0, 0, 0)
  If ein_Datumswert <> -1
    Select Anweisung
      Case "Sage_mir_den_Monatsnamen"
        MessageRequester("Das Orakel antwortet:", "Das Datum liegt im "+ Sage_mir_den_Monatsnamen(ein_Datum) + ".", #PB_MessageRequester_Info)
      Case "Sage_mir_den_Wochentag"
        MessageRequester("Das Orakel antwortet:", "Dieses Datum fällt auf einen "+ Sage_mir_den_Wochentag(ein_Datum) + ".", #PB_MessageRequester_Info)
      Case "Zaehle_die_Tage_im_Monat"
        MessageRequester("Das Orakel antwortet:", "Der Monat hat maximal " + Str(Zaehle_die_Tage_im_Monat(ein_Datum)) +" Tage.", #PB_MessageRequester_Info)
      Case "Sage_mir_die_Kalenderwoche"
        If Sage_mir_die_Kalenderwoche(ein_Datum) >= 52 And monat = 1
          jahr - 1
          MessageRequester("Das Orakel antwortet:", "Diese ist die " + Sage_mir_die_Kalenderwoche(ein_Datum) + ". KW vom Jahr " + Str(jahr) + ".", #PB_MessageRequester_Info)
        ElseIf Sage_mir_die_Kalenderwoche(ein_Datum) = 1 And monat = 12
          jahr + 1
          MessageRequester("Das Orakel antwortet:", "Diese ist die " + Sage_mir_die_Kalenderwoche(ein_Datum) + ". KW vom Jahr " + Str(jahr) + ".", #PB_MessageRequester_Info)
        Else
          MessageRequester("Das Orakel antwortet:", "Dies ist die " + Sage_mir_die_Kalenderwoche(ein_Datum) + ". KW im Jahr " + Str(jahr) + ".", #PB_MessageRequester_Info)
        EndIf
      Case "Ist_das_ein_Schaltjahr"
        If Ist_es_ein_Schaltjahr(jahr)
          MessageRequester("Das Orakel antwortet:", "Dies ist ein Schaltjahr.", #PB_MessageRequester_Info)
        Else
          MessageRequester("Das Orakel antwortet:", "Dies ist kein Schaltjahr.", #PB_MessageRequester_Info)
        EndIf
      Default
        MessageRequester("Das Orakel antwortet:", "Deine Anweisung war undeutlich.", #PB_MessageRequester_Info)
    EndSelect
  Else
    MessageRequester("Das Orakel antwortet:", "Ich kann mit deinem Datum nichts anfangen.", #PB_MessageRequester_Info)
  EndIf
EndProcedure

;-Frage das Orakel
Global.s akt_Datum = Konvertiere_den_Datumswert(Date())

Orakel("Sage_mir_den_Monatsnamen", akt_Datum)
Orakel("Sage_mir_den_Wochentag", akt_Datum)
Orakel("Zaehle_die_Tage_im_Monat", akt_Datum)
Orakel("Sage_mir_die_Kalenderwoche", akt_Datum)
Orakel("Ist_das_ein_Schaltjahr", akt_Datum)


Re: Kalender Monat in Klartext vom Sytem

Verfasst: 03.01.2020 22:33
von HeX0R
Ist dir langweilig? :lol:

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 04.01.2020 13:06
von Velindos
Hallo Leute,

gleich vor ab, besten DANK für eure Unterstützung und lebhafte Diskusion!
Ansatz war das ich mir die Tabelle erspare was nun der Fall ist.
Jetzt ist mein Kalender für 2020 gerüstet ...

Noch ein gutes und gruss ... Velindos!