Kako izračunati broj dana u njemu pomoću jedne matematičke formule na temelju broja mjeseca? Određivanje broja dana u mjesecu u programu Microsoft Excel Koliko je mjeseci prošlo između dva datuma

💖 Sviđa li vam se? Podijelite vezu sa svojim prijateljima

Nedavno sam, nakon što sam dugo vremena proveo bez sna, razmišljao o tome kako možete saznati broj dana u mjesecu, znajući njegov broj. Postoje dječje pjesmice na ovu temu, postoji način brojanja po pločicama, ali meni te metode ne odgovaraju - uronio sam u potragu za matematičkom formulom koju sam nakon nekog vremena izveo.

Dakle zadatak

Formalno Drugim riječima, trebamo dobiti funkciju f(x) koja bi dala sljedeću listu vrijednosti (koju sam, usput, našao negdje na Internetu, a nisam je izveo pomoću mnemotehničkih pravila):

Vrijedno je uzeti u obzir da kao argument primamo samo broj mjeseca, tj. ne uzimamo u obzir prijestupne godine, i f(2) = 28.

Ako želite znati kakav sam rezultat dobio, pomaknite se do dna ove stranice. Ono što će biti opisano u nastavku je izvođenje željene formule.

Što ćemo koristiti

Osim zbrajanja, oduzimanja i množenja, koristit ću dvije operacije: cjelobrojno dijeljenje i operaciju ostatka. Da vas podsjetim što je to:

  • Cjelobrojno dijeljenje, odnosno "dijeljenje sa zaokruživanjem". Za mene će to biti predstavljeno kao redovita podjela: a / b - što znači ⌊a / b⌋. Na primjer, 5/3 = 1.
  • Uzimajući ostatak po modulu. Tradicionalno ću označavati dijeljenje s ostatkom: a % b = a - (a / b) * b. Na primjer, 5% 3 = 2.

Imaju isti prioritet i lijevo su asocijativne.

Osnove, ili pravilo s mnogim iznimkama

Pokušajmo pronaći uzorak koji bi zadovoljio što više vrijednosti argumenata. Tipično, broj dana u mjesecu varira između 30 i 31. U isto vrijeme, možete primijetiti ovisnost ovog broja o paritetu mjeseca - što znači da ćemo koristiti operaciju uzimanja ostatka modulo 2. To čini se da bi ovo trebalo biti nešto poput:

f1(x) = 30 + x%2


Nije loš početak! Zanemarimo li veljaču za koju ćemo očito morati posegnuti za nekim trikovima, bit će nam drago što smo uspjeli prilagoditi funkciju prvoj polovici godine. A onda, počevši od kolovoza, paritet se mora promijeniti u suprotno. To se može učiniti zamjenom x%2 u prvoj verziji formule za (x+1)%2:

f₂(x) = 30 + (x + 1) % 2


Očekivano, sada je prva polovica godine već izvan okvira točnih vrijednosti, no mjeseci od kolovoza do prosinca dali su ono što je trebalo. Pronađimo način da spojimo ova dva dijela.

Maska

Potrebno nam je da se +1 u dividendi “aktivira” samo kada argument dosegne vrijednosti veće od 8, tj. moramo nanijeti neku masku. U ovom slučaju, vrijednosti argumenta ne mogu premašiti 12. To znači da je cjelobrojna podjela argumenta s 8 idealna za nas:


Upravo ono što nam treba. Iskoristimo ovaj izlaz:

f₃(x) = 30 + (x + x / 8) % 2


Juhu! Sve je točno, osim veljače. Kako neočekivano.

veljača

Svi mjeseci imaju 30 ili 31 dan, ali veljača ima 28 (da vas podsjetim, prijestupne godine ne uzimamo u obzir).

Povijesna referenca: U romaničkom kalendaru veljača je bila posljednji mjesec u godini - složite se, dodavanje jednog dana u prijestupnoj godini na kraj kalendara ima više intuitivnog smisla. No, mi se služimo gregorijanskim kalendarom, u kojem je najkraći mjesec voljom jednog od mudrih vladara pomaknut bliže početku.

U najnovijoj verziji naše formule veljača je dobila punih 30 dana. Zato se moramo odvojiti od njega na nekoliko dana. Naravno, neki će drugi mjeseci patiti od toga: bilo lijevo od veljače, bilo desno od nje na našem popisu - međutim, mnogo je manje mjeseci s desne strane, pa ćemo morati žrtvovati siječanj, a zatim prilagoditi formulu za to također. Pomoću izraza možete odrezati dane za prvi i drugi mjesec 2%x.

Bilješka: ovaj post je prijevod članka cmcenroe.me/2014/12/05/days-in-month-formula.html ( dio I), kao i autorov dodatak ( Dio II). Materijal ne treba shvatiti ozbiljno, već kao mentalnu vježbu koja zahtijeva malo više od znanja aritmetike na školskoj razini i nema praktičnu primjenu. Sretno čitanje svima!

dio I

Uvod

Nedavno sam, nakon još jedne neprospavane noći, razmišljao o metodama pamćenja broja dana u svakom mjesecu u godini. Za ovo postoji brojalica, kao i način na koji se računa na zglobove prstiju, ali meni nije odgovaralo ni jedno ni drugo. Pitao sam se postoji li možda neka vrsta matematičke formule za rješavanje takvog problema i - ne pronašavši je tijekom površnog proučavanja - izazvao sam sam sebe da je stvorim.

Formalizacija Drugim riječima, potrebno je pronaći funkciju f, tako da vrijednost f(x) za svaki mjesec x, predstavljen brojem od 1 do 12, jednak je broju dana u tom mjesecu. Tablica vrijednosti argumenata i funkcija:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 28 31 30 31 30 31 31 30 31 30 31

Ako ste bili u iskušenju da sami isprobate prije nego što ste pročitali moje rješenje, sada je pravo vrijeme. Ako želite odmah vidjeti gotov odgovor, pogledajte ispod spojlera.

Odgovor


U nastavku su moji koraci za pronalaženje rješenja.

Matematički aparat

Prvo, ukratko osvježimo pamćenje o dva vitalna operatora u rješavanju ovog problema: cjelobrojnom dijeljenju i ostatku dijeljenja.

Cjelobrojno dijeljenje Ovo je operator koji se koristi u mnogim programskim jezicima za dijeljenje dva cijela broja i uklanjanje razlomka iz kvocijenta. prikazat ću to kao . Na primjer:

Ostatak podjele Ovo je operator koji pronalazi ostatak dijeljenja. Mnogi programski jezici koriste simbol % , koristit ću konstrukcije poput, na primjer:

Imajte na umu da ostatak podjele ima jednak prioritet kao i podjela.

Osnove

Dakle, upotrijebimo naš matematički aparat da dobijemo osnovnu formulu. Normalan mjesec ima 30 ili 31 dan, tako da možemo mijenjati između 1 i 0, a zatim jednostavno dodati konstantu tom broju:

Dobivamo tablicu s točnim vrijednostima označenim podebljanim slovima:
x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 30 31 30 31 30 31 30 31 30 31 30

Nije loš početak! Već postoje točne vrijednosti za siječanj i za mjesece od ožujka do uključivo srpnja. Veljača je poseban slučaj, a njime ćemo se pozabaviti nešto kasnije. Nakon srpnja, za preostale mjesece, redoslijed primanja 0 i 1 treba biti obrnut.
Da bismo to učinili, možemo dodati 1 dividendi:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 30 31 30 31 30 31 30 31 30 31 30 31

Vrijednosti za kolovoz do prosinca sada su točne, ali očekivano, vrijednosti za ostale mjesece nisu točne. Pogledajmo kako možemo kombinirati ove formule.

Prekrivanje maske

Ovo zahtijeva funkciju po komadu, ali - budući da mi se ovo činilo dosadnim - razmišljao sam o drugom rješenju, koristeći jedan dio funkcije na jednom intervalu, drugi na drugom.
Vjerujem da bi najlakši način bio pronaći izraz koji je jednak 1 u jednom području primjene i 0 u ostalima. Metodu u kojoj množenjem argumenta izrazom isključujemo iz formule izvan njezina opsega nazvao sam "nametanje maske", jer je ovo ponašanje slično nekoj vrsti bit maske.
Da bismo koristili ovu metodu, u posljednjem dijelu naše funkcije moramo pronaći izraz jednak 1 kada je , a - budući da su vrijednosti argumenata uvijek manje od 16 - cjelobrojno dijeljenje s 8 dobro radi za ovo.
x 1 2 3 4 5 6 7 8 9 10 11 12
x ⁄ 8 ⌋ 0 0 0 0 0 0 0 1 1 1 1 1

Sada, koristeći ovu masku, koristeći izraz umjesto 1 u dividendi, možemo obrnuti redoslijed dobivanja 0 i 1 u formuli:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 30 31 30 31 30 31 31 30 31 30 31

Eureka! Sve je točno, osim veljače. Iznenađenje iznenađenje.

veljača

Svaki mjesec ima 30 ili 31 dan, osim veljače sa svojih 28 (prijestupne godine su izvan dosega ovog zadatka). Trenutno, prema našoj formuli, ima 30 dana, pa bi bilo lijepo oduzeti izraz jednak 2 na .
Najbolje što sam mogao smisliti je ovo, a maska ​​se primjenjuje na sve mjesece nakon veljače:
x 1 2 3 4 5 6 7 8 9 10 11 12
2 mod x 0 0 2 2 2 2 2 2 2 2 2 2

Promjenom osnovne konstante na 28 i dodavanjem 2 preostalim mjesecima, dobivamo formulu:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 29 28 31 30 31 30 31 31 30 31 30 31

Nažalost, siječanj je sada 2 dana kraći. Ali, srećom, vrlo je lako dobiti izraz koji će se primijeniti samo na prvi mjesec: to je inverzni broj zaokružen prema dolje. Množenjem s 2 dobivamo konačnu formulu:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 28 31 30 31 30 31 31 30 31 30 31

Pogovor

Evo je - formula za dobivanje broja dana u bilo kojem mjesecu u godini, koristeći jednostavnu aritmetiku. Sljedeći put kada se budete pitali koliko dana ima u rujnu, samo upotrijebite ovu JavaScript funkciju u jednom retku:

Funkcija f(x) ( return 28 + (x + Math.floor(x/8)) % 2 + 2 % x + 2 * Math.floor(1/x); )

Dio II

Uvod

U prvom dijelu dobivena je kratka i čak pomalo elegantna formula, čije su glavne prednosti jednostavnost matematičkog aparata, odsutnost grana i uvjetnih izraza te kratkoća. Nedostaci - osim činjenice da ga nećete koristiti u svom projektu - uključuju nedostatak provjere prijestupnih i neprestupnih godina.
Stoga sam si postavio zadatak stvoriti funkciju f, tako da vrijednost f(x, y) za svaki mjesec x, predstavljena brojem od 1 do 12 i godinom g, veće od 0, jednako je broju dana u mjesecu x godišnje g.
Za nestrpljive, ispod spoilera je spreman odgovor, ali za ostale vas molim da me pratite.

Odgovor

Ostatak podjele: mod i ⌊⌋

Radi vizualne jasnoće, složimo se da je u nekim formulama operator dijeljenja s ostatkom zamijenjen donjim zagradama, gdje mi se činilo potrebnim:

Prijestupna godina

Tijekom prijestupne godine uvodi se dodatni kalendarski dan: 29. veljače. Kao što znate, prijestupna godina je ona godina koja je djeljiva sa 4, a nije djeljiva sa 100, niti je djeljiva sa 400. Napišimo izraz identičan ovoj tvrdnji:

Da bismo ovaj izraz pretvorili u algebarski, potrebno je primijeniti injekciju oblika na rezultat izraza:

Što će vam omogućiti da dobijete 1 pri dijeljenju bez ostatka i 0 pri dijeljenju s ostatkom, kako biste ga upotrijebili u formuli za određivanje broja dana u mjesecu.

Kao funkcija g" možete koristiti 1 minus ostatak dijeljenja za:

x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g"(x) Beskonačnost 1 0 0 0 0 0 0 0 0 0 0 0 0 0

Lako je vidjeti da povećanjem dividende i djelitelja za 1 dobivamo ispravnu formulu za:
x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g"(x) 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Dakle, izraz pišemo kao:


I napišimo izraz kao:

Koristeći ovaj pristup dobivamo sljedeću funkciju g (y), čija će vrijednost biti 1 ako je godina prijestupna ili 0 u suprotnom:

g 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
g (y) 0 0 1 0 0 0 1 0 0 0 1
g 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000
g (y) 1 0 0 0 1 0 0 0 1 0 0

Prijestupne godine prikazane su podebljano.

Dopustite mi da vas podsjetim da se, u okviru prihvaćenog sporazuma, operator za dobivanje ostatka dijeljenja može prikazati kao mod, i ⌊⌋.

Prekrivanje maske

U formuli, dio je amandman koji dodaje 2 dana siječnju. Ako uklonimo faktor 2 i zamijenimo 1 s 2 u brojniku, tada će ova formula dodati 2 dana siječnju i 1 dan veljači, što nam daje ključ za dodavanje dana u prijestupnoj godini. Radi jasnoće koristimo srednju vrijednost u formuli g (y) i kao g Koristimo 2000. (prijestupnu) i 2001. (neprijestupnu) godinu:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x, 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f(x, 2001) 30 28 31 30 31 30 31 31 30 31 30 30

Vrijednosti za sve mjesece osim siječnja godine koja nije prijestupna su točne.

Da bismo ispravili ovaj dosadni nesporazum, dodajmo 1 dan siječnju pomoću formule koja nam je već poznata:


Ili:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x, 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f(x, 2001) 31 28 31 30 31 30 31 31 30 31 30 30

Zaključak

Kao rezultat toga, dobivena je puno glomaznija, ali univerzalnija formula, pomoću koje se također može dobiti broj dana u mjesecu određene godine:

Funkcija f(x, y) ( return 28 + ((x + Math.floor(x / 8)) % 2) + 2 % x + Math.floor((1 + (1 - (y % 4 + 2) % (y % 4 + 1)) * ((y % 100 + 2) % (y % 100 + 1)) + (1 - (y % 400 + 2) % (y % 400 + 1))) / x) + Math.floor(1/x) - Math.floor(((1 - (y % 4 + 2) % (y % 4 + 1)) * ((y % 100 + 2) % (y % 100 + 1 )) + (1 - (y % 400 + 2) % (y % 400 + 1)))/x); )
Primjer u C# ideone.com/fANutz.

1 . Ne znam koristiti takve mnemotehnike, pa sam pogledao znak na internetu.
2 . "Osnove", ili "Pravilo s mnogo iznimaka", kao i većina pravila.
3 . Izvorno, u rimskom kalendaru, veljača je bila posljednji mjesec u godini, pa je logično da je kraća od svih ostalih. Ima i logike dodati ili ukloniti dan na kraju godine, pa je njegova duljina promjenjiva.

Ažurirano 1:
Alternativni prijevod prvog dijela u

Bilješka: ovaj post je prijevod članka cmcenroe.me/2014/12/05/days-in-month-formula.html ( dio I), kao i autorov dodatak ( Dio II). Materijal ne treba shvatiti ozbiljno, već kao mentalnu vježbu koja zahtijeva malo više od znanja aritmetike na školskoj razini i nema praktičnu primjenu. Sretno čitanje svima!

dio I

Uvod

Nedavno sam, nakon još jedne neprospavane noći, razmišljao o metodama pamćenja broja dana u svakom mjesecu u godini. Za ovo postoji brojalica, kao i način na koji se računa na zglobove prstiju, ali meni nije odgovaralo ni jedno ni drugo. Pitao sam se postoji li možda neka vrsta matematičke formule za rješavanje takvog problema i - ne pronašavši je tijekom površnog proučavanja - izazvao sam sam sebe da je stvorim.

Formalizacija Drugim riječima, potrebno je pronaći funkciju f, tako da vrijednost f(x) za svaki mjesec x, predstavljen brojem od 1 do 12, jednak je broju dana u tom mjesecu. Tablica vrijednosti argumenata i funkcija:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 28 31 30 31 30 31 31 30 31 30 31

Ako ste bili u iskušenju da sami isprobate prije nego što ste pročitali moje rješenje, sada je pravo vrijeme. Ako želite odmah vidjeti gotov odgovor, pogledajte ispod spojlera.

Odgovor


U nastavku su moji koraci za pronalaženje rješenja.

Matematički aparat

Prvo, ukratko osvježimo pamćenje o dva vitalna operatora u rješavanju ovog problema: cjelobrojnom dijeljenju i ostatku dijeljenja.

Cjelobrojno dijeljenje Ovo je operator koji se koristi u mnogim programskim jezicima za dijeljenje dva cijela broja i uklanjanje razlomka iz kvocijenta. prikazat ću to kao . Na primjer:

Ostatak podjele Ovo je operator koji pronalazi ostatak dijeljenja. Mnogi programski jezici koriste simbol % , koristit ću konstrukcije poput, na primjer:

Imajte na umu da ostatak podjele ima jednak prioritet kao i podjela.

Osnove

Dakle, upotrijebimo naš matematički aparat da dobijemo osnovnu formulu. Normalan mjesec ima 30 ili 31 dan, tako da možemo mijenjati između 1 i 0, a zatim jednostavno dodati konstantu tom broju:

Dobivamo tablicu s točnim vrijednostima označenim podebljanim slovima:
x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 30 31 30 31 30 31 30 31 30 31 30

Nije loš početak! Već postoje točne vrijednosti za siječanj i za mjesece od ožujka do uključivo srpnja. Veljača je poseban slučaj, a njime ćemo se pozabaviti nešto kasnije. Nakon srpnja, za preostale mjesece, redoslijed primanja 0 i 1 treba biti obrnut.
Da bismo to učinili, možemo dodati 1 dividendi:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 30 31 30 31 30 31 30 31 30 31 30 31

Vrijednosti za kolovoz do prosinca sada su točne, ali očekivano, vrijednosti za ostale mjesece nisu točne. Pogledajmo kako možemo kombinirati ove formule.

Prekrivanje maske

Ovo zahtijeva funkciju po komadu, ali - budući da mi se ovo činilo dosadnim - razmišljao sam o drugom rješenju, koristeći jedan dio funkcije na jednom intervalu, drugi na drugom.
Vjerujem da bi najlakši način bio pronaći izraz koji je jednak 1 u jednom području primjene i 0 u ostalima. Metodu u kojoj množenjem argumenta izrazom isključujemo iz formule izvan njezina opsega nazvao sam "nametanje maske", jer je ovo ponašanje slično nekoj vrsti bit maske.
Da bismo koristili ovu metodu, u posljednjem dijelu naše funkcije moramo pronaći izraz jednak 1 kada je , a - budući da su vrijednosti argumenata uvijek manje od 16 - cjelobrojno dijeljenje s 8 dobro radi za ovo.
x 1 2 3 4 5 6 7 8 9 10 11 12
x ⁄ 8 ⌋ 0 0 0 0 0 0 0 1 1 1 1 1

Sada, koristeći ovu masku, koristeći izraz umjesto 1 u dividendi, možemo obrnuti redoslijed dobivanja 0 i 1 u formuli:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 30 31 30 31 30 31 31 30 31 30 31

Eureka! Sve je točno, osim veljače. Iznenađenje iznenađenje.

veljača

Svaki mjesec ima 30 ili 31 dan, osim veljače sa svojih 28 (prijestupne godine su izvan dosega ovog zadatka). Trenutno, prema našoj formuli, ima 30 dana, pa bi bilo lijepo oduzeti izraz jednak 2 na .
Najbolje što sam mogao smisliti je ovo, a maska ​​se primjenjuje na sve mjesece nakon veljače:
x 1 2 3 4 5 6 7 8 9 10 11 12
2 mod x 0 0 2 2 2 2 2 2 2 2 2 2

Promjenom osnovne konstante na 28 i dodavanjem 2 preostalim mjesecima, dobivamo formulu:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 29 28 31 30 31 30 31 31 30 31 30 31

Nažalost, siječanj je sada 2 dana kraći. Ali, srećom, vrlo je lako dobiti izraz koji će se primijeniti samo na prvi mjesec: to je inverzni broj zaokružen prema dolje. Množenjem s 2 dobivamo konačnu formulu:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 28 31 30 31 30 31 31 30 31 30 31

Pogovor

Evo je - formula za dobivanje broja dana u bilo kojem mjesecu u godini, koristeći jednostavnu aritmetiku. Sljedeći put kada se budete pitali koliko dana ima u rujnu, samo upotrijebite ovu JavaScript funkciju u jednom retku:

Funkcija f(x) ( return 28 + (x + Math.floor(x/8)) % 2 + 2 % x + 2 * Math.floor(1/x); )

Dio II

Uvod

U prvom dijelu dobivena je kratka i čak pomalo elegantna formula, čije su glavne prednosti jednostavnost matematičkog aparata, odsutnost grana i uvjetnih izraza te kratkoća. Nedostaci - osim činjenice da ga nećete koristiti u svom projektu - uključuju nedostatak provjere prijestupnih i neprestupnih godina.
Stoga sam si postavio zadatak stvoriti funkciju f, tako da vrijednost f(x, y) za svaki mjesec x, predstavljena brojem od 1 do 12 i godinom g, veće od 0, jednako je broju dana u mjesecu x godišnje g.
Za nestrpljive, ispod spoilera je spreman odgovor, ali za ostale vas molim da me pratite.

Odgovor

Ostatak podjele: mod i ⌊⌋

Radi vizualne jasnoće, složimo se da je u nekim formulama operator dijeljenja s ostatkom zamijenjen donjim zagradama, gdje mi se činilo potrebnim:

Prijestupna godina

Tijekom prijestupne godine uvodi se dodatni kalendarski dan: 29. veljače. Kao što znate, prijestupna godina je ona godina koja je djeljiva sa 4, a nije djeljiva sa 100, niti je djeljiva sa 400. Napišimo izraz identičan ovoj tvrdnji:

Da bismo ovaj izraz pretvorili u algebarski, potrebno je primijeniti injekciju oblika na rezultat izraza:

Što će vam omogućiti da dobijete 1 pri dijeljenju bez ostatka i 0 pri dijeljenju s ostatkom, kako biste ga upotrijebili u formuli za određivanje broja dana u mjesecu.

Kao funkcija g" možete koristiti 1 minus ostatak dijeljenja za:

x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g"(x) Beskonačnost 1 0 0 0 0 0 0 0 0 0 0 0 0 0

Lako je vidjeti da povećanjem dividende i djelitelja za 1 dobivamo ispravnu formulu za:
x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g"(x) 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Dakle, izraz pišemo kao:


I napišimo izraz kao:

Koristeći ovaj pristup dobivamo sljedeću funkciju g (y), čija će vrijednost biti 1 ako je godina prijestupna ili 0 u suprotnom:

g 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
g (y) 0 0 1 0 0 0 1 0 0 0 1
g 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000
g (y) 1 0 0 0 1 0 0 0 1 0 0

Prijestupne godine prikazane su podebljano.

Dopustite mi da vas podsjetim da se, u okviru prihvaćenog sporazuma, operator za dobivanje ostatka dijeljenja može prikazati kao mod, i ⌊⌋.

Prekrivanje maske

U formuli, dio je amandman koji dodaje 2 dana siječnju. Ako uklonimo faktor 2 i zamijenimo 1 s 2 u brojniku, tada će ova formula dodati 2 dana siječnju i 1 dan veljači, što nam daje ključ za dodavanje dana u prijestupnoj godini. Radi jasnoće koristimo srednju vrijednost u formuli g (y) i kao g Koristimo 2000. (prijestupnu) i 2001. (neprijestupnu) godinu:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x, 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f(x, 2001) 30 28 31 30 31 30 31 31 30 31 30 30

Vrijednosti za sve mjesece osim siječnja godine koja nije prijestupna su točne.

Da bismo ispravili ovaj dosadni nesporazum, dodajmo 1 dan siječnju pomoću formule koja nam je već poznata:


Ili:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x, 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f(x, 2001) 31 28 31 30 31 30 31 31 30 31 30 30

Zaključak

Kao rezultat toga, dobivena je puno glomaznija, ali univerzalnija formula, pomoću koje se također može dobiti broj dana u mjesecu određene godine:

Funkcija f(x, y) ( return 28 + ((x + Math.floor(x / 8)) % 2) + 2 % x + Math.floor((1 + (1 - (y % 4 + 2) % (y % 4 + 1)) * ((y % 100 + 2) % (y % 100 + 1)) + (1 - (y % 400 + 2) % (y % 400 + 1))) / x) + Math.floor(1/x) - Math.floor(((1 - (y % 4 + 2) % (y % 4 + 1)) * ((y % 100 + 2) % (y % 100 + 1 )) + (1 - (y % 400 + 2) % (y % 400 + 1)))/x); )
Primjer u C# ideone.com/fANutz.

1 . Ne znam koristiti takve mnemotehnike, pa sam pogledao znak na internetu.
2 . "Osnove", ili "Pravilo s mnogo iznimaka", kao i većina pravila.
3 . Izvorno, u rimskom kalendaru, veljača je bila posljednji mjesec u godini, pa je logično da je kraća od svih ostalih. Ima i logike dodati ili ukloniti dan na kraju godine, pa je njegova duljina promjenjiva.

Ažurirano 1:
Alternativni prijevod prvog dijela u

Pomoći će vam besplatni online kalkulator Kontur.Accounting koji će vam reći koliko je dana prošlo između dva navedena datuma. Osim toga, ako imate potrebu, možete prebrojati koliko kalendarskih, vikenda ili radnih dana (sati) sadrži navedeno razdoblje u godini ili nekoliko godina.

Koliko dana ima između datuma? upute

Jednostavno postavite određeni dan početka i završetka i dobit ćete ponudu u djeliću sekunde. Online kalkulator samostalno izračunava sve podatke. Ako promijenite izvorne dane u tjednu, rezultat se automatski ponovno izračunava kako bi se uzele u obzir prijestupne godine.

Važno: ne možete uzeti mjesečne radne dane/sate iz prošlogodišnjih izračuna i dati ih kao izračune - podaci će varirati. Stoga je bolje koristiti kalkulator.

Dakle, postupak je sljedeći:

  1. U poljima "Datum početka" i "Datum završetka" odaberite dan početka i završetka odbrojavanja, počevši od 2013. i završavajući u budućnosti u 2018. godini.
  2. U sljedećem polju postavite broj radnih sati u danu. Prema zadanim postavkama, ovo polje je već postavljeno na 8 sati (40-satni radni tjedan), ali možete promijeniti ovaj broj.
  3. Na desnoj strani ekrana u banneru vidjet ćete rezultat: radni dani, kalendarski dani i radno vrijeme između navedenih datuma. Rezultati se moraju kopirati i spremiti u vaš dokument.

Za što sve možete koristiti kalkulator?

  1. Za izračun kazni i kašnjenja prema ugovorima
  2. Kako razumjeti učinkovitost korištenja resursa i rokove korištenja
  3. Kako izbjeći slučajno zakazivanje zadataka za vikend
  4. Koliko je vremena ostalo do roka

Primjer:

Vi ste računovođa. Voditelj vas je zamolio da u sljedećih nekoliko minuta dostavite podatke o broju radnih sati koje svi zaposlenici tvrtke moraju odraditi u veljači. Broj zaposlenih možete lako odrediti – brojke imate pred očima. Ali treba brojati sate... Koliko dana ima veljača? Je li prijestupna godina? Koji su dani bili vikendi? Kako odrediti broj dana praznika?

Rješenje: samo koristite naš widget. Sve informacije dobit ćete automatski, ne trebaju vam stolni kalendari i kalkulatori.

Je li vam se svidio ovaj kalkulator? Zatim isprobajte naše druge mogućnosti

Želite voditi računovodstvo, slati izvješća i obračunavati u praktičnom i jednostavnom web servisu? Isprobajte Kontur.Accounting besplatno 14 dana! Brzo ćemo vas naučiti kako koristiti uslugu i odgovoriti na sva vaša pitanja!

Kalkulator datuma dizajniran je za izračunavanje broja dana između datuma, kao i za pronalaženje datuma dodavanjem ili oduzimanjem određenog broja dana poznatom datumu.

Dodajte dane do datuma

Kako biste saznali koji će datum biti za određeni broj dana, koristite ovu opciju. Unesite početni datum i broj dana koji mu želite dodati. Za oduzimanje koristite minus vrijednost. Kalkulator također ima opciju dodavanja samo radnih dana.

Izračunavanje broja dana između datuma

Ova metoda izračuna odgovorit će na pitanje "koliko je dana prošlo od datuma". Unesite datum početka i datum završetka i kliknite gumb "izračunaj". Kalkulator će pokazati koliko dana ima između unesenih datuma. Zasebno, kalkulator će pokazati broj radnih dana.

Pomoću ove opcije možete izračunati koliko je dana preostalo do određenog događaja, na primjer, rođendana ili praznika. Da biste to učinili, unesite današnji datum u polje za početni datum, a datum događaja u polje za završni datum.

Praznici

Kalkulator može izračunati, zbrajati i oduzimati i kalendarske i radne dane. Službeni neradni praznici su:

  • 1,2,3,4,5,6,8 siječnja - novogodišnji praznici
  • 7. siječnja - pravoslavni Božić
  • 23. veljače - Dan branitelja domovine
  • 8. ožujka - Međunarodni dan žena
  • 1. svibnja - praznik proljeća i rada
  • 9. svibnja - Dan pobjede
  • 12. lipnja - Dan Rusije
  • 4. studenog - Dan narodnog jedinstva

Ako praznik pada u subotu ili nedjelju, pomiče se na sljedeći radni dan. Ali ponekad se vikend pomakne na potpuno drugo mjesto u kalendaru. Na primjer, subota i nedjelja koje padaju na novogodišnje praznike mogu se pomaknuti u svibanj kako bi se produžili svibanjski praznici.

Prilikom izračunavanja dana kalkulator uzima u obzir i službene datume praznika i sve transfere.



reci prijateljima