Casa / Padroneggiare il PC / Determinazione del numero di giorni in un mese in Microsoft Excel. Come calcolare il numero di giorni al suo interno con una formula matematica per il numero del mese? Per 13 giorni di calendario

Determinazione del numero di giorni in un mese in Microsoft Excel. Come calcolare il numero di giorni al suo interno con una formula matematica per il numero del mese? Per 13 giorni di calendario

Per risolvere alcuni problemi durante la creazione di una tabella, è necessario specificare il numero di giorni in un mese in una cella separata o all'interno della formula in modo che il programma spenda calcoli necessari. Excel dispone di strumenti per eseguire questa operazione. consideriamo vari modi applicazione di questa possibilità.

È possibile calcolare il numero di giorni in un mese in Excel utilizzando operatori di categorie speciali "Data e ora". Per scoprire quale opzione è meglio applicare, devi prima stabilire gli obiettivi dell'operazione. A seconda di ciò, il risultato del calcolo può essere visualizzato in un elemento separato del foglio, oppure può essere utilizzato all'interno di un'altra formula.

Metodo 1: combinazione degli operatori GIORNO ed EOMESE

Più in modo semplice per risolvere questo problema è una combinazione di operatori GIORNO e EOMESE.

Funzione GIORNO appartiene al gruppo degli operatori "Data e ora". Indica un numero specifico 1 prima 31 . Nel nostro caso, il compito dato operatore indicherà l'ultimo giorno del mese usando la funzione incorporata come argomento EOMESE.

Sintassi dell'operatore GIORNO prossimo:

GIORNO(data_in_numero_formato)

Cioè, l'unico argomento per questa funzione è "Data in formato numerico". Sarà impostato dall'operatore EOMESE. Va detto che la data in formato numerico differisce dal formato abituale. Ad esempio, data 04.05.2017 in forma numerica sarà simile 42859 . Pertanto, Excel utilizza questo formato solo per le operazioni interne. È usato raramente per la visualizzazione nelle celle.

Operatore EOMESE ha lo scopo di indicare il numero ordinale dell'ultimo giorno del mese, che è un determinato numero di mesi avanti o indietro rispetto alla data specificata. La sintassi della funzione è:

EOMONTH(data_inizio, numero_di_mesi)

Operatore "data d'inizio" contiene la data da cui viene effettuato il conto alla rovescia o un riferimento alla cella in cui si trova.

Operatore "Numero di mesi" indica il numero di mesi da contare a partire dalla data indicata.

Ora vediamo come funziona con un esempio specifico. Per questo prendiamo foglio Excel, in una delle celle in cui è inserito un determinato numero di calendario. È necessario, utilizzando l'insieme di operatori sopra indicato, determinare quanti giorni sono presenti nel periodo mensile a cui si riferisce tale numero.


La nostra formula generale assume la seguente forma:

GIORNO(EOMESE(B3,0))

In questa formula, solo l'indirizzo della cella è un valore variabile ( B3). Pertanto, se non si desidera eseguire la procedura tramite Maghi delle funzioni, puoi inserire questa formula a qualsiasi elemento del foglio, semplicemente sostituendo l'indirizzo della cella contenente il numero con quello rilevante nel tuo caso particolare. Il risultato sarà simile.

Metodo 2: rilevamento automatico del numero di giorni

Ora diamo un'occhiata a un altro problema. È necessario che il numero di giorni venga visualizzato non in base a un determinato numero di calendario, ma in base a quello corrente. Inoltre, il cambio dei periodi sarebbe effettuato automaticamente senza l'intervento dell'utente. Anche se sembra strano, ma compito assegnato più leggero del precedente. Per risolverlo, anche aprire Procedura guidata di funzione non è necessario, poiché la formula che esegue questa operazione, non contiene valori di variabili o riferimenti di cella. Puoi semplicemente digitare nella cella del foglio in cui desideri visualizzare il risultato, la seguente formula senza modifiche:

GIORNO(EOMESE(OGGI();0))

La funzione incorporata OGGI che abbiamo usato in questo caso mostra il numero di oggi e non accetta argomenti. Pertanto, la tua cella visualizzerà sempre il numero di giorni nel mese corrente.

Metodo 3: calcola il numero di giorni da utilizzare in formule complesse

Negli esempi precedenti, abbiamo mostrato come calcolare il numero di giorni in un mese in base al numero di calendario specificato o automaticamente in base al mese corrente e visualizzare il risultato in una cella separata. Ma trovare questo valore potrebbe essere necessario per calcolare altri indicatori. In questo caso il calcolo del numero di giorni verrà effettuato all'interno di una formula complessa e non verrà visualizzato in una cella separata. Vediamo come farlo con un esempio.

Dobbiamo assicurarci che la cella visualizzi il numero di giorni rimanenti fino alla fine del mese corrente. Come in metodo precedente, questa opzione non richiede l'apertura Maghi delle funzioni. Puoi semplicemente digitare la seguente espressione in una cella:

GIORNO(EOMESE(OGGI();0))-GIORNO(OGGI())

Successivamente, la cella specificata visualizzerà il numero di giorni fino alla fine del mese. Ogni giorno il risultato verrà aggiornato automaticamente e dall'inizio del nuovo periodo ripartirà il conto alla rovescia. Si scopre una specie di conto alla rovescia.

Come puoi vedere, questa formula è composta da due parti. Il primo di questi è l'espressione già familiare per calcolare il numero di giorni in un mese:

GIORNO(EOMESE(OGGI();0))

Ma nella seconda parte, il numero di oggi viene sottratto da questo indicatore:

GIORNO PER GIORNO())

Pertanto, quando si esegue questo calcolo, la formula per calcolare il numero di giorni è parte integrante di una formula più complessa.

Metodo 4: formula alternativa

Ma, sfortunatamente, le versioni del programma precedenti a Excel 2007 non hanno l'operatore EOMESE. Che dire di quegli utenti che utilizzano versioni precedenti dell'applicazione? Per loro, questa possibilità esiste attraverso un'altra formula, che è più massiccia di quella sopra descritta. Vediamo come calcolare il numero di giorni in un mese da un determinato numero di calendario utilizzando questa opzione.

  1. Seleziona la cella per visualizzare il risultato e vai alla finestra degli argomenti dell'operatore GIORNO già a noi familiare. Posizioniamo il cursore nell'unico campo di questa finestra e clicchiamo sul triangolo capovolto a sinistra della barra della formula. Vai alla sezione "Più funzioni...".
  2. Nella finestra Maghi delle funzioni in un gruppo "Data e ora" evidenziare il nome "L'APPUNTAMENTO" e fare clic sul pulsante OK.
  3. Viene avviata la finestra operatore L'APPUNTAMENTO. Questa funzione converte la data dal formato normale in un valore numerico, che l'operatore dovrà poi elaborare GIORNO.

    La finestra che si apre ha tre campi. In campo "Giorno" puoi inserire un numero "uno". Questa sarà la stessa azione per qualsiasi situazione. Ma gli altri due campi dovranno essere trattati a fondo.

    Posizionare il cursore nel campo "Anno". Successivamente, passiamo alla scelta degli operatori attraverso il triangolo familiare.

  4. Tutti nella stessa categoria Maghi delle funzioni evidenziare il nome "ANNO" e fare clic sul pulsante OK.
  5. Viene visualizzata la finestra Argomenti dell'operatore ANNO. Determina l'anno dal numero specificato. Nell'unico campo della finestra "Data in formato numerico" specificare un riferimento a una cella contenente la data originale per la quale si desidera determinare il numero di giorni. Dopodiché, non affrettarti a fare clic sul pulsante OK e clicca sul nome "L'APPUNTAMENTO" nella barra della formula.
  6. Quindi torniamo di nuovo alla finestra degli argomenti L'APPUNTAMENTO. Posizionare il cursore nel campo "Mese" e procedere alla selezione delle funzioni.
  7. A Procedura guidata di funzione clicca sul nome "MESE" e fare clic sul pulsante OK.
  8. Viene avviata la finestra degli argomenti della funzione MESE. I suoi compiti sono simili all'operatore precedente, solo che mostra il valore del numero del mese. Nell'unico campo di questa finestra, impostiamo lo stesso riferimento al numero originale. Quindi nella barra della formula, fai clic sul nome "GIORNO".
  9. Torna alla finestra degli argomenti GIORNO. Qui dobbiamo fare solo un piccolo tocco. Nell'unico campo della finestra in cui si trovano già i dati, aggiungi l'espressione alla fine della formula "-uno" senza virgolette e metti anche "+1" dopo l'operatore MESE. Successivamente, fai clic sul pulsante OK.
  10. Come puoi vedere, la cella preselezionata mostra il numero di giorni del mese a cui appartiene il numero specificato. La formula generale si presenta così:

    GIORNO(DATA(ANNO(G3),MESE(G3)+1,1)-1)

Il segreto di questa formula è semplice. Lo usiamo per determinare la data del primo giorno del periodo successivo, quindi sottraiamo un giorno da esso, ottenendo il numero di giorni nel mese specificato. La variabile in questa formula è un riferimento di cella D3 in due posti. Se lo sostituisci con l'indirizzo della cella in cui si trova la data nel tuo caso particolare, puoi semplicemente inserire questa espressione in qualsiasi elemento del foglio senza aiuto Maghi delle funzioni.

Come puoi vedere, ci sono diverse opzioni per scoprire il numero di giorni in un mese in Excel. Quale utilizzare dipende dall'obiettivo finale dell'utente, nonché da quale versione del programma utilizza.

Il calcolatore online gratuito Kontur.Accounting ti aiuterà e ti dirà quanti giorni sono trascorsi tra due date date e. Inoltre, se hai una necessità, puoi calcolare quanti giorni di calendario, giorni di riposo o giorni lavorativi (ore) contiene il periodo specificato di un anno o più anni.

Quanti giorni tra le date? Istruzione

Devi semplicemente impostare un giorno di inizio e di fine specifico e ottenere un calcolo in una frazione di secondo. Il calcolatore online calcola tutti i dati in modo indipendente. Se si modificano i giorni della settimana originali, il risultato viene ricalcolato automaticamente per tenere conto dell'anno bisestile.

Importante: non puoi prendere giorni/ore lavorative mensili dai calcoli degli anni precedenti e fornirli come calcoli - i dati varieranno. Pertanto, è meglio usare una calcolatrice.

Quindi, la procedura è:

  1. Nei campi “Data inizio” e “Data fine”, selezionare i giorni di inizio e fine del conto alla rovescia, rispettivamente, a partire dal 2013 e terminando nel futuro 2018.
  2. Impostare il numero di ore lavorative al giorno nel campo successivo. Per impostazione predefinita, questo campo è già impostato su 8 ore (settimana lavorativa di 40 ore), ma è possibile modificare questa cifra.
  3. Sul lato destro dello schermo sul banner vedrai il risultato: giorni lavorativi, giorni di calendario e orari di lavoro tra le date indicate. I risultati devono essere copiati e salvati nel documento.

Per cosa puoi usare la calcolatrice?

  1. Per calcolare penali e ritardi contrattuali
  2. Come capire l'efficienza dell'utilizzo di una risorsa e le scadenze per utilizzarla
  3. Come non programmare accidentalmente un'attività in un fine settimana
  4. Quanto tempo manca alla scadenza

Esempio:

Sei un contabile. Il manager le ha chiesto di fornire i dati sul numero di ore lavorative che tutti i dipendenti dell'azienda dovrebbero lavorare a febbraio nei prossimi due minuti. Puoi facilmente determinare il numero di dipendenti: hai i numeri davanti ai tuoi occhi. Ma bisogna contare le ore.... E quanti giorni ci sono a febbraio? Che ne dici di un anno bisestile? Quali giorni erano i giorni di riposo? E come determinare il numero di giorni di ferie?

Soluzione: usa semplicemente il nostro widget. Riceverai tutte le informazioni automaticamente, non hai bisogno di calendari desktop e calcolatrici.

Ti è piaciuta questa calcolatrice? Quindi prova le nostre altre funzionalità

Vuoi tenere la contabilità, inviare report ed effettuare calcoli in un servizio web comodo e semplice? Prova Kontur.Accounting gratis per 14 giorni! Ti insegneremo rapidamente come utilizzare il servizio e risponderemo a tutte le tue domande!

Nota: questo post è una traduzione dell'articolo cmcenroe.me/2014/12/05/days-in-month-formula.html ( Parte I), nonché l'aggiunta dell'autore ad esso ( Seconda parte). Non dovresti prendere il materiale sul serio, ma piuttosto come un riscaldamento per la mente, che richiede nient'altro che una conoscenza scolastica dell'aritmetica e non ha alcuna applicazione pratica. Buona lettura a tutti!

Parte I

introduzione

Recentemente, dopo un'altra notte insonne, stavo pensando a metodi per ricordare il numero di giorni in ogni mese dell'anno. C'è un contatore per questo, così come un modo per contare sulle nocche, ma né l'uno né l'altro mi andavano bene. Mi sono chiesto se esistesse una formula matematica per risolvere un problema del genere e, non trovandola in uno studio superficiale, mi sono sfidato a crearne una.

Formalizzazione In altre parole, è necessario trovare la funzione f, tale che il valore f(x) per ogni mese X, rappresentato da un numero compreso tra 1 e 12, è uguale al numero di giorni in quel mese. Tabella degli argomenti e dei valori delle funzioni:

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

Se eri tentato di provarlo tu stesso prima di leggere la mia soluzione, questo è il momento. Se preferisci vedere immediatamente la risposta finita, guarda sotto lo spoiler.

Risposta


Di seguito sono riportati i miei passaggi per trovare la soluzione.

Apparato matematico

Innanzitutto, aggiorniamo brevemente la nostra memoria di due operatori vitali per risolvere questo problema: la divisione intera e il resto della divisione.

Divisione interaè un operatore utilizzato in molti linguaggi di programmazione per dividere due interi e scartare dal quoziente parte frazionaria. Lo rappresenterò come . Per esempio:

Resto della divisioneè un operatore che trova il resto di una divisione. Molti linguaggi di programmazione usano il simbolo % , ma userò le costruzioni del form , ad esempio:

Prendo atto che il resto della divisione ha la stessa priorità della divisione.

Nozioni di base

Quindi, applichiamo il nostro apparato matematico per ottenere la formula di base. Un mese normale ha 30 o 31 giorni, quindi possiamo usare 1 o 0 per ottenere alternativamente, quindi aggiungere semplicemente una costante a quel numero:

Otteniamo una tabella, i valori corretti sono evidenziati in grassetto:
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

Non male come inizio! Esistono già valori corretti per gennaio e per i mesi da marzo a luglio compresi. Febbraio è un caso speciale e lo affronteremo un po' più tardi. Dopo luglio, per i restanti mesi, l'ordine per ottenere 0 e 1 dovrebbe essere invertito.
Per fare ciò, possiamo aggiungere 1 al dividendo:

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

Adesso i valori corretti sono da agosto a dicembre, ma come previsto i valori per gli altri mesi non sono corretti. Vediamo come combinare queste formule.

Applicare una maschera

Ciò richiede una funzione a tratti, ma - poiché mi sembrava noiosa - ho pensato a un altro modo per risolverlo, utilizzando una parte della funzione su un intervallo, l'altra sull'altro.
Penso che il modo più semplice sia trovare un'espressione che sia 1 in un'applicazione e 0 nel resto. Il metodo in cui, moltiplicando un argomento per un'espressione, lo escludiamo dalla formula al di fuori del suo ambito, l'ho chiamato "mascheramento", perché questo comportamento è simile a una specie di maschera di bit.
Per utilizzare questo metodo, nell'ultima parte della nostra funzione, dobbiamo trovare un'espressione uguale a 1 con , e - poiché i valori dell'argomento sono sempre inferiori a 16 - la divisione intera per 8 va bene per questo.
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

Ora con l'aiuto di questa maschera, usando un'espressione al posto di 1 nel dividendo, possiamo invertire l'ordine in cui si ottengono 0 e 1 nella formula:

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! Tutto è corretto, tranne febbraio. Sorpresa sorpresa.

febbraio

Ogni mese ha 30 o 31 giorni, eccetto febbraio con i suoi 28 (l'anno bisestile non rientra nell'ambito di questa attività). Al momento, secondo la nostra formula, ha 30 giorni, quindi sarebbe bello sottrarre l'espressione uguale a 2 con .
Il meglio che ho inventato è questo, che maschera tutti i mesi dopo febbraio:
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

Modificando la costante di base a 28 con l'aggiunta di 2 al resto dei mesi, otteniamo la formula:

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

Sfortunatamente, gennaio è ora più breve di 2 giorni. Ma fortunatamente è molto facile ottenere un'espressione che vale solo per il primo mese: è il reciproco del numero arrotondato per difetto. Moltiplicandolo per 2 otteniamo la formula finale:

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

Epilogo

Eccola: una formula per ottenere il numero di giorni in qualsiasi mese dell'anno, usando l'aritmetica più semplice. La prossima volta che ti ricordi quanti giorni ci sono a settembre, fallo con questa riga JavaScript:

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

Seconda parte

introduzione

Nella prima parte è stata ottenuta una formula breve e anche leggermente elegante, i cui principali vantaggi sono la semplicità dell'apparato matematico, l'assenza di espressioni ramificate e condizionali e la concisione. Gli svantaggi - oltre al fatto che non lo utilizzerai nel tuo progetto - includono la mancanza di controllo per gli anni bisestili e non bisestili.
Quindi mi sono dato il compito di creare una funzione f, tale che il valore f(x, y) per ogni mese X, rappresentato da un numero da 1 a 12 e un anno y maggiore di 0 corrisponde al numero di giorni del mese X per anno y.
Per coloro che sono impazienti, c'è una risposta già pronta sotto lo spoiler, ma per il resto, vi prego di seguirmi.

Risposta

Resto della divisione: mod e ⌊⌋

Per chiarezza visiva, concorderemo sul fatto che in alcune formule l'operatore di divisione con resto è sostituito da parentesi inferiori, dove mi è sembrato necessario:

Anno bisestile

In un anno bisestile viene introdotto un giorno in più: il 29 febbraio. Come sapete, un anno bisestile è un anno multiplo di 4 e non multiplo di 100 o multiplo di 400. Scriviamo un'espressione identica a questa affermazione:

Per convertire questa espressione in una algebrica, è necessario applicare un'iniezione della forma al risultato dell'espressione:

Che ti permetterà di ottenere 1 quando dividi senza resto e 0 quando dividi con resto, per usarlo nella formula per determinare il numero di giorni in un mese.

Come una funzione g" puoi usare 1 meno il resto per:

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

È facile vedere che aumentando il dividendo e il divisore di 1, otteniamo la formula corretta per:
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

Quindi, scriviamo l'espressione come:


Scriviamo l'espressione come:

Applicando questo approccio, otteniamo funzione successiva g(y), che sarà 1 se l'anno è bisestile o 0 in caso contrario:

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

Gli anni bisestili sono evidenziati in grassetto.

Ricordo che nell'ambito dell'accordo accettato, l'operatore per l'ottenimento del residuo dalla divisione può essere rappresentato come mod, e ⌊⌋.

Applicare una maschera

Nella formula, la parte è un aggiustamento che aggiunge 2 giorni a gennaio. Se rimuoviamo il fattore 2 e cambiamo il numeratore da 1 a 2, questa formula aggiungerà 2 giorni a gennaio e 1 giorno a febbraio, il che ci fornisce la chiave per aggiungere un giorno in un anno bisestile. Per chiarezza, utilizziamo un valore intermedio nella formula g(y) e come y utilizzando 2000 (anno bisestile) e 2001 (anno non bisestile):

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

I valori per tutti i mesi tranne gennaio di un anno non bisestile sono corretti.

Per correggere questo sfortunato malinteso, aggiungi 1 giorno a gennaio con la formula a noi già nota:


O:

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

Conclusione

Di conseguenza si è ottenuta una formula molto più macchinosa, ma più universale, che può essere utilizzata anche per ottenere il numero di giorni in un mese di un certo anno:

Funzione 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); )
Esempio C# ideone.com/fANutz .

1 . Non so come usare un tale mnemonico, quindi ho spiato un segno su Internet.
2 . "Nozioni di base" o "Regola con molte eccezioni", come la maggior parte delle regole.
3 . Inizialmente, nel calendario romano, febbraio era l'ultimo mese dell'anno, quindi è logico che sia più breve di tutti gli altri. C'è anche una logica nell'aggiungere o rimuovere un giorno esattamente alla fine dell'anno, quindi la sua lunghezza è variabile.

Agg. uno:
Traduzione alternativa della prima parte in

Il calcolatore della data è progettato per calcolare il numero di giorni tra le date, nonché per trovare una data aggiungendo o sottraendo un certo numero di giorni a una data nota.

Aggiungi giorni a una data

Per scoprire quale data sarà tra un certo numero di giorni, utilizzare questa opzione. Immettere la data di inizio e il numero di giorni da aggiungere. Per sottrarre, utilizzare il valore meno. Il calcolatore ha anche un'opzione per aggiungere solo giorni lavorativi.

Calcolo del numero di giorni tra le date

Questo metodo di calcolo risponderà alla domanda "quanti giorni sono trascorsi dalla data". Immettere la data di inizio e la data di fine e fare clic sul pulsante "calcola". La calcolatrice mostrerà quanti giorni tra le date inserite. Separatamente, la calcolatrice mostrerà il numero di giorni lavorativi.

Con questa opzione puoi calcolare quanti giorni mancano a un determinato evento, come un compleanno o una vacanza. Per fare ciò, inserisci la data odierna nel campo della data di inizio e la data dell'evento nel campo della data di fine.

Vacanze

La calcolatrice può calcolare, sommare e sottrarre sia i giorni di calendario che i giorni lavorativi. I giorni festivi non lavorativi ufficiali sono:

  • 1,2,3,4,5,6,8 gennaio - Vacanze di Capodanno
  • 7 gennaio - Natale ortodosso
  • 23 febbraio - Giornata del Difensore della Patria
  • 8 marzo - Giornata internazionale della donna
  • 1 maggio - Festa della Primavera e del Lavoro
  • 9 maggio - Giorno della Vittoria
  • 12 giugno - Giornata della Russia
  • 4 novembre - Giornata dell'Unità Nazionale

Se un giorno festivo cade di sabato o domenica, viene spostato al giorno lavorativo successivo. Ma a volte il fine settimana viene spostato in un punto completamente diverso del calendario. Ad esempio, i sabati e le domeniche che cadono nelle festività di Capodanno possono essere spostati a maggio per prolungare le festività di maggio.

Nel calcolare i giorni, il calcolatore tiene conto sia delle festività ufficiali che di tutti i trasferimenti.

Recentemente, dopo tanto tempo passato senza dormire, ho pensato a come scoprire il numero di giorni in un mese, conoscendone il numero. Ci sono filastrocche su questo argomento, c'è un modo per contare per ossa, ma questi metodi non mi vanno bene: mi sono immerso nella ricerca di una formula matematica, che ho dedotto dopo un po '.

Quindi il compito

Formalmente In altre parole, dobbiamo ottenere una funzione f (x), che dia il seguente elenco di valori (che, tra l'altro, ho trovato da qualche parte su Internet e non ho dedotto usando regole mnemoniche):

Va notato che riceviamo solo il numero del mese come argomento, ad es. non prendiamo in considerazione gli anni bisestili e f(2) = 28.

Se vuoi sapere il risultato che ho ottenuto, scorri fino in fondo a questa pagina. Ciò che verrà descritto di seguito è la derivazione della formula desiderata.

Cosa useremo

Oltre ad addizione, sottrazione e moltiplicazione, userò due operazioni: la divisione di interi e l'operazione di prendere il resto. Ti ricordo di cosa si tratta:

  • Divisione intera, o "divisione arrotondata per difetto". Per me sarà rappresentato come una normale divisione: a / b - che significa ⌊a / b⌋ . Ad esempio, 5 / 3 = 1 .
  • Prendendo il resto modulo. Tradizionalmente indicherò la divisione con un resto: a % b \u003d a - (a / b) * b. Ad esempio, 5 % 3 = 2 .

Hanno la stessa precedenza e sono associativi di sinistra.

Fondamenti o una regola con molte eccezioni

Proviamo a trovare uno schema che soddisfi quanti più valori possibili dell'argomento. Di solito il numero di giorni in un mese oscilla tra 30 e 31. Allo stesso tempo, puoi notare la dipendenza di questo numero dall'uniformità del mese - il che significa che useremo l'operazione di prendere il resto modulo 2. Sembra che dovrebbe essere qualcosa del tipo:

f₁(x) = 30 + x%2


Buon inizio! Ignorando febbraio, che ovviamente dovrà passare ad alcuni trucchi, saremo lieti di essere riusciti a regolare la funzione per la prima metà dell'anno. E poi, a partire da agosto, la parità va cambiata al contrario. Questo può essere fatto sostituendo x%2 nella prima versione della formula (x+1)%2:

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


Come previsto, la prima metà dell'anno è ormai fuori dal range di valori corretti, ma i mesi da agosto a dicembre hanno dato ciò di cui avevamo bisogno. Troviamo un modo per combinare queste due parti.

Maschera

Abbiamo bisogno del +1 nel dividendo per "attivarsi" solo quando l'argomento raggiunge valori maggiori di 8, cioè dobbiamo applicare una maschera. Allo stesso tempo, i valori dell'argomento non possono superare 12. Quindi, la divisione intera dell'argomento per 8 è l'ideale per noi:


Esattamente come ci serve. Usiamo questo output:

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


Oh! Tutto è corretto, tranne febbraio. Com'è inaspettato.

febbraio

Tutti i mesi hanno 30 o 31 giorni, ma febbraio ne ha 28 (ti ricordo che non consideriamo gli anni bisestili).

Riferimento storico: nel calendario romano, febbraio era l'ultimo mese dell'anno - d'accordo che aggiungere un giorno negli anni bisestili alla fine del calendario è più intuitivo. Tuttavia, utilizziamo il calendario gregoriano, in cui il mese più corto viene spostato più vicino all'inizio per volere di uno dei saggi sovrani.

Nel ultima versione la nostra formula per febbraio ha ottenuto fino a 30 giorni. E quindi dobbiamo staccargli un paio di giorni. Naturalmente, anche alcuni altri mesi ne risentiranno: o a sinistra di febbraio, oa destra di esso nella nostra lista - tuttavia, ci sono molti meno mesi a destra, quindi dovremo sacrificare gennaio, quindi aggiustare il formula per esso. Puoi tagliare i giorni per il primo e il secondo mese usando l'espressione 2% x.