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)