Een datum achteruit; bv een week terug

Bij weergave van gegevens van een week geleden tot nu moet je de begindatum van die periode bepalen.
Hoe kan ik de datum van een week terug vinden?

De huidige datum in Gambas krijg je met:

date()
of
date(now())

(Deze commando’s kan je uitproberen in het Console venster onderaan in Gambas IDE, met vraagteken plus commando, zoals “ ? date()“.)

De gewone now() geeft ook de tijd erbij. Maar het interessante aan now() is dat je van daaruit kan teruggaan naar de dag van nu min een week:

date(now()-7)

In de Console moet het zo:

? Date(Now()-"7")

Als je dus from.. until datums nodig hebt, kan je hiermee je “from” datum berekenen.

De aparte waarden voor jaar, maand en dag indien je die nodig hebt, bv voor het opstellen van een SQL vraag:

year(date(now()-7) & "-" & month(date(now())-7) & "-" & day(date(now())

Of als je de hele voorbije week nodig hebt, kan je een array vullen met die dagen:


 PUBLIC SUB fillLastWeek(arrLastWeek AS Date[], iBack AS Integer, OPTIONAL bTodayIncl AS Boolean)
  
  DIM dStart AS Date
  DIM dRun AS Date
  DIM dEnd AS Date
  DIM i AS Integer
  DIM iShiftToday AS Integer = 0
  
  DEBUG arrLastWeek.Type
  
  IF bTodayIncl
    iShiftToday = 1
  ENDIF 

  IF iBack = 0
    iBack = 7 
  ENDIF 
  
  dStart = Date(Now() - (iBack - iShiftToday))
  
  dRun = dStart
  
  FOR i = (1) TO (iBack)
    arrLastWeek.Add(dRun)
    dRun = Date(dStart + i)
    'DEBUG "i=" & i & " iBack=" & iBack & " iShiftToday=" & iShiftToday & " dRun = " & dRun
  NEXT 
  
END

  

Wordt aangeroepen:

fillLastWeek(arrLastWeek, 7)

of

fillLastWeek(arrLastWeek, 7, TRUE)

Nog een vraag: wat was de eerste dag van deze week?

? date(now()-weekday(Now())+"1")

Zonder de +1 kom je op zondag uit; je kan die 1 ook aftrekken van je dagnummer natuurlijk:

? date(now()-(weekday(Now()-"1")))

Zeker nuttig is ook DateAdd, waar je bij een datum aangeeft welke eenheid er hoeveel bij moet geteld worden:

DateAdd(date1, gb.Day, 7)

Klik en sleep van object van een groep

Concept van klikken en slepen toegepast op objecten in een groep
(vervolg op eenvoudig klik en sleep voorbeeld)

Als je een aantal voorwerpen maakt tijdens de uitvoering van je programma (at runtime), bv knoppen, kan je die daarbij toewijzen aan een “group”, zodat je daarna de leden van die groep, als een soort child-objecten kan aanspreken (zie Group van een control definiëren).

Die “group” kan je ook gebruiken voor het klik en sleep gedrag.
De Gambas-omgeving helpt door een “laatst gebruikte” object/control waarde bij te houden: LAST
Via die weg kan je een “sleutel” doorgeven door die (op voorhand) op te nemen in het extra “Tag” veld van een object.

bv:

PUBLIC grpEtiketten_MouseDrag()
  ...
  IF Mouse.Left
    DEBUG LAST.Tag
  ENDIF
  ...
END

en

PUBLIC grpEtiketten_Drop()
  ...
  ... = Drag.Data
  DEBUG "dropped on" & LAST.Tag
  ...
END