[Delphi]Datum Rekenen, 40 dagen terug rekenen

Pagina: 1
Acties:
  • 101 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • Dala
  • Registratie: November 2000
  • Laatst online: 02-06 08:58
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.FormCreate(Sender: TObject);
var t,s:string;
begin
 memo1.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'db\check.txt'); //laad txt naar memo
 if memo1.Lines.Count > 0 then begin //is ie nie leeg?
  s:=memo1.Lines.Strings[1];
  t :=copy(s,pos('datum=',s)+length('datum='),length('18-12-2002')); //copieer de datum
  delete(t,pos(' ',t),1); //haal spaties weg
  if (strtodate(formatdatetime('DD-MM-YYYY',now-40))) <= (strtodate(t)) then begin
   showmessage('a');
  end;
 end;
end;

dat txt bestandje heeft de volgende inhoud:
code:
1
2
id=1 datum=18-12-2002
id=2 datum=09-12-2002


Nu wil ik dus als de datum langer dan 40 dagen geleden is een bericht /actie uitvoeren.

dus bij memo1.lines.strings[0] zou hij niks moeten doen
want 40 dagen terug is 9-12-2002
en bij memo1.lines.strings[1] zou hij dus berichtje moeten geven.

maar op een of andere manier, geeft hij bij ze allebei een bericht? :?

[ Voor 27% gewijzigd door Dala op 18-01-2003 16:49 ]


Acties:
  • 0 Henk 'm!

Anoniem: 25556

misschien ook even die formatdatetime gebruiken bij je strtodate(t) aanroep?

[ Voor 85% gewijzigd door Anoniem: 25556 op 18-01-2003 16:52 ]


Acties:
  • 0 Henk 'm!

  • Dala
  • Registratie: November 2000
  • Laatst online: 02-06 08:58
Delphi:
1
strtodate(formatdatetime('DD-MM-YYYY',strtodate(t)))


da bedoel je?


.. is geen verschil :(

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13-06 14:24

Janoz

Moderator Devschuur®

!litemod

Komop, een beetje debuggen.. Weet je toevallig al wat dat oplevert?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Dala
  • Registratie: November 2000
  • Laatst online: 02-06 08:58
ja hoor...


ik heb alles al bekeken..
Delphi:
1
2
3
showmessage(formatdatetime('DD-MM-YYYY',now-40));
showmessage(datetostr(strtodate(t)));
showmessage(formatdatetime('DD-MM-YYYY',strtodate(t)));


de datums kloppen, maar er zit iets fout met dat vergelijken?

maar wat ik er ook aan verander? het wil niet wa ik wil..

ik was aan het denken dat het misschien met datums anders gaat? dus iets dat ik mis?

[ Voor 8% gewijzigd door Dala op 18-01-2003 17:08 ]


Acties:
  • 0 Henk 'm!

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Gewoon datums met elkaar vergelijken en geen strings. Datums zijn gewone getallen met achter de komma eventueel een tijd.
Delphi:
1
Trunc(Now-40) <= strtodate(t)

We adore chaos because we like to restore order - M.C. Escher


Acties:
  • 0 Henk 'm!

  • Dala
  • Registratie: November 2000
  • Laatst online: 02-06 08:58
LordLarry schreef op 18 januari 2003 @ 17:31:
Gewoon datums met elkaar vergelijken en geen strings. Datums zijn gewone getallen met achter de komma eventueel een tijd.
Delphi:
1
Trunc(Now-40) <= strtodate(t)
het is inderdaad een stuk korter, maar het heeft nog steeds het zelfde effect :(

ik heb al eens gekeken, als ik zegt

Trunc(Now-40) = strtodate(t)

dan reageert hij wel, dus het doet het inprincipe :| , maar als ik < erbij zet reageert ie op alles?

Acties:
  • 0 Henk 'm!

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je wilt kijken of de datum langer als 40 dagen geleden is? Dan zou ik van de <= >= maken gekkie! :)

We adore chaos because we like to restore order - M.C. Escher


Acties:
  • 0 Henk 'm!

  • Dala
  • Registratie: November 2000
  • Laatst online: 02-06 08:58
LordLarry schreef op 18 januari 2003 @ 19:37:
Je wilt kijken of de datum langer als 40 dagen geleden is? Dan zou ik van de <= >= maken gekkie! :)
:D

da had ik ook al geprobeert, dat werkt, maar maak ik van de 40, 41 dan doet hij het nie meer, dus reageert ie eigenlijk op de =

:? ik vind het ram wazig :?

kan het misschien aan me Delphi Ligge? da ik es opnieuw moet opstarte (de pc?)

wil iemand me even helpe door het stukje source in zijn delphi te plakke?

alvast bedankt :)

Acties:
  • 0 Henk 'm!

  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 23:59
nee dat klopt wat 9 -12 - 2002 Is precies 41 dagen geleden ( toen ;) ) De if statement wilt zeggen: Wanneer de datum precies 40 dagen of ouder is dan zal hij een message geven. Er is helemaal niks fout aan je delphi of je pc. Volgens mij heb je de if statement niet goed begrepen

Acties:
  • 0 Henk 'm!

  • Dala
  • Registratie: November 2000
  • Laatst online: 02-06 08:58
.... maar bij optie nummer 0 is het niet 40 dagen geleden.. en toch reageert ie..

ik vat dat If statument wel... :D

en gisteren was 9-12-2002 40 dagen geleden.

Acties:
  • 0 Henk 'm!

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Nee, het is niet Delphi en opnieuw opstarten zal geen ruk helpen met het rekenen met data.

Ik heb mezelf uitgesloofd voor jouw om het voor eens en altijd duidelijk te maken dat er iets mis is jouw manier van denken of de overige code, maar iig niet aan
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var Vandaag: TDateTime;
    DagenGeleden30: TDateTime;
    DagenGeleden39: TDateTime;
    DagenGeleden40: TDateTime;
    DagenGeleden41: TDateTime;
    DagenGeleden50: TDateTime;
begin
  Vandaag := Date;
  DagenGeleden30 := Vandaag - 30;
  DagenGeleden39 := Vandaag - 39;
  DagenGeleden40 := Vandaag - 40;
  DagenGeleden41 := Vandaag - 41;
  DagenGeleden50 := Vandaag - 50;

  if Trunc(Date - 40) >= Trunc(DagenGeleden40) then
    ShowMessage('40 of meer dagen geleden');
end;

Speel er eens mee en trek je conclusies, maar houd aub op met je rare spook verhalen over Delphi en dat ie geen getallen kan vergelijken. :)

Houd er rekening mee dat een TDateTime ook een tijd deel kan bevatten die heel soms roet in het eten kan gooien van een vergelijking. Vandaar dat er in mijn code Trunc staat bij de vergelijkig.

We adore chaos because we like to restore order - M.C. Escher


Acties:
  • 0 Henk 'm!

  • Dala
  • Registratie: November 2000
  • Laatst online: 02-06 08:58
LordLarry schreef op 19 January 2003 @ 12:45:
Nee, het is niet Delphi en opnieuw opstarten zal geen ruk helpen met het rekenen met data.

Ik heb mezelf uitgesloofd voor jouw om het voor eens en altijd duidelijk te maken dat er iets mis is jouw manier van denken of de overige code, maar iig niet aan
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var Vandaag: TDateTime;
    DagenGeleden30: TDateTime;
    DagenGeleden39: TDateTime;
    DagenGeleden40: TDateTime;
    DagenGeleden41: TDateTime;
    DagenGeleden50: TDateTime;
begin
  Vandaag := Date;
  DagenGeleden30 := Vandaag - 30;
  DagenGeleden39 := Vandaag - 39;
  DagenGeleden40 := Vandaag - 40;
  DagenGeleden41 := Vandaag - 41;
  DagenGeleden50 := Vandaag - 50;

  if Trunc(Date - 40) >= Trunc(DagenGeleden40) then
    ShowMessage('40 of meer dagen geleden');
end;

Speel er eens mee en trek je conclusies, maar houd aub op met je rare spook verhalen over Delphi en dat ie geen getallen kan vergelijken. :)

Houd er rekening mee dat een TDateTime ook een tijd deel kan bevatten die heel soms roet in het eten kan gooien van een vergelijking. Vandaar dat er in mijn code Trunc staat bij de vergelijkig.
toon volledige bericht
bedankt voor je hulp alvast, mijn theorie over da delphi gaar was leek me al wazig.. maar soms sla ik wel eens wartaal uit 8)7 ..

ik ga es teste


Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.FormCreate(Sender: TObject);
var Dag: TDateTime;
    s,t:string;
begin
  memo1.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'db\check.txt');
   if memo1.Lines.Count > 0 then begin
    s:=memo1.Lines.Strings[1];
    t :=copy(s,pos('datum=',s)+length('datum='),length('18-12-2002'));
    delete(t,pos(' ',t),1);
    Dag := strtodate(t);
  if Trunc(Date - 40) >= Trunc(Dag) then
    ShowMessage('40 of meer dagen geleden');
end;
end;

edit:

Erg bedankt dit werkt :)

ik denk dat het kwam doordat ik niet goed trunc gebruikt (ik heb die functie nu eens even opgezocht in me dik delphi boek)

in iedergeval, bedankt _/-\o_

[ Voor 29% gewijzigd door Dala op 19-01-2003 12:58 ]


Acties:
  • 0 Henk 'm!

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05 22:30

FendtVario

The leader drives Vario!

Of als je delphi >= 6 hebt (komt uit de help):

Returns the number of whole days between two specified TDateTime values.

Unit: DateUtils

Category: date/time routines

function DaysBetween(const ANow, AThen: TDateTime): Integer;

Description: Call DaysBetween to obtain the difference, in days, between two TDateTime values.

DaysBetween counts only whole days that have elapsed. Thus, DaysBetween reports the difference between Dec 31, 1999 11:59 PM and Jan 1, 2000 11:58 PM as 0 because the difference is one minute short of an entire day.

www.fendt.com | Nikon D7100 | PS5


Acties:
  • 0 Henk 'm!

  • Dala
  • Registratie: November 2000
  • Laatst online: 02-06 08:58
:D hey, das leuk, ik heb inderdaad delphi 6.

bedankt voor je hulp nog _/-\o_

Acties:
  • 0 Henk 'm!

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05 22:30

FendtVario

The leader drives Vario!

Dan heb je vandaag als het goed is twee dingen geleerd:
1) deze funtie O-)
2) kijk eerst in de help

en misschien deze als je eerdere versies van delphi hebt gebruikt:
3) kijk voordat je stomweg een nieuwe versie gebruikt eerst even in de help bij What's New. Dit kan belangrijk zijn, het gebeurt niet zo vaak, maar bepaalde functionaliteit kan veranderen.

www.fendt.com | Nikon D7100 | PS5


Acties:
  • 0 Henk 'm!

  • Dala
  • Registratie: November 2000
  • Laatst online: 02-06 08:58
FendtVario schreef op 19 januari 2003 @ 22:09:
Dan heb je vandaag als het goed is twee dingen geleerd:
1) deze funtie O-)
2) kijk eerst in de help

en misschien deze als je eerdere versies van delphi hebt gebruikt:
3) kijk voordat je stomweg een nieuwe versie gebruikt eerst even in de help bij What's New. Dit kan belangrijk zijn, het gebeurt niet zo vaak, maar bepaalde functionaliteit kan veranderen.
optie 3 is het.......


ik kijk veel in de help hoor :D

maar ik heb hier een dik delphi 4 boek liggen a 1200 pagina's

en daar stond idd nog nie die functie in :(

maar, dan kan ik weer verder :P bedankt :)
Pagina: 1