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:
Aika | Sekunteina |
1 minuutti | 60 sekuntia |
1 tunti | 3600 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
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.
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.
Lähetä viesti: