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. :praise:

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.