Auslesen des Tages aus dem Datum

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Auslesen des Tages aus dem Datum

Beitrag 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
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Auslesen des Tages aus dem Datum

Beitrag 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
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Auslesen des Tages aus dem Datum

Beitrag von Kiffi »

Code: Alles auswählen

Debug StringField("Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", DayOfWeek(Date())+1, ",")
;-)
a²+b²=mc²
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Auslesen des Tages aus dem Datum

Beitrag 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
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Auslesen des Tages aus dem Datum

Beitrag 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())
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Auslesen des Tages aus dem Datum

Beitrag 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
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: Auslesen des Tages aus dem Datum

Beitrag 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 
Zuletzt geändert von Pelagio am 05.12.2011 09:23, insgesamt 1-mal geändert.
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Auslesen des Tages aus dem Datum

Beitrag von Velindos »

Hallo,
danke für deinen Vorschlag, Bekomme aber "ctGetWeek ist keine Funktion"!
Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: Auslesen des Tages aus dem Datum

Beitrag 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:
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Auslesen des Tages aus dem Datum

Beitrag 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.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Antworten