Domov / Ovládanie PC / Určenie počtu dní v mesiaci v programe Microsoft Excel. Ako vypočítať počet dní v ňom jedným matematickým vzorcom podľa čísla mesiaca? Na 13 kalendárnych dní

Určenie počtu dní v mesiaci v programe Microsoft Excel. Ako vypočítať počet dní v ňom jedným matematickým vzorcom podľa čísla mesiaca? Na 13 kalendárnych dní

Ak chcete vyriešiť niektoré problémy pri vytváraní tabuľky, musíte zadať počet dní v mesiaci v samostatnej bunke alebo vo vzorci, aby program strávil potrebné výpočty. Excel má nástroje na vykonanie tejto operácie. uvažujme rôznymi spôsobmi uplatnenie tejto možnosti.

Počet dní v mesiaci môžete vypočítať v Exceli pomocou špeciálnych operátorov kategórií "Dátum a čas". Ak chcete zistiť, ktorá možnosť je najlepšie použiť, musíte najprv stanoviť ciele operácie. V závislosti od toho môže byť výsledok výpočtu zobrazený v samostatnom prvku na hárku alebo môže byť použitý v inom vzorci.

Metóda 1: kombinácia operátorov DAY a EOMONTH

Väčšina jednoduchým spôsobom na vyriešenie tohto problému je potrebná kombinácia operátorov DAY A EOMONTH.

Funkcia DAY patrí do skupiny operátorov "Dátum a čas". Ukazuje na konkrétne číslo 1 predtým 31 . V našom prípade úloha daný operátor bude označovať posledný deň v mesiaci pomocou vstavanej funkcie ako argumentu EOMONTH.

Syntax operátora DAYĎalšie:

DAY(formát dátumu_v_čísle)

To znamená, že jediný argument tejto funkcie je "Dátum v číselnom formáte". Nastaví ho operátor EOMONTH. Treba povedať, že dátum v číselnom formáte sa líši od bežného formátu. Napríklad dátum 04.05.2017 v číselnej forme bude vyzerať 42859 . Excel preto používa tento formát iba na interné operácie. Málokedy sa používa na zobrazenie v bunkách.

Operátor EOMONTH je určený na označenie poradového čísla posledného dňa v mesiaci, čo je daný počet mesiacov dopredu alebo dozadu od určeného dátumu. Syntax funkcie je:

EOMONTH(dátum_začiatku; počet_mesiacov)

Operátor "dátum začiatku" obsahuje dátum, od ktorého sa odpočítavanie vykonáva, alebo odkaz na bunku, kde sa nachádza.

Operátor "Počet mesiacov" označuje počet mesiacov, ktoré sa majú počítať od daného dátumu.

Teraz sa pozrime, ako to funguje na konkrétnom príklade. Za to berieme strana v Exceli, v ktorej jednej z buniek je zadané určité kalendárne číslo. Pomocou vyššie uvedeného súboru operátorov je potrebné určiť, koľko dní je v mesačnom období, na ktoré sa toto číslo vzťahuje.


Náš všeobecný vzorec má nasledujúcu formu:

DEŇ(EOMESIAC(B3,0))

V tomto vzorci je premennou hodnotou iba adresa bunky ( B3). Ak teda nechcete vykonať postup cez Funkcionári, môžete vložiť tento vzorec na ľubovoľný prvok hárku jednoducho nahradením adresy bunky obsahujúcej číslo adresou, ktorá je relevantná vo vašom konkrétnom prípade. Výsledok bude podobný.

Metóda 2: automatické zistenie počtu dní

Teraz sa pozrime na ďalší problém. Vyžaduje sa, aby sa počet dní zobrazoval nie podľa daného kalendárneho čísla, ale podľa aktuálneho. Okrem toho by zmena periódy prebehla automaticky bez zásahu používateľa. Aj keď sa to zdá zvláštne, ale zadanú úlohuľahší ako predchádzajúci. Aby ste to vyriešili, dokonca otvorte Sprievodca funkciou nie je potrebný, pretože vzorec, ktorý vykonáva túto operáciu, neobsahuje hodnoty premenných ani odkazy na bunky. Môžete jednoducho zadať do bunky hárka, kde chcete zobraziť výsledok, nasledujúci vzorec bez zmien:

DAY(EOMONTH(DNES();0))

Vstavaná funkcia TODAY, ktorú sme v tomto prípade použili, zobrazuje dnešné číslo a neberie žiadne argumenty. Vaša bunka tak bude vždy zobrazovať počet dní v aktuálnom mesiaci.

Metóda 3: Vypočítajte počet dní, ktoré sa majú použiť v zložitých vzorcoch

Vo vyššie uvedených príkladoch sme si ukázali, ako vypočítať počet dní v mesiaci podľa zadaného kalendárneho dátumu alebo automaticky podľa aktuálneho mesiaca, pričom výsledok zobrazíme v samostatnej bunke. Nájdenie tejto hodnoty však môže byť potrebné na výpočet iných ukazovateľov. V tomto prípade sa výpočet počtu dní vykoná v zložitom vzorci a nezobrazí sa v samostatnej bunke. Pozrime sa, ako to urobiť na príklade.

Musíme sa uistiť, že bunka zobrazuje počet dní zostávajúcich do konca aktuálneho mesiaca. Ako v predchádzajúci spôsob, táto možnosť nevyžaduje otvorenie Funkcionári. Do bunky môžete jednoducho zadať nasledujúci výraz:

DAY(EOMESIAC(DNES();0))-DEŇ(DNES())

Potom sa v zadanej bunke zobrazí počet dní do konca mesiaca. Každý deň sa výsledok automaticky aktualizuje a od začiatku nového obdobia sa odpočítavanie znova spustí. Ukazuje sa akýsi časovač odpočítavania.

Ako vidíte, tento vzorec pozostáva z dvoch častí. Prvým z nich je už známy výraz na výpočet počtu dní v mesiaci:

DAY(EOMONTH(DNES();0))

Ale v druhej časti sa dnešné číslo odpočíta od tohto ukazovateľa:

DEŇ(DNES())

Pri vykonávaní tohto výpočtu je teda vzorec na výpočet počtu dní neoddeliteľnou súčasťou zložitejšieho vzorca.

Metóda 4: alternatívny vzorec

Verzie programu staršie ako Excel 2007 však bohužiaľ nemajú operátora EOMONTH. A čo používatelia, ktorí používajú staršie verzie aplikácie? Pre nich táto možnosť existuje prostredníctvom iného vzorca, ktorý je masívnejší ako ten, ktorý je popísaný vyššie. Pozrime sa, ako pomocou tejto možnosti vypočítať počet dní v mesiaci z daného kalendárneho čísla.

  1. Vyberte bunku na zobrazenie výsledku a prejdite do okna argumentov operátora DAY nám už známy. Kurzor nastavíme do jediného poľa tohto okna a klikneme na obrátený trojuholník naľavo od riadku vzorcov. Prejdite do sekcie "Viac funkcií...".
  2. V okne Funkcionári v skupine "Dátum a čas" zvýraznite meno "DÁTUM" a kliknite na tlačidlo OK.
  3. Spustí sa okno operátora DÁTUM. Táto funkcia prevedie dátum z bežného formátu na číselnú hodnotu, ktorú bude musieť operátor následne spracovať DAY.

    Okno, ktoré sa otvorí, má tri polia. V teréne "deň" môžete zadať číslo "1". Toto bude rovnaký postup pre každú situáciu. Ale ďalšie dve oblasti sa budú musieť dôkladne zaoberať.

    Nastavte kurzor do poľa "rok". Ďalej sa obraciame na výber operátorov cez známy trojuholník.

  4. Všetko v rovnakej kategórii Funkcionári zvýraznite meno "ROK" a kliknite na tlačidlo OK.
  5. Spustí sa okno Argumenty operátora ROK. Z určeného čísla určí rok. V jedinom poli okna "Dátum v číselnom formáte" zadajte odkaz na bunku obsahujúcu pôvodný dátum, pre ktorý chcete určiť počet dní. Potom sa neponáhľajte kliknúť na tlačidlo OK a kliknite na názov "DÁTUM" v riadku vzorcov.
  6. Potom sa opäť vrátime do okna argumentov DÁTUM. Nastavte kurzor do poľa "mesiac" a pokračujte vo výbere funkcií.
  7. IN Sprievodca funkciou kliknite na meno "MESIAC" a kliknite na tlačidlo OK.
  8. Spustí sa okno argumentov funkcie MESIAC. Jeho úlohy sú podobné predchádzajúcemu operátorovi, len zobrazuje hodnotu čísla mesiaca. V jedinom poli tohto okna nastavíme rovnaký odkaz na pôvodné číslo. Potom v riadku vzorcov kliknite na názov "DAY".
  9. Späť do okna argumentov DAY. Tu musíme urobiť len jeden malý dotyk. V jedinom poli okna, v ktorom sa už údaje nachádzajú, pridajte výraz na koniec vzorca "-1" bez úvodzoviek a za operátora uveďte aj „+1“. MESIAC. Potom kliknite na tlačidlo OK.
  10. Ako vidíte, vo vopred vybratej bunke sa zobrazuje počet dní v mesiaci, do ktorého zadané číslo patrí. Všeobecný vzorec vyzerá takto:

    DEŇ(DÁTUM(ROK(D3),MESIAC(D3)+1;1)-1)

Tajomstvo tohto vzorca je jednoduché. Používame ho na určenie dátumu prvého dňa nasledujúceho obdobia a potom od neho odpočítame jeden deň, čím získame počet dní v zadanom mesiaci. Premenná v tomto vzorci je odkaz na bunku D3 na dvoch miestach. Ak ho nahradíte adresou bunky, v ktorej je dátum vo vašom konkrétnom prípade, môžete jednoducho vstúpiť daný výraz na akýkoľvek prvok listu bez pomoci Funkcionári.

Ako vidíte, existuje niekoľko možností, ako zistiť počet dní v mesiaci v Exceli. Ktorý z nich použiť, závisí od konečného cieľa používateľa, ako aj od verzie programu, ktorú používa.

Bezplatná online kalkulačka Kontur.Accounting vám pomôže a povie vám, koľko dní uplynulo medzi dvoma dané dátumy A. Navyše, ak máte potrebu, viete si vypočítať, koľko kalendárnych, voľných či pracovných dní (hodín) obsahuje zadané obdobie roka či niekoľkých rokov.

Koľko dní medzi dátumami? Inštrukcia

Jednoducho nastavíte konkrétny deň začiatku a konca a dostanete výpočet za zlomok sekundy. Online kalkulačka vypočíta všetky údaje nezávisle. Ak zmeníte pôvodné dni v týždni, výsledok sa automaticky prepočíta, aby sa zohľadnil priestupný rok.

Dôležité: nemôžete vziať mesačné pracovné dni/hodiny z výpočtov za predchádzajúce roky a poskytnúť ich ako výpočty – údaje sa budú líšiť. Preto je lepšie použiť kalkulačku.

Postup je teda:

  1. V poliach „Dátum začiatku“ a „Dátum ukončenia“ vyberte počiatočný a koncový deň odpočítavania, počnúc rokom 2013 a končiacim v budúcnosti 2018.
  2. V ďalšom poli nastavte počet pracovných hodín za deň. Štandardne je toto pole už nastavené na 8 hodín (40-hodinový pracovný týždeň), ale toto číslo môžete zmeniť.
  3. V pravej časti obrazovky na banneri uvidíte výsledok: pracovné dni, kalendárne dni a pracovné hodiny medzi danými dátumami. Výsledky musia byť skopírované a uložené vo vašom dokumente.

Na čo všetko môžete použiť kalkulačku?

  1. Na výpočet pokút a omeškaní podľa zmlúv
  2. Ako porozumieť efektívnosti využívania zdroja a termínom jeho použitia
  3. Ako si náhodou nenaplánovať úlohu na víkend
  4. Koľko času zostáva do uzávierky

Príklad:

Ste účtovník. Manažér vás požiadal o poskytnutie údajov o počte pracovných hodín, ktoré by mali odpracovať všetci zamestnanci spoločnosti vo februári v najbližších minútach. Počet zamestnancov určíte jednoducho – čísla máte pred očami. Ale s počtom hodín treba rátať....A koľko dní je vo februári? A čo priestupný rok? Ktoré dni boli voľné? A ako určiť počet dní dovolenky?

Riešenie: stačí použiť náš widget. Všetky informácie dostanete automaticky, nepotrebujete stolné kalendáre a kalkulačky.

Páčila sa vám táto kalkulačka? Potom vyskúšajte naše ďalšie funkcie

Chcete viesť účtovníctvo, posielať výkazy a robiť výpočty v pohodlnej a jednoduchej webovej službe? Vyskúšajte Kontur.Accounting na 14 dní zadarmo! Rýchlo vás naučíme používať službu a odpovieme na všetky vaše otázky!

Poznámka: tento príspevok je prekladom článku cmcenroe.me/2014/12/05/days-in-month-formula.html ( Časť I), ako aj autorský dodatok k nemu ( Časť II). Materiál by ste nemali brať vážne, ale skôr ako rozcvičku pre myseľ, ktorá nevyžaduje nič iné ako školské znalosti aritmetiky a nemá praktické využitie. Príjemné čítanie všetkým!

Časť I

Úvod

Nedávno, po ďalšej bezsennej noci, som premýšľal nad metódami, ako si zapamätať počet dní v jednotlivých mesiacoch v roku. Je na to počítadlo, aj spôsob, ako počítať s klbkami, ale ani jedno, ani druhé mi nevyhovovalo. Rozmýšľal som, či existuje nejaký matematický vzorec na vyriešenie takéhoto problému, a – nenašiel som ho pri zbežnom štúdiu – vyzval som sa, aby som ho vytvoril.

Formalizácia Inými slovami, je potrebné nájsť funkciu f, a to tak, že hodnota f(x) za každý mesiac X, reprezentované číslom od 1 do 12, sa rovná počtu dní v danom mesiaci. Tabuľka hodnôt argumentov a funkcií:

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

Ak ste boli v pokušení vyskúšať si to sami pred čítaním môjho riešenia, teraz je ten správny čas. Ak chcete okamžite vidieť hotovú odpoveď, pozrite sa pod spojler.

Odpoveď


Nasledujú moje kroky na nájdenie riešenia.

Matematický aparát

Najprv si v krátkosti osviežme pamäť dvoch dôležitých operátorov pri riešení tohto problému: celočíselného delenia a zvyšku delenia.

Celočíselné delenie je operátor používaný v mnohých programovacích jazykoch pri delení dvoch celých čísel a vyraďovaní z kvocientu zlomková časť. Vykreslím to ako . Napríklad:

Zvyšok divízie je operátor, ktorý nájde zvyšok delenia. Mnoho programovacích jazykov používa tento symbol % , ale použijem konštrukcie formulára , napríklad:

Podotýkam, že zvyšok divízie má rovnakú prioritu ako divízia.

Základy

Na získanie základného vzorca teda použijeme náš matematický aparát. Bežný mesiac má 30 alebo 31 dní, takže môžeme použiť 1 alebo 0, aby sme dostali striedavo, a potom k tomuto číslu stačí pridať konštantu:

Dostaneme tabuľku, správne hodnoty sú zvýraznené tučným písmom:
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

Nie je to zlý začiatok! Už existujú správne hodnoty pre január a mesiace marec až júl vrátane. Február je špeciálny prípad a budeme sa mu venovať o niečo neskôr. Po júli by sa v zostávajúcich mesiacoch malo poradie získania 0 a 1 obrátiť.
Aby sme to dosiahli, môžeme k dividende pridať 1:

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

Teraz sú správne hodnoty od augusta do decembra, ale ako sa očakávalo, hodnoty pre ostatné mesiace sú nesprávne. Pozrime sa, ako môžeme tieto vzorce kombinovať.

Aplikácia masky

To si vyžaduje po častiach funkciu, ale – keďže sa mi to zdalo nudné – premýšľal som o inom spôsobe riešenia, použiť jednu časť funkcie na jeden interval a druhú na druhý.
Myslím, že najjednoduchší spôsob je nájsť výraz, ktorý je 1 v jednej aplikácii a 0 v ostatných. Metódu, pri ktorej vynásobením argumentu výrazom vylúčime zo vzorca mimo jeho rozsah, som nazval „maskovanie“, pretože toto správanie je podobné akousi bitovou maskou.
Ak chcete použiť túto metódu, v poslednej časti našej funkcie musíme nájsť výraz rovnajúci sa 1 s , a keďže hodnoty argumentov sú vždy menšie ako 16 – je na to v poriadku celočíselné delenie 8.
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

Teraz pomocou tejto masky, pomocou výrazu namiesto 1 v dividende, môžeme obrátiť poradie, v ktorom sú 0 a 1 získané vo vzorci:

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! Všetko je v poriadku, okrem februára. Prekvapivé prekvapenie.

februára

Každý mesiac má 30 alebo 31 dní, okrem februára s 28 dňami (priestupný rok je mimo rozsahu tejto úlohy). V súčasnosti má podľa nášho vzorca 30 dní, takže výraz rovný 2 by bolo fajn odčítať pomocou .
Najlepšie, čo som vymyslel, je tento, ktorý maskuje všetky mesiace po februári:
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

Zmenou základnej konštanty na 28 s pridaním 2 k zvyšku mesiacov dostaneme vzorec:

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

Bohužiaľ, január je teraz kratší o 2 dni. Ale našťastie je veľmi jednoduché získať výraz, ktorý platí len pre prvý mesiac: je to prevrátená hodnota čísla zaokrúhlená nadol. Vynásobením číslom 2 dostaneme konečný vzorec:

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

Doslov

Tu je - vzorec na získanie počtu dní v ktoromkoľvek mesiaci v roku pomocou najjednoduchšej aritmetiky. Keď si nabudúce spomeniete, koľko dní má september, urobte to pomocou tohto jednoduchého kódu JavaScript:

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

Časť II

Úvod

V prvej časti bol získaný krátky a dokonca mierne elegantný vzorec, ktorého hlavnými výhodami sú jednoduchosť matematického aparátu, absencia vetvenia a podmienených výrazov a stručnosť. Medzi nevýhody - okrem toho, že ho nevyužijete vo svojom projekte - patrí chýbajúca kontrola prestupných a neprestupných rokov.
Dal som si teda za úlohu vytvoriť funkciu f, a to tak, že hodnota f(x, y) za každý mesiac X, reprezentovaný číslom od 1 do 12 a rokom r väčšie ako 0 sa rovná počtu dní v mesiaci X za rok r.
Pre netrpezlivých je pod spojlerom hotová odpoveď, no pre ostatných ma prosím sledujte.

Odpoveď

Zvyšok divízie: mod A ⌊⌋

Pre názornosť sa dohodneme, že v niektorých vzorcoch je operátor delenia so zvyškom nahradený dolnými zátvorkami, kde sa mi to zdalo potrebné:

Priestupný rok

V priestupnom roku sa zavádza ďalší deň: 29. február. Ako viete, priestupný rok je rok, ktorý je násobkom 4 a nie násobkom 100, alebo násobkom 400. Napíšme výraz zhodný s týmto tvrdením:

Na prevod tohto výrazu na algebraický je potrebné použiť injekciu tvaru na výsledok výrazu:

Čo vám umožní získať 1 pri delení bezo zvyšku a 0 pri delení so zvyškom, aby ste to mohli použiť vo vzorci na určenie počtu dní v mesiaci.

Ako funkciu g" môžete použiť 1 mínus zvyšok na:

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

Je ľahké vidieť, že zvýšením dividendy a deliteľa o 1 dostaneme správny vzorec pre:
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

Výraz teda zapíšeme ako:


Napíšme výraz ako:

Aplikovaním tohto prístupu dostaneme ďalšia funkcia g(y), čo bude 1, ak je rok priestupný, alebo 0 v opačnom prípade:

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

Prestupné roky sú zvýraznené tučným písmom.

Pripomínam, že v rámci prijatej zmluvy môže byť prevádzkovateľ na získanie zvyšku z divízie označený ako mod a ⌊⌋.

Aplikácia masky

Vo vzorci je časť úpravou, ktorá pridáva 2 dni k januáru. Ak odstránime faktor 2 a zmeníme čitateľa z 1 na 2, potom tento vzorec pridá 2 dni k januáru a 1 deň k februáru, čo nám dáva kľúč na pridanie dňa v priestupnom roku. Pre prehľadnosť používame vo vzorci medzihodnotu g(y) a ako r pomocou rokov 2000 (priestupný rok) a 2001 (nepriestupný rok):

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

Hodnoty pre všetky mesiace okrem januára neprestupného roka sú správne.

Aby ste napravili toto nešťastné nedorozumenie, pridajte 1 deň k januáru podľa nám už známeho vzorca:


alebo:

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

Záver

V dôsledku toho sa získal oveľa ťažkopádnejší, ale univerzálnejší vzorec, ktorý možno použiť aj na získanie počtu dní v mesiaci v určitom roku:

Funkcia f(x, y) ( návrat 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); )
C# príklad ideone.com/fANutz .

1 . Neviem, ako používať takú mnemotechnickú pomôcku, a tak som na internete spozoroval nápis.
2 . „Základy“ alebo „Pravidlo s mnohými výnimkami“, ako väčšina pravidiel.
3 . Spočiatku bol február v rímskom kalendári posledným mesiacom v roku, takže je logické, že je kratší ako všetky ostatné. Logiku má aj pridávanie alebo uberanie dňa presne na konci roka, takže jeho dĺžka je variabilná.

Upd. 1:
Alternatívny preklad prvej časti v

Kalkulačka dátumu je určená na výpočet počtu dní medzi dátumami, ako aj na nájdenie dátumu pripočítaním alebo odčítaním určitého počtu dní k známemu dátumu.

Pridajte dni k dátumu

Ak chcete zistiť, aký dátum bude o určitý počet dní, použite túto možnosť. Zadajte dátum začiatku a počet dní, ktoré sa majú pridať. Na odčítanie použite mínusovú hodnotu. Kalkulačka má tiež možnosť pridať iba pracovné dni.

Výpočet počtu dní medzi dátumami

Táto metóda výpočtu odpovie na otázku „koľko dní uplynulo od dátumu“. Zadajte počiatočný a koncový dátum a kliknite na tlačidlo „vypočítať“. Kalkulačka ukáže, koľko dní je medzi zadanými dátumami. Samostatne kalkulačka zobrazí počet pracovných dní.

Pomocou tejto možnosti môžete vypočítať, koľko dní zostáva do určitej udalosti, ako sú narodeniny alebo sviatok. Ak to chcete urobiť, zadajte dnešný dátum do poľa dátumu začiatku a dátum udalosti do poľa dátumu ukončenia.

Prázdniny

Kalkulačka dokáže počítať, sčítať a odčítať kalendárne aj pracovné dni. Oficiálne nepracovné sviatky sú:

  • Január 1,2,3,4,5,6,8 - Novoročné sviatky
  • 7. január – pravoslávne Vianoce
  • 23. február - Deň obrancov vlasti
  • 8. marec - Medzinárodný deň žien
  • 1. máj – jar a sviatok práce
  • 9. máj - Deň víťazstva
  • 12. jún - Deň Ruska
  • 4. november – Deň národnej jednoty

Ak štátny sviatok pripadne na sobotu alebo nedeľu, presúva sa na nasledujúci pracovný deň. Niekedy sa ale víkend v kalendári presunie na úplne iné miesto. Napríklad soboty a nedele, ktoré pripadajú na novoročné sviatky, sa môžu presunúť na máj, aby sa predĺžili májové sviatky.

Pri výpočte dní kalkulačka zohľadňuje oficiálne sviatky aj všetky prevody.

Nedávno, po dlhom čase strávenom bez spánku, som premýšľal o tom, ako môžete zistiť počet dní v mesiaci, keď poznáte jeho počet. Na túto tému sú riekanky, existuje spôsob počítania po kostiach, ale tieto metódy mi nevyhovujú - vrhla som sa do hľadania matematického vzorca, ktorý som po chvíli vydedukovala.

Takže úloha

Formálne Inými slovami, potrebujeme získať funkciu f (x), ktorá by poskytla nasledujúci zoznam hodnôt (ktoré som mimochodom našiel niekde na internete a neodvodil som ich pomocou mnemotechnických pravidiel):

Treba si uvedomiť, že ako argument dostávame len číslo mesiaca, t.j. neberieme do úvahy priestupné roky, a f(2) = 28.

Ak chcete vedieť výsledok, ktorý som dostal, prejdite na koniec tejto stránky. Čo bude opísané nižšie, je odvodenie požadovaného vzorca.

Čo použijeme

Okrem sčítania, odčítania a násobenia použijem dve operácie: celočíselné delenie a operáciu zobratia zvyšku. Dovoľte mi pripomenúť, čo to je:

  • Celočíselné delenie, alebo „delenie zaokrúhliť nadol“. Pre mňa to bude reprezentované ako normálne delenie: a / b - čo znamená ⌊a / b⌋ . Napríklad 5/3 = 1 .
  • Prijatie zvyšku modulo. Tradične budem označovať delenie so zvyškom: a % b \u003d a - (a / b) * b. Napríklad 5 % 3 = 2 .

Majú rovnakú prednosť a sú ponechané asociatívne.

Základy alebo pravidlo s mnohými výnimkami

Pokúsme sa nájsť vzor, ​​ktorý by vyhovoval čo najväčšiemu počtu hodnôt argumentu. Zvyčajne počet dní v mesiaci kolíše medzi 30 a 31. Zároveň si môžete všimnúť závislosť tohto čísla od párnosti mesiaca - čo znamená, že použijeme operáciu odoberania zvyšku modulo 2. Zdá sa ze by to malo byt nieco taketo:

f1(x) = 30 + x%2


Dobrý začiatok! Ak si odmyslíme február, ktorý sa bude musieť evidentne oklamať, budeme radi, že sa nám podarilo upraviť funkciu na prvý polrok. A potom od augusta treba zmeniť paritu na opačnú. To sa dá dosiahnuť výmenou x%2 v prvej verzii vzorca (x+1)%2:

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


Prvý polrok je už podľa očakávania mimo rozsah správnych hodnôt, no mesiace od augusta do decembra dali to, čo sme potrebovali. Poďme nájsť spôsob, ako tieto dve časti spojiť.

Maska

Potrebujeme, aby sa +1 v dividende „aktivovalo“ iba vtedy, keď argument dosiahne hodnoty vyššie ako 8, t.j. musíme použiť nejakú masku. Hodnoty argumentu zároveň nemôžu presiahnuť 12. Celočíselné delenie argumentu číslom 8 je teda pre nás ideálne:


Presne tak, ako potrebujeme. Využime tento výstup:

f3(x) = 30 + (x + x / 8) % 2


Wow! Všetko je v poriadku, okrem februára. Aké nečakané.

februára

Všetky mesiace majú 30 alebo 31 dní, ale február má 28 (dovoľte mi pripomenúť, že neuvažujeme o priestupných rokoch).

Historický odkaz: v rímskom kalendári bol február posledným mesiacom v roku – súhlasíte s tým, že pridanie jedného dňa v priestupnom roku na koniec kalendára je intuitívnejšie. My však používame gregoriánsky kalendár, v ktorom sa najkratší mesiac posúva bližšie k začiatku na príkaz jedného z múdrych panovníkov.

V Najnovšia verzia náš vzorec na február dostal až 30 dní. A tak si od neho musíme odrezať pár dní. Prirodzene, budú tým trpieť aj niektoré ďalšie mesiace: buď naľavo od februára, alebo napravo od neho v našom zozname - napravo je však oveľa menej mesiacov, takže budeme musieť obetovať január a potom upraviť vzorec na to. Pomocou výrazu môžete odrezať dni prvého a druhého mesiaca 2 % x.