GDL
About building parametric objects with GDL.

Automatic Date calculation

Andrew Swenson
Newcomer
I'm wondering if it's possible to write a gdl object to calculate a future date from the current date?

I'm aware of using a REQUEST to get current system date into the format that I need, for example

x = REQUEST ("DateTime", "%d.%m.%Y", datetimestring) will show me 04.11.2020 for today.

What I want to do is then have the object automatically calculate a date in the future from that date.

Why? Well I'm doing some Building Evacuation Plans for a client and they have a validity period of 5 years. It would be nice to have an object that shows the current date as the "Date issued" and then calculate and show the "Valid till Date".

I'm thinking (based on using excel to do the same thing) I would need to convert the date into a numerical figure (assuming ArchiCAD works with numerical dates) add the correct number of days to the number and then 'formt' the resulting number back into day month and year.

So is this possible with GDL in ArchiCAD 24?
ArchiCAD 5.1 - 24
MSI WS63 8SL
Intel i7-8850K @ 2.60GHz
32Gb RAM
Windows 10 Pro 64bit
TwinMotion 2020.2
1 REPLY 1
Barry Kelly
Moderator
I have done this using the Date/Time extension (I think that is what they call it).
It might work the same with a REQUEST

realdaynum = 0
realmonthnum = 0
realyearnum = 0

dateStr = ""
ch = OPEN ("DateTime", "", "%d/%m/%Y")
n = INPUT (ch, "", "", dateStr)
CLOSE (ch)

!!print dateStr

n=SPLIT(dateStr ,"%n %s %n %s %n",realdaynum,string_1,realmonthnum,string_2,realyearnum)

!!print realdaynum
!!print string_1
!!print realmonthnum
!!print string_2
!!print realyearnum

This will give you number values for the day, month and year that you can add your 5 years to and then reassemble the date.


The problem is this will always be looking for the current date so you new date will always be 5 years ahead.
You need to trap the current date as a fixed date (date of issue) by using a boolean switch (update_swch) that you can activate and will automatically reset back to OFF.

So you will want something like this (in your master script).
if update_swch = 1 then

realdaynum = 0
realmonthnum = 0
realyearnum = 0

dateStr = ""
ch = OPEN ("DateTime", "", "%d/%m/%Y")
n = INPUT (ch, "", "", dateStr)
CLOSE (ch)

!!print dateStr

n=SPLIT(dateStr ,"%n %s %n %s %n",realdaynum,string_1,realmonthnum,string_2,realyearnum)

!!print realdaynum
!!print string_1
!!print realmonthnum
!!print string_2
!!print realyearnum
PARAMETERS update_swch = 0

ENDIF

Every time you turn ON the update switch it will re-calculate the date and the switch will automatically set back to OFF.


Barry.
One of the forum moderators.
Versions 6.5 to 27
Dell XPS- i7-6700 @ 3.4Ghz, 16GB ram, GeForce GTX 960 (2GB), Windows 10
Lenovo Thinkpad - i7-1270P 2.20 GHz, 32GB RAM, Nvidia T550, Windows 11

Didn't find the answer?

Check other topics in this Forum

Back to Forum

Read the latest accepted solutions!

Accepted Solutions

Start a new conversation!