Päivämäärän ja ajan laskutoimitukset

15. helmikuuta 2022

Monet lomakkeet käyttävät Päivämäärä -kenttää, ja se on erittäin hyödyllinen erilaisissa tilanteissa, kuten;

  • Projektien aikataulujen määrittämisessä
  • Rekisteröitymisissä
  • Erilaisten varausten keräämisessä

Joissain tapauksissa on myös hyödyllistä pystyä laskemaan kulunut aika kahden päivämäärän välillä. Tässä artikkelissa käymme läpi miten tämä onnistuu, ja miten kahden päivämäärä-kentän välillä voi tehdä laskutoimituksia.

Mikä on Unix-aika?

Unix-aika (Unix epoch, POSIX, tai Unix-timestamp) on lukumäärä sekunneista joka on kulunut päivämäärästä 1.1.1970 00:00 UTC/GMT) nykyhetkeen. Aika ei ota huomioon karkaussekunteja (käytössä ISO

Unix-aika (Unix epoch, POSIX, tai Unix-timestamp) on lukumäärä sekunneista joka on kulunut päivämäärästä 1.1.1970 00:00 UTC/GMT) nykyhetkeen. Aika ei ota huomioon karkaussekunteja (ISO 8601: 1970-01-01T00:00:00Z). Laskutoimituksissa tulee usein vastaan sana “epoch” joka tarkoittaa Unix-aikaa 0 (keskiyö 1/1/1970).
Lähde: https://www.epochconverter.com/

Luodaksesi laskutoimituksia sinun tulee osata käyttää Laskutoimitus -widgettiä. Jos widgetin käyttö ei ole tuttua entuudestaan, suosittelemme että tutustut oppaaseemme täällä.
Alla olevassa taulukossa olemme muuntaneet yleisimmin käytettävät ajat sekunneiksi:

AikaSekunteina
1 minuutti60 sekuntia
1 tunti3600 sekuntia
1 päivä86400 sekuntia
1 kuukausi (30.44 päivää)2629743 sekuntia
1 vuosi (365.24 päivää)31556926 sekuntia

Ylläolevia muunnoksia käytetään laskutoimituksissa myöhemmin. Kun suoritat laskutoimituksia, otathan huomioon myös seuraavan:

  • Aikaeron tulee olla Epoch -muodossa. Tämä johtuu siitä, että kun päivämäärä vähennetään toisesta, oletustulos lasketaan päivissä. Muuttaakseemme päivät epoch-aikaan eli sekunneiksi, kerrotaan luku 86400:lla.

Otetaan esimerkiksi luku 12345 epoch-aikana. Tämä on 3 tuntia, 25 minuuttia ja 45 sekuntia.

3 tuntia saadaan seuraavasta laskusta:
12345 / 3600 =  3.4291666667 tai 3 R. 1545

25 minuuttia saadaan seuraavasta laskusta:
1545 / 60 = 25.75 tai 25 R. 45

  • Widgetissä ei ole ominaisuutta tarkalle loppuosalle jakolaskuissa. Saatat tuntia %- tai MOD-laskut joissa tämä onnistuu, mutta valitettavasti tämä ei ole saatavilla widgetissä. Vaihtoehtoisesti käytämme desimaaleja jakotulosten näyttämiseen.

Esimerkki:

40 / 6 = 6 R. 4

40 / 6 = 6.6666666667

Molemat vastaukset ovat oikein, ja niistä saadaan:

Kokonaisluku: 6

Desimaali: 0.6666666667

Jäännös: 4

Muuttaaksemme desimaalin jäännökseksi, kerromme sen kuudella:

0.6666666667 x 6 = 4.0000000002

Tämä pyöristetään luvuksi 4.

Käytetään floor() -funktiota kokonaisluvun saamiseen murtoluvusta. Ota huomioon, että floor() pyöristää alaspäin, ceil() ylöspäin, ja round() poistaa desimaaleja.
Ohje: Laskutoimitukset – Matemaattiset funktiot

  • Unix-aika tulee jakaa seuraavilla:

– 31556926 on jakaja vuosi, kuukausi ja päivä -laskuille

– 86400 on jakaja tunti ja minuutti -laskuille

  • Piilota laskutoimituskentät joita et halua näyttää lomakkeella. Useimmissa tapauksissa näitä kenttiä ei tarvitse näyttää käyttäjille (kuten unix-aika, desimaalin lasku yms.)

Tässä demolomake jota käytämme tässä oppaassa:
https://www.jotform.com/71752744778975

1. Lisää tarvittavat kentät

  • Kaksi päivämäärä-kenttää
  • Laskutoimitus-widgetit

Ajan laskeminen vaatii aina vähintään kaksi tai kolme widgettiä: Unix-ajan erotus ja jäännös (joko vuosi/kuukausi/päivä tai tunti/minuutti, tai molemmat). Loput kentät riippuvat tarpeistasi.

Esimerkki:

Jos tarvitset ainoastaan tuntien ja minuuttien erotuksen, tarvitset 4 Laskutoimitus-widgettiä:

  • Unix-ajan erotus
  • Jäännös tunti/minuutti
  • Tunnit
  • Minuutit

Jos sinun tarvitsee laskea myös kuukaudet, päivät, tunnit ja minuutit, tarvitset 7 Laskutoimitus-widgettiä:

  • Unix-ajan erotus
  • Jäännös tunti/minuutti
  • Jäännös kuukausi/päivä
  • Kuukaudet
  • Päivät
  • Tunnit
  • Minuutit

Demo käyttää yllämainittuja 13 Laskutoimitus-widgettiä:

  • 3 pakollista widgettiä (Unix-aika ja 2 jäännöstä)
  • 5 widgettiä (itse aika ero vuodet > kuukaudet > päivät > tunnit > minuutit)
  • 5 widgettiä (jokaisen arvon muuntaminen vuosiksi, kuukausiksi, päiviksi, tunneiksi ja minuuteiksi)

2. Määritä päivämäärä-kentät

Päivämäärän ja ajan laskutoimitukset Image-1

Avaa päivämäärä-kentän ominaisuudet ja siirry Aika -välilehdelle. Aseta Aikakenttä -asetus Käytössä -tilaan. Aseta myös ajan esitysmuoto 24 tuntia -muotoon.

3. Aseta Laskutoimituskentille ainoastaan lukuoikeus

Tämä vaihe ei ole pakollinen, mutta jos haluat estää käyttäjiä muuttamasta laskutoimituskenttien arvoja, kannattaa kentille antaa ainoastaan lukuoikeus.

Päivämäärän ja ajan laskutoimitukset Image-2
Päivämäärän ja ajan laskutoimitukset Image-3

4. Laskutoimituksen lisääminen

Valitse alta tarvitsemasi laskutoimitus.

Päivämäärä 1: 1.1.2017 klo 01:05

Päivämäärä 2: 30.6.2036 klo 20:50

Unix-aika: 615239100

Unix-ajan laskutoimitus:
(Päivämäärä 1 – Päivämäärä 2) * 86400

Kerro erotus luvulla 86400 laskeaksesi unix-ajan sekunteina.

Jäännös (vuodet > kuukaudet > päivät):

(Unix-ajan erotus / 31556926 – (

floor (Unix-ajan erotus / 31556926))) * 31556926

Laskutoimitus saattaa näyttää monimutkaiselta, mutta lasku laskee jäännöksen. Unix-aika on jaettu luvulla 31556926, joka on vuosi sekunteina. Floor-funktion osamäärä vähennetään alkuperäisestä osamäärästä, josta saadaan desimaaliarvo. Sitten luku kerrotaan luvulla 31556926 jäännöksen saamiseksi.

Jäännös (Tunnit > Minuutit):

(Unix-ajan erotus / 86400 – (

floor (Unix-ajan erotus / 86400))) * 86400

Sama kuin yllä mutta tällä kertaa luku jaetaan luvulla 86400, jotta saamme jäljelle jäävät tunnit/minuutit.

Vuodet:
floor (Unix-aika / 31556926)

Tämä on helppo laskutoimitus. Unix-aika ainoastaan jaetaan luvulla 31556926 ja pyöristetään alas osamääräksi.

Kuukaudet:
floor ( V/M/P jäännös / 2629743)

Jaetaan V/M/P luvulla 2629743 jäljellä olevien kuukausien saamiseksi.

Päivät:
floor (((V/M/P jäännös / 2629743) – kuukaudet) * 30.44

Lasku kerrotaan luvulla 30.44 päivien laskemiseksi.

Tunnit:

floor(TT:MM  jäännös/ 3600)

Tunnit saadaan laskettua jakamalla TT:MM jäännös luvulla 3600, eli tunnin sekuntimäärällä. Tulos pyöristetään alaspäin.

Minuutit:

round(((HH:MM jäännös/ 3600) – tunnit) * 60)

Floor() -funktion sijaan käytämme round() -funktiota. Ajan laskeminen vaatii floor()-funktion, jotta tilaa jää pienemille aikayksiköille. Koska minuutti on pienin luku, se tarvii ainoastaan pyöristää alas.

Seuraavat 5 laskutoimitusta eivätole pakollisia, mutta voivat olla tarpeen riippuen tilanteesta.

Vuodet:

floor(Unix-erotus / 31556926)

Kuukaudet:

floor(Unix-erotus / 2629743)

Päivät:

floor(Unix-erotus / 86400)

Tunnit:

floor(Unix-erotus / 3600)

Minuutit:

floor(Unix-erotus / 60)

Laskutoimitukset saattavat aluksi tuntua monimutkaisilta, mutta kunhan pääset alkuun, ne on helppo suorittaa loppuun asti.

Kloonaa demolomake nähdäksesi miten laskut toimivat lomakkeella.

Jätä kommenttisi ja ehdotuksesi alla oleaan kenttään. Jos sinulla on kysymyksiä, ota yhteyttä tukifoorumillamme ja autamme sinua.

Ota yhteyttä:

Asiakastukitiimimme on tavoitettavissa ympäri vuorokauden ja keskimääräinen vastausaika on yhdestä kahteen tuntia.
Tiimiimme voi ottaa yhteyttä:

Tukifoorumi: https://www.jotform.com/answers/

Ota yhteyttä Jotformin tukitiimiin: https://www.jotform.com/contact/

Lähetä viesti:

Jotform Avatar
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Podo Comment Ole ensimmäinen kommentoija.