Woche und Tage finden
Moderator: Moderatoren
- Muecke
- 1000 working lines a day
- Beiträge: 623
- Registriert: Di, 24. Okt 2006 7:19
- Wohnort: Samstagern CH
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 9 Mal
- Kontaktdaten:
Woche und Tage finden
Hallo zusammen,
bin an Statistiken aufzuarbeiten und sollte folgendes haben:
zum Beispiel: Wann ist Woche 5 und welcher Tage liegen in dieser Woche.
Gruss Thomas
bin an Statistiken aufzuarbeiten und sollte folgendes haben:
zum Beispiel: Wann ist Woche 5 und welcher Tage liegen in dieser Woche.
Gruss Thomas
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Hallo Thomas,
da hast Du ja 2 Probleme zu bewältigen.
1) Welche Woche ist? In Deutschland ist Woche 1 die, wo 4 oder mehr Tage drin sind. Sonst ist es die letzte Woche des Vorjahres. Das lässt sich ja noch relativ leicht berechnen. Wenn Du den ersten Montag kennst ...
2) Welche Tage in der Woche sind ist schon schwieriger. Denn Du musst den Wochentag bestimmen, aber auch Schaltjahre berücksichtigen. Schau Dir da mal den Artikel in Wikipedia unter "Wochentag" an, ob Dir das weiterhilft. Ich hab auch noch folgendes gefunden (ungeprüft!)
- Zunächst verminderst Du das Jahr um 1, wenn das Datum in einem Januar oder Februar liegt.
- Danach muß das Jahr zwischen 1900 und 2099 liegen, ansonsten kommst Du nicht direkt zum Ziel.
- Ist das der Fall, ziehst Du 1900 vom Jahr ab, vergißt also im wesentlichen nur die ersten zwei Stellen.
- Dann teilst Du das Jahr durch 4, rundest das Ergebnis ab, und addierst nochmal das Jahr, den Tag und die zum Monat gehörende Zahl hinzu.
- Das Ergebnis teilst Du durch 7, so daß ein Teilungsrest von 0 bis 6 übrig bleibt, der dem Wochentag entspricht, 0 etwa korresnpondiert zu Sonntag.
Ich habe auch noch den Clipper-Code, um Ostern zu berechnen. Den ausführlicheren für Berechnungen ab 1536 glaube ich (es gibt noch einen, der gilt aber nicht so lange zurück). Wenn Dich das interessiert: Melde Dich einfach.
Jan
da hast Du ja 2 Probleme zu bewältigen.
1) Welche Woche ist? In Deutschland ist Woche 1 die, wo 4 oder mehr Tage drin sind. Sonst ist es die letzte Woche des Vorjahres. Das lässt sich ja noch relativ leicht berechnen. Wenn Du den ersten Montag kennst ...
2) Welche Tage in der Woche sind ist schon schwieriger. Denn Du musst den Wochentag bestimmen, aber auch Schaltjahre berücksichtigen. Schau Dir da mal den Artikel in Wikipedia unter "Wochentag" an, ob Dir das weiterhilft. Ich hab auch noch folgendes gefunden (ungeprüft!)
- Zunächst verminderst Du das Jahr um 1, wenn das Datum in einem Januar oder Februar liegt.
- Danach muß das Jahr zwischen 1900 und 2099 liegen, ansonsten kommst Du nicht direkt zum Ziel.
- Ist das der Fall, ziehst Du 1900 vom Jahr ab, vergißt also im wesentlichen nur die ersten zwei Stellen.
- Dann teilst Du das Jahr durch 4, rundest das Ergebnis ab, und addierst nochmal das Jahr, den Tag und die zum Monat gehörende Zahl hinzu.
- Das Ergebnis teilst Du durch 7, so daß ein Teilungsrest von 0 bis 6 übrig bleibt, der dem Wochentag entspricht, 0 etwa korresnpondiert zu Sonntag.
Ich habe auch noch den Clipper-Code, um Ostern zu berechnen. Den ausführlicheren für Berechnungen ab 1536 glaube ich (es gibt noch einen, der gilt aber nicht so lange zurück). Wenn Dich das interessiert: Melde Dich einfach.
Jan
Zuletzt geändert von Jan am Di, 24. Okt 2006 17:41, insgesamt 1-mal geändert.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 105 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Hallo, Thomas.
Die erste Kalenderwoche eines Jahres ist diejenige, in der der 4. Januar liegt. Kalenderwochen beginnen in Europa am Montag. Alles andere läßt sich relativ leicht berechnen. Ich benutze die Xbase-Tools, die enthalten Funktionen wie Week() für die Kalenderwoche und viele andere, aber genaugenommen ist das überaus simpel.
Die erste Kalenderwoche eines Jahres ist diejenige, in der der 4. Januar liegt. Kalenderwochen beginnen in Europa am Montag. Alles andere läßt sich relativ leicht berechnen. Ich benutze die Xbase-Tools, die enthalten Funktionen wie Week() für die Kalenderwoche und viele andere, aber genaugenommen ist das überaus simpel.
Herzlich,
Tom
Tom
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 105 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Code: Alles auswählen
FUNCTION MyDow(dDate)
* Da sich Dow() auf den Sonntag bezieht, benötigen wir eine Funktion,
* die den Montag als 1 bewertet
IF Dow(dDate) = 1
RETURN 7
ENDIF
RETURN Dow(dDate)-1
FUNCTION MyBow(dDate)
* gibt den ersten Tag einer Woche zurück (Montag)
Do While MyDow(dDate) > 1
dDate --
EndDo
RETURN dDate
FUNCTION MyBoY(dDate)
* erster Tag des Jahres
RETURN CtoD("01.01."+Str(Year(dDate),4,0))
FUNCTION Week(dDate)
* errechnet die Kalenderwoche eines Jahres
LOCAL n, dTempDate := MyBoY(dDate) + 3 // 4. Januar
IF dDate >= dTempDate
n := INT((dDate - MyBow(dTempDate)/7)) + 1
ENDIF
* dDate liegt vor dem 4. Januar
IF MyDow(dDate) > MyDow(dTempDate) // vorige Woche
RETURN Week(MyBoy(dDate)-1)
ENDIF
RETURN 1
![Cool 8)](./images/smilies/cool.gif)
Kalenderwoche: Week(dDate)
Erster Tag in dieser Woche: MyBow(dDate)
Letzter Tag in dieser Woche: MyBow(dDate)+6
Zuletzt geändert von Tom am Mi, 25. Okt 2006 13:19, insgesamt 1-mal geändert.
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
hallo ist diese Funktion nicht eher MyBoM() = 1. Tag im MonatTom hat geschrieben:Code: Alles auswählen
FUNCTION MyBoY(dDate) * erster Tag des Jahres RETURN CtoD("01."+Str(Month(dDate),2,0)+"."+Str(Year(dDate),4,0))
Erster Tag im Jahr sollte das sein:
Code: Alles auswählen
FUNCTION MyBoY(dDate)
* erster Tag des Jahres
RETURN CtoD("01.01."+Str(Year(dDate),4,0))
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 105 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Hallo, Thomas.
Wenn Du den oben geposteten Code nimmst, dann gibt Dir:
dDate := Ctod("20.01.2006")
Week(dDate) // die Kalenderwoche dieses Tages (in diesem Fall 3)
MyBow(dDate) // den ersten Tag (Montag)
und demzufolge
MyBow(dDate) + 1 // den zweiten (Dienstag)
bis
MyBow(dDate) + 6 // den letzten (Sonntag)
Was fehlt Dir noch?![Question :?:](./images/smilies/question.gif)
Wenn Du den oben geposteten Code nimmst, dann gibt Dir:
dDate := Ctod("20.01.2006")
Week(dDate) // die Kalenderwoche dieses Tages (in diesem Fall 3)
MyBow(dDate) // den ersten Tag (Montag)
und demzufolge
MyBow(dDate) + 1 // den zweiten (Dienstag)
bis
MyBow(dDate) + 6 // den letzten (Sonntag)
Was fehlt Dir noch?
![Question :?:](./images/smilies/question.gif)
Herzlich,
Tom
Tom
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
31.12.07 welche KW
moin,
ich sahe gerade das ich wohl einen BUG in meiner Kalenderwoche Function
hatte den "heute" ist doch wohl die 53 KW und noch nicht die 1 KW ...
also prüft mal eure KW Function ...![Smile :)](./images/smilies/smile.gif)
guten Rutsch ins neue Jahr 2008 (Schaltjahr...)
gruss by OHR
Jimmy
ich sahe gerade das ich wohl einen BUG in meiner Kalenderwoche Function
hatte den "heute" ist doch wohl die 53 KW und noch nicht die 1 KW ...
also prüft mal eure KW Function ...
![Smile :)](./images/smilies/smile.gif)
guten Rutsch ins neue Jahr 2008 (Schaltjahr...)
gruss by OHR
Jimmy
Code: Alles auswählen
sorry ist gaaannnnnz alter Cl*pper Code ...
FUNCTION WOCHEJAHR( m_datum )
** SYNTAX : <ExpN> = WOCHEJAHR(<ExpD>)
** <ExpN> = Rückgabe Wochen Nummer
** <ExpD> = zu bearbeitendes Datum
**
** ZWECK : Aus Datum die Kalender Woche des Jahres berechnen
** HINWEIS : der erste Tag einer Woche ist Montag !
** BEISPIEL: ? WocheJahr(CTOD("29.11.91"))
LOCAL m_a // Tag
LOCAL m_woche // Woche
m_a := DOW( CTOD( "31.12." + STR( YEAR( m_datum - 7 ), 4 ) ) )
m_a := IF( m_a = 1, 7, m_a - 1 )
m_woche := ROUND( ( m_datum - CTOD( "1.1." + STR( YEAR( m_datum ), 4 ) ) ;
+ 8 - IF( DOW( m_datum ) = 1, 7, DOW( m_datum ) - 1 ) ) / 7, 0 )
* m_woche := IF( m_woche < 53, m_woche, IF( m_a > 3, m_woche, 1 ) )
m_woche := IF( m_woche < 54, m_woche, IF( m_a > 3, m_woche, 1 ) )
m_woche := INT( IF( m_woche = 0, IF( m_a > 4, 52, 53 ), m_woche ) )
Zuletzt geändert von AUGE_OHR am Mo, 31. Dez 2007 1:50, insgesamt 1-mal geändert.
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
es kommt auch da schon die 1st KW raus, oder ?
gruss by OHR
Jimmy
auch die korrigierte stimmt nicht für heute 31.12.2007Tom hat geschrieben:Ohne Gewähr, weil direkt in den Editor getippt.Code: Alles auswählen
FUNCTION MyBoY(dDate) * erster Tag des Jahres RETURN CtoD("01.01."+Str(Year(dDate),4,0))
![]()
Code: Alles auswählen
PROCEDURE MAIN
LOCAL dDate
SET DATE GERMAN
SET CENTURY ON
CLS
? dDate := DATE() // 31.12.2007
? MyDow(dDate)
WAIT
RETURN
gruss by OHR
Jimmy
- Martin Altmann
- Foren-Administrator
- Beiträge: 16586
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Jimmy,
je nach Definition muss das doch auch! Die meisten Tage dieser Woche liegen doch schon im neuen Jahr...
Viele Grüße,
Martin
je nach Definition muss das doch auch! Die meisten Tage dieser Woche liegen doch schon im neuen Jahr...
Viele Grüße,
Martin
![grommit :grommit:](./images/smilies/grommit.gif)
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Muecke
- 1000 working lines a day
- Beiträge: 623
- Registriert: Di, 24. Okt 2006 7:19
- Wohnort: Samstagern CH
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 9 Mal
- Kontaktdaten:
Hi Jymmy,
Was man noch ändern sollte ist
Danach sollte man die richtigen Kalenderwoche bekommen, wie auch die Tage Montag bis Sonntag.
Gruss Thomas
Was man noch ändern sollte ist
Code: Alles auswählen
FUNCTION Week(dDate) //errechnet die Kalenderwoche eines Jahres
LOCAL n, dTempDate := MyBoY(dDate) + 3 // 4. Januar
IF dDate >= dTempDate
n := INT( ( (dDate - MyBow(dTempDate))/7) ) + 1
[color=red]n := IF(n %53==0 , 1, n )[/color]
RETURN n
ENDIF
* dDate liegt vor dem 4. Januar
IF MyDow(dDate) > MyDow(dTempDate) // vorige Woche
RETURN Week(MyBoy(dDate)-1)
ENDIF
RETURN 1
Gruss Thomas
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
gibt es den die 53th Woche (was ja dann heute wäre) oder gibt es die
nicht ?
Das ab morgen 01.01.08 die erste Woche ist, ist klar.
gruss by OHR
Jimmy
hm ... je nach Definition ...Martin Altmann hat geschrieben: je nach Definition muss das doch auch! Die meisten Tage dieser Woche liegen doch schon im neuen Jahr...
gibt es den die 53th Woche (was ja dann heute wäre) oder gibt es die
nicht ?
Das ab morgen 01.01.08 die erste Woche ist, ist klar.
gruss by OHR
Jimmy
- Martin Altmann
- Foren-Administrator
- Beiträge: 16586
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Jimmy,
yup - gibt es! Schau mal hier: http://de.wikipedia.org/wiki/Woche#Z.C3 ... F_ISO_8601
Viele Grüße,
Martin
yup - gibt es! Schau mal hier: http://de.wikipedia.org/wiki/Woche#Z.C3 ... F_ISO_8601
Viele Grüße,
Martin
![grommit :grommit:](./images/smilies/grommit.gif)
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16586
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Jan,
darum schrieb ich ja auch "je nach Definition" - bei uns ist es üblich, dass die Woche eine 53 bekommt, wenn vier Tage der Woche am Ende des Jahres liegen, sonst wird es eine 1.
Viele Grüße,
Martin
darum schrieb ich ja auch "je nach Definition" - bei uns ist es üblich, dass die Woche eine 53 bekommt, wenn vier Tage der Woche am Ende des Jahres liegen, sonst wird es eine 1.
Viele Grüße,
Martin
![grommit :grommit:](./images/smilies/grommit.gif)
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
( nach ISO 8601 )
gruss by OHR
Jimmy
so kenne ich das auch, also müsste "heute" doch die "letzte" Woche sein?Jan hat geschrieben: In Deutschland ist Woche 1 die, wo 4 oder mehr Tage drin sind. Sonst ist es die letzte Woche des Vorjahres.
( nach ISO 8601 )
hm ... danach wäre es ja doch die 1st KW ...Martin hat geschrieben: wenn vier Tage der Woche am Ende des Jahres liegen, sonst wird es eine 1.
gruss by OHR
Jimmy
- Martin Altmann
- Foren-Administrator
- Beiträge: 16586
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Jimmy,
wieso müsste heute laut Jans Definition die letzte Woche sein?
Heute ist Montag, der erste Tag der Woche und der letzte Tag des Jahres - somit muß die Woche die Nummer 1 haben!
Viele Grüße,
Martin
wieso müsste heute laut Jans Definition die letzte Woche sein?
Heute ist Montag, der erste Tag der Woche und der letzte Tag des Jahres - somit muß die Woche die Nummer 1 haben!
Viele Grüße,
Martin
![grommit :grommit:](./images/smilies/grommit.gif)
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
1 Tag altes Jahr, 6 Tage neues Jahr -> 1 KW
3 Tage altes Jahr, 4 Tage neues Jahr -> 1 KW
4 Tage altes Jahr, 3 Tage neues Jahr -> 53 KW
für ISO 8601
... und die Ami´s haben am 01.01.2029 dann KW 54
gruss by OHR
Jimmy
Jetzt hab ich es begriffen :Martin Altmann hat geschrieben: wieso müsste heute laut Jans Definition die letzte Woche sein?
Heute ist Montag, der erste Tag der Woche und der letzte Tag des Jahres -somit muß die Woche die Nummer 1 haben!
1 Tag altes Jahr, 6 Tage neues Jahr -> 1 KW
3 Tage altes Jahr, 4 Tage neues Jahr -> 1 KW
4 Tage altes Jahr, 3 Tage neues Jahr -> 53 KW
für ISO 8601
... und die Ami´s haben am 01.01.2029 dann KW 54
gruss by OHR
Jimmy
Zuletzt geändert von AUGE_OHR am Mi, 02. Jan 2008 15:19, insgesamt 1-mal geändert.
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Hallo zusammen,
also ich verwende in einer Menüanzeige folgendes: Damit erhalte ich den Wochentag:
also ich verwende in einer Menüanzeige folgendes: Damit erhalte ich den Wochentag:
Code: Alles auswählen
oMenu:addItem( { "Wochentag ???" ,{|| Msgbox(Var2LChar(Date())+CRLF+CRLF+"Heute ist "+CDow(Date()) ) } } )
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2950
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten: