Results 1 to 7 of 7

Thread: Datum

  1. #1

    Datum

    Hoi,

    zitten er in Delphi ook datum functie zoals bv.

    current_date
    week
    month
    year
    dayofmonth
    dayofweek

    want ik wil nou met delphi een kalender maken voor internet, en nu gebruik ik mysql voor die functies, maar dat is een beetje traag aangezien je steeds de db aanroept...
    Everybody lies, but it doesn't matter since nobody listens.

  2. #2
    Yep, dit zijn er een aantal:
    • Date
    • Now
    • EncodeDateTime
    • DayOfWeek

    In de helpfile staan ze allemaal in de categorie date/time routines.
    Marcel

  3. #3
    Wie denkt er allemaal dat de functies van delphi sneller zijn dan die van mysql..?

    de functies worden in een loop ongeveer 4 of 5 keer aangeroepen...
    en met elkaar vergeleken misschien ook wel opgeteld enzo...
    dus met delphi functies is het veel inttostr strtoint enzo ernog bij...

    met mysql soms strtoint of inttostr



    Het gaat dus om een kalender voor internet... als iemand hier ervaring mee heeft kan die natuurlijk altijd zeggen hoe die dat opgelost heeft om alle dagen van de maand in een tabel te krijgen onder

    zo ma di wo do vr za
    Everybody lies, but it doesn't matter since nobody listens.

  4. #4
    Ik heb een kalender in PHP gemaakt, met Interbase, dus een kant en klare oplossing heb ik niet. Maar ik kan je wel wat hints geven.

    Mijn kalender is zoals jij het ook wilt een maandkalender in een grid, met horizontaal de dagen zondag t/m zaterdag en verticaal de weken met een weeknummer. De eerste paar cellen linksboven en de laatste paar cellen rechtsonder kunnen leeg zijn, afhankelijk van de weekdag waar die maand mee begint. De overige cellen bevatten het dagnummer en in mijn geval verjaardagen en gebeurtenissen. Ik heb hem afgekeken van de Microsoft Communities.

    Functies die je nodig hebt:

    Code:
    function MaandDagen(Maand, Jaar: Integer): Integer;
    // geeft aantal dagen in de opgegeven maand terug.
    begin
      if Maand = 12 then
        Result := EncodeDate(1,1,Jaar+1) - EncodeDate(1,Maand,Jaar)
      else
        Result := EncodeDate(1,Maand+1,Jaar) - EncodeDate(1,Maand,Jaar);
    end;
    
    function IndexToDagnummer(Index, Maand, Jaar: Integer): Integer;
    // zet de index om in een dagnummer, of -1 als voor begin of na eind vd maand
    begin
      Result := DayOfWeek(EncodeDate(1,Maand,Jaar)) - Index + 1;
      if (Result < 1) or (Result > MaandDagen(Maand,Jaar)) then
        Result := -1;
    end;
    Algoritme:
    1) bepaal hoeveel regels je voor de maand nodig hebt. Dat zijn er meestal 5, maar als de maand 28 dagen heeft en met zondag begint, dan 4 regels, en als de maand 30 dagen heeft en met een zaterdag begint of als de maand 31 dagen heeft en met een vrijdag of zeterdage begint, dan 6 regels. Gebruik de functie MaandDagen om het aantal dagen in een maand te bepalen.
    2) begin een loop: for index := 1 to aantal_regels * 7 do
    2.1) bepaal de huidige dag afhankelijk van index. Gebruik hiervoor functie IndexToDagnummer.
    2.2) Als IndexToDagnummer -1 terug geeft, een lege cel in het grid toevoegen. Anders een grid toevoegen waar je het dagnummer in zet, met de rest wat je daar in wilt zetten.

    Met dit algoritme moet je toch een eind komen denk ik.

    Succes

    Marco Hemmes
    Last edited by mhemmes; 27-Aug-01 at 11:35.
    Marco Hemmes

  5. #5
    wat doet de functie IndexToDagnummer() ?
    Wat bedoel je met index ?
    links is niet rechts
    BDS2006 gebruiker

  6. #6
    hoi,

    Een eeuwige kalender in een stringgrid zetten is makkelijk met de Delphi-lib..

    Zet "uses DateUtils" bovenaan en gebruik de volgende procedure. Het stringgrid is ingesteld fixedrows=1, fixedcols=0, RowCount=6, ColCount=7

    Code:
    procedure ShowMonth(Month,Year: integer; sg: TStringGrid);
    const weekdays : array[0..6] of string = ('za','zo','ma','di','wo','do','vr');
    var ActDate: double;
    var cCol,cRow,cDay: integer;
    begin
      for cRow:=0 to 5 do for cCol:=0 to 6 do sg.rows[cRow][cCol]:='';
      for cCol:=0 to 6 do sg.rows[0][cCol]:=weekdays[cCol];
      ActDate:=EncodeDate(Year,Month,1);
      cRow:=1;
      cCol:=1+DayOfWeek(ActDate);
      for cDay:=1 to 32 do
       if MonthOf(ActDate)=Month then
        begin
          sg.Rows[cRow][cCol-1]:=inttostr(cDay);
          ActDate:=ActDate+1.0;
          cCol:=1+(cCol mod 7);
          if cCol=1 then inc(cRow);
        end;
    end;

    Lex
    Minstens ?®?®n hobby naast programmeerwerk is echt noodzakelijk

  7. #7
    Voor de weekdagen ben je beter af met SysUtils.ShortDayNames, deze begint wel op zondag
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Replies: 2
    Last Post: 08-Jun-04, 16:56
  2. Controlle datum invoer
    By Nout in forum Algemeen
    Replies: 10
    Last Post: 16-Feb-04, 15:45
  3. ADOQuery INSERT INTO met parameter voor datum
    By Cerber4s in forum Databases
    Replies: 9
    Last Post: 12-Dec-03, 17:59
  4. datum dilemma in mySQL
    By bengel in forum Databases
    Replies: 2
    Last Post: 27-Jul-03, 13:54
  5. Datum in ADOQuery
    By labee in forum Databases
    Replies: 6
    Last Post: 05-Sep-02, 12:24

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •