Purpose We want to
determine the first and the last day of the current, next or
previous month.
This is useful, for example, for
reporting purposes where you need to select the right time interval
We use GuiXT string and date operations:
GuiXT
// Determine first and last day of this month /next month /previous month
Set V[k] 1 // 1=next month, 0=this month, -1=previous month
// Use the GuiXT notation today_M and today_Y for current month and year
Set V[M] "&V[today_M]"
Set V[Y] "&V[today_Y]"
// add month offset
Set V[M] "&V[M]" + &V[k]
if V[M=13]
Set V[M] "01"
Set V[Y] &V[Y] + 1
else
if V[M=0]
Set V[M] "12"
Set V[Y] &V[Y] - 1
endif
endif
// "01" instead of "1" etc.
Set V[M](1-2) "0&V[M]" -alignRight
// First day of month
Set V[from] "01.&V[M].&V[Y]"
// calculate last day of month
// build first day of next month then subtract 1 day
Set V[M] "&V[M]" + 1
if V[M=13]
Set V[M] "01"
Set V[Y] &V[Y] + 1
endif
// "01" instead of "1" etc.
Set V[M](1-2) "0&V[M]" -alignRight
Set V[to] "01.&V[M].&V[Y]"
Set V[to] "&V[to]" - 1
// Now V[to] is the first day and V[from] last day
// of this/next/previous month
// Optionally:
// if necessary change the dates from format dd.mm.yyyy to correct user format
// Attention: in this case a valid RFC user/password is needed in GuiXT profile
Set V[diff] "&V[from]" - "&V[today_d.m.y]"
Set V[from] "&V[today+&V[diff]_user]"
Set V[diff] "&V[to]" - "&V[today_d.m.y]"
Set V[to] "&V[today+&V[diff]_user]"