AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Frage zu EncodeDateWeek

Ein Thema von cugar · begonnen am 23. Jul 2009 · letzter Beitrag vom 24. Jul 2009
Antwort Antwort
cugar

Registriert seit: 6. Jan 2007
149 Beiträge
 
Delphi XE Professional
 
#1

Frage zu EncodeDateWeek

  Alt 23. Jul 2009, 14:38
Hallo,
versuche gerade folgendes:
1. Datum der letzten Lieferung liegt vor, zB 13.07.2009
2. Es gibt ein Enddatum (per Eingabe) zB. 29.07.2009
3. Es gibt ein Intervall zB 1 (dh jede Woche liefern oder 2 für alle 2 Wochen usw)

Es sollen mir alle Tagen ausgegeben werden, die hier zutreffen, dh:
20.07.2009
27.07.2009

Mein Versuch bis jetzt:
1. Mit Kalenderwoche_ermitteln(LSLIEFERDATE.Value) bekomme ich die Kalenderwoche der letzten Lieferung
2. Mit Kalenderwoche_ermitteln(LSLIEFERDATE.Value) + AUTOINTERVALL.Value die Kalenderwoche der nächsten Lieferung

Jetzt möchte ich schauen ob der Montag in der neuen Kalenderwoche noch <=Enddatum ist, bevor ich diese Tage auswerten kann:
EncodeDateWeek(YearOf(LSLIEFERDATE.Value),Kalender woche_ermitteln(LSLIEFERDATE.Value) + AUTOINTERVALL.Value,1);

Was ich nicht verstehe, die Function EncodeDateWeek benötigt vorne eine Jahreseingabe (bei mir im Moment Jahr aus dem Datum der letzten Lieferung). Was ist wenn das Jahr zB (wie aktuell) 2009 ist, aber nach dieser Formel der Montag in 2010 kommt???
Gibt es eine Fehlermeldung und ich muss das Jahr erhöhen oder wie??

Viele Grüsse
Andreas Bremer

PS. Einfach zu dem Datum der letzten Lieferung 7 addieren (mit Schleife) geht nicht, manche Kunden werden mehrmals in der Woche automatisch beliefert
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#2

Re: Frage zu EncodeDateWeek

  Alt 23. Jul 2009, 17:53
Ich verstehe die Schleifen-Bemerkung nicht wirklich. Die folgende Funktion ist aber kompatibel und berücksichtigt den Jahreswechsel (schon fast) korrekt (LSLIEFERDATE.Value darf nicht z.B. 2.1.2010 sein, denn das ist KW53/2009 - aber wer liefert da schon was? ).

Delphi-Quellcode:
//Ergibt Montag in <AUTOINTERVALL.Value>-Wochen
NaechsterMontag := EncodeDateWeek(YearOf(LSLIEFERDATE.Value),
                                 Kalenderwoche_ermitteln(LSLIEFERDATE.Value),1) +
                                 AUTOINTERVALL.Value*7;
Ich würde die folgende Variante bevorzugen

Delphi-Quellcode:
//Datum des Wochenanfangs der letzten Lieferung + <AUTOINTERVALL.Value>-Wochen
NaechsterMontag := LSLIEFERDATE.Value - DayOfTheWeek(LSLIEFERDATE.Value) +
                   AUTOINTERVALL.Value*7 + 1;
P.S. Vielleicht hätte ich mich noch zur Frage äußern sollen? Ja, es gibt eine Fehlermeldung (denn KW 60 gibt es im Jahr 2009 nicht (2010 übrigens auch nicht )
  Mit Zitat antworten Zitat
cugar

Registriert seit: 6. Jan 2007
149 Beiträge
 
Delphi XE Professional
 
#3

Re: Frage zu EncodeDateWeek

  Alt 23. Jul 2009, 23:32
Danke für deine Hilfe.
Bin noch blutiger Anfänger mit viel Talent alles zu kompliziert zu machen

Verstehe diese Formel aber nicht ganz:
//Datum des Wochenanfangs der letzten Lieferung + <AUTOINTERVALL.Value>-Wochen
NaechsterMontag := LSLIEFERDATE.Value - DayOfTheWeek(LSLIEFERDATE.Value) +
AUTOINTERVALL.Value*7 + 1;

Wenn ich meine Werte jetzt reinstelle:
NaechsterMontag := 13.07.2009 - 1 + 1 * 7 + 1;

Habs ausprobiert, Delphi gibt hier: 27.07.2009 aus, müßte aber den 20.07.2009 ausgeben
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#4

Re: Frage zu EncodeDateWeek

  Alt 24. Jul 2009, 10:26
Zitat von cugar:
NaechsterMontag := 13.07.2009 - 1 + 1 * 7 + 1;
Habs ausprobiert, Delphi gibt hier: 27.07.2009 aus, müßte aber den 20.07.2009 ausgeben
Wie die Formel ja schon zeigt, kann das ja schlicht nicht sein. Auch ein Windows-PC mit Delphi ist in der Lage 13+7 korrekt auszurechnen. Der Fehler liegt also in der Umsetzung des Codes. (Es war ja auch schon spät.. ) Gibt es ein Code-Auszug?
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Frage zu EncodeDateWeek

  Alt 24. Jul 2009, 12:19
Hi,

ich verstehe grad nicht ganz, warum das so kompliziert über KW gerechnet wird. Mein Vorschlag, in welchem auch Jahreswechsel und 53.KW furzegal sein sollten :

[EDIT] DU willst den Montag prüfen, daher ein wenig umgebaut^^
Delphi-Quellcode:

function GetLieferzeitpunkte(dtLetzteLieferung, dtEnde: TDateTime): String;
var
  dtPruef: TDateTime;
begin
  dtPruef := dtLetzteLieferung + 7 + DayOfTheWeek(dtLetzteLieferung) + 1
  dtLetzteLieferung := dtLetzteLieferung + 7;
  
  while dtPruef <= dtEnde do
  begin
    Result := Result + DateTimeToStr(dtLetzteLieferung);
    dtLetzteLieferung := dtLetzteLieferung + 7;
    dtPruef := dtPruef + 7;
  end;
end;
Gruß
Ansgar
Ansgar
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz