Hvordan fungerer dato-variabler

En dato er ikke så lett å ha med å gjøre, ettersom den ikke er et enkelt tall - men heller et objekt bestående av flere tall. På grunn av dette kan man ikke bare ta 05.06.2007 + 1 hvis man skal øke datoen til 06.06.2007. Årsaken til dette er at 1-tallet ikke er definert som dag, måned eller år. Skal man øke med en dag, må man bruke script. Dette kommer jeg tilbake til lengre nede.

Oppbygning
En dato er bygd opp slik: DD.MM.ÅÅÅÅ.
Hvis man skal regne på dager må man bryte opp i sine bestanddeler. Dette kan man gjøre med funksjonene:
getday(datovariabel)
getmonth(datovariabel)
getyear(datovariabel)

Skal man for eksempel hente ut dagen fra en dato og gjøre den om til et enkelt tall man kan bruke i andre formler, kan man benytte getday(datovariabel). Hvis datovariabel=11.12.2013 vil resultatet bli 11. Her bruker man den funksjonen som er mest hensiktsmessig i forhold til hvilken oppgave man ønsker å løse.

Differanse mellom to datoer
Dersom man har to datoer og ønsker å finne ut hvor mange dager, måneder og år det er mellom disse datoene kan man gjøre dette svært enkelt ved å ta =datovariabelTil-datovariabelFra.
La oss si at til-dato er 20.06.2015 og fra-dato er 30.06.2013. Resultatet vil bli noe HELT annet enn du skulle forvente: 22.12.3001
Dette betyr at du har fått en relativ dato. Dersom du bruker getday/getmonth/getyar på denne variabelen vil du hente ut differansen mellom datoene. getyear vil altså returnere 1, altså ett år. hvis man får en relativ dato på 2999 vil getyear returnere -1 .

Legge til eller trekker fra datoer
Dersom du ønsker å legge til eller trekke fra dager, måneder eller år kan man benytte en funksjon som bygger opp en datovariabel: date(ÅÅÅÅ, MM, DD).
Skal du legge til 7 dager til en dato trenger du altså bare å bruke koden =dato+date(0,0,7)
Hvis dato=30.08.2019 vil resultatet her bli 06.09.2019.

Dagen idag
Ofte behøver vi å vite dagens dato. Det kan vi gjøre ved å benytte funksjonen =now()
Da returneres datoen skjemaet fylles ut. Hva kan dette brukes til?
Søknadsfrister, aldersgrenser, osv.

La oss si du ønsker å se om utfylleren har fylt 18 år. I feltet for fødselsdatoen har vedkommende lagt inn 14.11.2001. Her kan man legge koden inn i valideringsskriptet:
=if(fodselsdato+date(18,0,0)>now()){return “Du er ikke gammel nok til å søke”}; else {return true};

Datoer er med andre ord ikke rett frem. Håper denne korte beskrivelsen er nyttig. Bruk kommentarfeltet nedenfor hvis noe er uklart.

8 Likes

var dd = getday(“06.11.2019”) returnerer 6 istedenfor 06.
Jeg har forsøkt å legge til 0 med var dd = “0”+dd; Men den gir fortsatt 6.
Har noen noe tips til hvordan jeg kan få 06 tilbake?

Hei, du kan prøve å summere en tom streng. Da tolkes det ikke lengre som siffer.
eksempel: 0+""+dd

Etter at vi fikk oppgardert til siste versjon av Interact kan man ikke hente ut verdien fra et datofelt inn i ett tekstfelt… Noen ide om hva bug’en kan være?

Vi har nylig identifisert feilen og jobber med en løsning. Det viser seg at utregningen skjer, bare ikke umiddelbart. Så hvis du går til oppsummeringssiden vil du se verdiene. Det er selvsagt ikke slik det skal være, så vi jobber med å løse det.

Hvis du legger til en nedtrekksmeny på samme steg som du vil hente ut verdien fra datofelt til tekstfelt så oppdaterer den seg når du velger en verdi fra nedtrekksmenyen. En fryktelig irriterende bug.

På kurs fikk vi laget et egetdefinert element for å regne ut antall dager fra fra-dato til til-dato. Jeg ser at hvis jeg legger inn permisjonssøknad for 1 dag - altså samme dato i begge felt, blir svaret: “Du søker om 0 dager permisjon”. Hvordan får jeg fikset det slik at det her står 1 dag?

På variablen brukes “= getday( Variabel)”.
Dette står i resultatfeltet:
=if(Fra_til.Til==null || Fra_til.Fra==null){return “Du må fylle inn datofeltene”}; else {return “Du søker om “+Dager+” dager, " +Maneder+” måneder og “+ _r+” år";}

Hvis du bruker getday() til å finne antall dager vil den ikke telle med første dag. Du kan simpelthen legge til en dag hvis du ønsker at første dag skal være med.

Da kan du bruke formelen:
= getday(Variabel)+1

Oppsettet fungerer bare når jeg bruker elementet låst - som det er.
Når jeg låser opp elementet, får jeg feilmelding om jeg ikke har endret noe også - og formelen fungerer ikke i skjemaet.

Skjema 2 Skjema 3

Jeg antar feilen kommer av at variabelnavnet ikke er korrekt. Prøv å koble variablene på nytt, og du vil sikkert se at de bytter navn.

Det var det! Tusen takk :slight_smile:

1 Like

@Helge
Jeg ønsker å telle dager mellom to datoer. I følge brukerdokumentasjonen skal jeg kunne bruke formelen =getday(datovariabel)+1, men med den klarer jeg bare å telle dager innad i en måned. Når jeg prøver å telle fra en måned til en annen, så returnerer formelen bare differansen mellom DD i datoene.

Eksempel 01-04-2021 til 05.05.2021 blir 5. Svaret skulle jo ha blitt 35.