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)

This entry was posted in Gambas2, Hoe - in Gambas. Bookmark the permalink.