Seite 1 von 2
Auslesen des Tages aus dem Datum
Verfasst: 02.12.2011 12:12
von Velindos
Hallo,
gibt es eine Funktion wie ich den aktuellen Tag(Montag, Dienstag etc.) auslesen kann?
Code: Alles auswählen
DatumKlar$=FormatDate("%dd.%mm.%yyyy", Date())
MonatsNummer$=Mid(DatumKlar$,4,2)
TagNummer$=Mid(DatumKlar$,0,2)
JahrNummer$=Mid(DatumKlar$,7,4)
Debug TagNummer$+":"+MonatsNummer$+":"+JahrNummer$
Monat=Val(MonatsNummer$)
If Monat =12: Monat$="Dezember ":EndIf
Debug DatumKlar$
Debug MonatsNummer$
Debug Monat$
Debug TagNummer$+":"+Monat$+":"+JahrNummer$
Gruss ... Velindos
Re: Auslesen des Tages aus dem Datum
Verfasst: 02.12.2011 12:30
von Danilo
Code: Alles auswählen
Select DayOfWeek(Date())
Case 0 : Debug "Sunday"
Case 1 : Debug "Monday"
Case 2 : Debug "Tuesday"
Case 3 : Debug "Wednesday"
Case 4 : Debug "Thursday"
Case 5 : Debug "Friday"
Case 6 : Debug "Saturday"
EndSelect
Re: Auslesen des Tages aus dem Datum
Verfasst: 02.12.2011 12:36
von Kiffi
Code: Alles auswählen
Debug StringField("Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", DayOfWeek(Date())+1, ",")

Re: Auslesen des Tages aus dem Datum
Verfasst: 02.12.2011 12:49
von Velindos
Hallo,
besten Dank für eure rasche Hilfe! Die Sache ist elegant!
Code: Alles auswählen
Debug Aktueller=DayOfWeek(Date(2011, 12, 02, 0, 0, 0)) ; Gibt '1' für Montag aus.
;Nehme an die 0,0,0 sind die Uhrzeiit
;0 : Sonntag
;1 : Montag
;2 : Dienstag
;3 : Mittwoch
;4 : Donnerstag
;5 : Freitag
;6 : Samstag
Select DayOfWeek(Date())
Case 0 : Debug "Sunday"
AktuellTag$="Sonntag"
Case 1 : Debug "Monday"
AktuellTag$="Montag"
Case 2 : Debug "Tuesday"
AktuellTag$="Dienstag "
Case 3 : Debug "Wednesday"
AktuellTag$="Mittwoch "
Case 4 : Debug "Thursday"
AktuellTag$="Donnerstag"
Case 5 : Debug "Friday"
AktuellTag$="Freitag"
Case 6 : Debug "Saturday"
AktuellTag$="Samstag"
EndSelect
Debug AktuellTag$
Debug StringField("Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", DayOfWeek(Date())+1, ",")
AktuellTag$ = StringField("Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", DayOfWeek(Date())+1, ",")
Gibt es die StringField auch für die Monate(Januar etc.)?
Habs so gelöst
Code: Alles auswählen
AktuellTTag$ = StringField("Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", Month(Date()), ",")
Nochmals Danke!
Gruss ... Velindos
Re: Auslesen des Tages aus dem Datum
Verfasst: 02.12.2011 19:59
von STARGÅTE
Ich habe mir mal vor einiger Zeit 'n Macro/Prozedur geschrieben, die das FormatDate() von PB ersetzt und den Syntax von PHP nutzt, u.a. auch für ausgeschriebene Wochen-/Monatstage (deutsch):
Code: Alles auswählen
#FormatDateEx_WeekdayName = "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag"
#FormatDateEx_MonthName = "Jannuar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember"
CompilerIf Defined(CharacterArray, #PB_Structure) = #False
Structure CharacterArray
c.c[0]
EndStructure
CompilerEndIf
Procedure.s FormatDateEx(Mask.s, Date.i)
Protected *Character.CharacterArray = @Mask
Protected Index.i, FixIndex.i, String.s
If *Character
While *Character\c[Index]
If *Character\c[Index] = '%'
String + PeekS(@*Character\c[FixIndex], Index-FixIndex)
Select *Character\c[Index+1]
Case '%'
String + "%"
Case 'd'
String + RSet(Str(Day(Date)), 2, "0")
Case 'D'
String + LSet(StringField(#FormatDateEx_WeekdayName,DayOfWeek(Date),","), 2)
Case 'F'
String + StringField(#FormatDateEx_MonthName,Month(Date),",")
Case 'g'
String + Str((Hour(Date)+11)%12+1)
Case 'G'
String + Str(Hour(Date))
Case 'h'
String + RSet(Str((Hour(Date)+11)%12+1), 2, "0")
Case 'H'
String + RSet(Str(Hour(Date)), 2, "0")
Case 'i'
String + RSet(Str(Minute(Date)), 2, "0")
Case 'j'
String + Str(Day(Date))
Case 'l'
String + StringField(#FormatDateEx_WeekdayName,DayOfWeek(Date),",")
Case 'm'
String + RSet(Str(Month(Date)), 2, "0")
Case 'M'
String + LSet(StringField(#FormatDateEx_MonthName,Month(Date),","), 3)
Case 'n'
String + Str(Month(Date))
Case 's'
String + RSet(Str(Second(Date)), 2, "0")
Case 'w'
String + Str(DayOfWeek(Date))
Case 'y'
String + Right(Str(Year(Date)),2)
Case 'Y'
String + Str(Year(Date))
Case 'z'
String + Str(DayOfYear(Date))
EndSelect
Index + 1
FixIndex = Index+1
EndIf
Index + 1
Wend
String + PeekS(@*Character\c[FixIndex], Index-FixIndex)
EndIf
ProcedureReturn String
EndProcedure
Macro FormatDate(Mask, Date)
FormatDateEx(Mask, Date)
EndMacro
Debug FormatDate("Heute ist %l, der %j. %F %Y, %H:%i Uhr", Date())
Re: Auslesen des Tages aus dem Datum
Verfasst: 03.12.2011 15:27
von Velindos
Hallo,
danke für deinen Vorschlag!
Gibt es in dieser Struktur auch die Kalenderwoche, so ähnlich wie "DayOfWeek" jedoch für "WeekOfYear" ?
Gruss ... Velindos
Re: Auslesen des Tages aus dem Datum
Verfasst: 03.12.2011 22:40
von Pelagio
Hallo Velindos,
mit der Woche ist es etwas schwieriger aber ich glaube ich habe etwas das für den Anfang deinen Wünschen entspräche, sicherlich noch ausbaufähig da es schon etwas angestaubt ist.
Code: Alles auswählen
;/Ausgabe der Kalenderwoche
;/KalenderWoche = GetWeek(Date())
Procedure.b GetWeek(JJMMTT.i)
Protected KaWo.b
Protected WT4J.b ; Wochentag des 4. Januar (Mo.[1]-So.[7]).
Protected Mo1W.b ; Mo1W.b (Montag der KW1) ist der x'te Tag des Jahres
Protected WTGD.b ; Wochentag des gesuchten Datums.
Protected MoGD.w ; Montag in der Kalenderwoche in der das gesuchte Datum liegt, ist der x'te Tag des Jahres.
Protected JTDate.w ; Der "Jahrestag" des gesuchten Datums.
Protected WT4JNewY.b ; Der Wochentag des 4. Januar des Folgejahres.
Protected LastYDay.w ; Der letzte Tag des Jahres in dem der gesuchte Tag liegt (365 oder 366)
;{- Datum Gesplittet
Protected PJahr.w = Year (JJMMTT)
Protected PMonat.b = Month(JJMMTT)
Protected PTag.b = Day (JJMMTT)
;}
;{- KW Ermittlung während des Jahres
WT4J = DayOfWeek(Date(PJahr, 1, 4, 0, 0, 0)): If (WT4J=0): WT4J = 7: EndIf
Mo1W = (4 - WT4J)
WTGD = DayOfWeek(Date(PJahr, PMonat, PTag, 0, 0, 0)): If (WTGD=0): WTGD = 7: EndIf
MoGD = (DayOfYear(Date(PJahr, PMonat, PTag, 0, 0, 0)) - WTGD)
KaWo = (Int((MoGD.w-Mo1W.b)/7) + 1)
;}
;{- KW Ermittung in der letzten Dezemberwoche
If (PMonat=12)
JTDate = DayOfYear(Date(PJahr, PMonat, PTag, 0, 0, 0))
WT4JNewY = DayOfWeek(Date(PJahr+1, 1, 4, 0, 0, 0)): If (WT4JNewY=0): WT4JNewY = 7: EndIf
LastYDay = DayOfYear(Date(PJahr, 12, 31, 0, 0, 0))
If (LastYDay-JTDate)<(WT4JNewY-4): KaWo = 1: EndIf
EndIf
;}
;{- KW Ermittlung in der ersten Januarwoche
If (PMonat=1) And (PTag<4) And (WT4J<WTGD)
KaWo = GetWeek(ParseDate("%yyyy/%mm/%dd", Str(PJahr-1)+"/12/31"))
EndIf
;}
ProcedureReturn KaWo
EndProcedure
Re: Auslesen des Tages aus dem Datum
Verfasst: 05.12.2011 07:51
von Velindos
Hallo,
danke für deinen Vorschlag, Bekomme aber "ctGetWeek ist keine Funktion"!
Gruss ... Velindos
Re: Auslesen des Tages aus dem Datum
Verfasst: 05.12.2011 09:30
von Pelagio
Oh Velindos,
ich habe dies nicht gesehen, eigentlich war der Name der Procedure 'ctGetWeek' nur hierfür habe ich das 'ct' weggelassen (GetWeek) aber dabei übersehen das die Procedure sich in bestimmten Fällen selber Aufruft. Ich habe es im Source geändert.

Re: Auslesen des Tages aus dem Datum
Verfasst: 05.12.2011 09:43
von rolaf
Das sieht auch irgendwie kompliziert aus. Man braucht doch eigentlich nur die bisherigen Tage des Jahres (DayOfYear()) durch 7 zu teilen, Rest verwerfen und dann noch prüfen welcher Tag (DayOfWeek()) der 4.1. war um evt. eine Woche zu addieren. Oder, denk ich zu einfach? *kopfkratz*
Die erste Woche des Jahres ist...
...die erste Woche, in die mindestens vier Tage des neuen Jahres fallen (ISO 8601).
Die deutschsprachige Kalender-Industrie hält sich ausnahmslos an die internationale
Norm ISO 8601 (1973), die als letzten Tag der Woche den Sonntag bestimmt, statt des
Samstags/Sonnabends/Sabbats, wie es in der jahrtausende-langen jüdisch-christlichen
Tradition üblich war. Als KW 1 eines Jahres gilt der genannten Norm zufolge die Woche,
die den 4. Januar enthält.