Maison / Maîtriser l'ordinateur / Déterminer le nombre de jours dans un mois dans Microsoft Excel. Comment calculer le nombre de jours avec une formule mathématique par le numéro du mois? Pendant 13 jours calendaires

Déterminer le nombre de jours dans un mois dans Microsoft Excel. Comment calculer le nombre de jours avec une formule mathématique par le numéro du mois? Pendant 13 jours calendaires

Pour résoudre certains problèmes lors de la création d'un tableau, vous devez spécifier le nombre de jours dans un mois dans une cellule séparée ou à l'intérieur de la formule afin que le programme passe calculs nécessaires. Excel dispose d'outils pour effectuer cette opération. considérons différentes manières l'application de cette possibilité.

Vous pouvez calculer le nombre de jours dans un mois dans Excel en utilisant des opérateurs de catégorie spéciale "Date et l'heure". Pour savoir quelle option est la meilleure à appliquer, vous devez d'abord établir les objectifs de l'opération. En fonction de cela, le résultat du calcul peut être affiché dans un élément séparé sur la feuille, ou il peut être utilisé dans une autre formule.

Méthode 1 : combinaison des opérateurs DAY et EOMONTH

La plupart d'une manière simple pour résoudre ce problème est une combinaison d'opérateurs JOUR Et UN MOIS.

Fonction JOUR appartient au groupe des opérateurs "Date et l'heure". Il pointe vers un numéro spécifique 1 avant 31 . Dans notre cas, la tâche opérateur donné indiquera le dernier jour du mois en utilisant la fonction intégrée comme argument UN MOIS.

Syntaxe de l'opérateur JOUR suivant:

JOUR(date_en_nombre_format)

Autrement dit, le seul argument de cette fonction est "Date au format numérique". Il sera défini par l'opérateur UN MOIS. Il faut dire que la date au format numérique diffère du format habituel. Par exemple, date 04.05.2017 sous forme numérique ressemblera à 42859 . Par conséquent, Excel utilise ce format uniquement pour les opérations internes. Il est rarement utilisé pour l'affichage dans les cellules.

Opérateur UN MOIS est destiné à indiquer le nombre ordinal du dernier jour du mois, qui est un nombre donné de mois en avant ou en arrière à partir de la date spécifiée. La syntaxe de la fonction est :

EOMONTH(date_début, nombre_de_mois)

Opérateur "date de début" contient la date à partir de laquelle le compte à rebours est effectué, ou une référence à la cellule où il se trouve.

Opérateur "Nombre de mois" indique le nombre de mois à compter à partir de la date donnée.

Voyons maintenant comment cela fonctionne avec un exemple spécifique. Pour cela nous prenons feuille de calcul Excel, dans l'une des cellules dont un certain numéro de calendrier est saisi. Il faut, à l'aide du jeu d'opérateurs indiqué ci-dessus, déterminer à combien de jours se trouve la période mensuelle à laquelle ce nombre se réfère.


Notre formule générale prend la forme suivante :

JOUR(EOMOIS(B3,0))

Dans cette formule, seule l'adresse de la cellule est une valeur variable ( B3). Ainsi, si vous ne souhaitez pas effectuer la procédure via Assistants de fonction, vous pouvez insérer cette formuleà n'importe quel élément de la feuille, en remplaçant simplement l'adresse de la cellule contenant le numéro par celle qui est pertinente dans votre cas particulier. Le résultat sera similaire.

Méthode 2 : détection automatique du nombre de jours

Abordons maintenant un autre problème. Il faut que le nombre de jours soit affiché non pas selon un numéro de calendrier donné, mais selon celui en cours. De plus, le changement de périodes s'effectuerait automatiquement sans intervention de l'utilisateur. Bien que cela semble étrange, mais tâche donnée plus léger que le précédent. Pour le résoudre, même ouvrir Assistant de fonction n'est pas nécessaire car la formule qui effectue cette opération ne contient pas de valeurs variables ni de références de cellule. Vous pouvez simplement taper dans la cellule de la feuille où vous souhaitez afficher le résultat, la formule suivante sans modifications :

JOUR(EOMOIS(AUJOURD'HUI();0))

La fonction intégrée AUJOURD'HUI que nous avons utilisée dans ce cas affiche le nombre d'aujourd'hui et n'a pas d'arguments. Ainsi, votre cellule affichera toujours le nombre de jours du mois en cours.

Méthode 3 : Calculer le nombre de jours à utiliser dans les formules complexes

Dans les exemples ci-dessus, nous avons montré comment calculer le nombre de jours dans un mois en fonction de la date calendaire spécifiée ou automatiquement en fonction du mois en cours, en affichant le résultat dans une cellule séparée. Mais trouver cette valeur peut être nécessaire pour calculer d'autres indicateurs. Dans ce cas, le calcul du nombre de jours sera effectué à l'intérieur d'une formule complexe et ne sera pas affiché dans une cellule séparée. Voyons comment procéder avec un exemple.

Nous devons nous assurer que la cellule affiche le nombre de jours restants jusqu'à la fin du mois en cours. Un péché méthode précédente, cette option ne nécessite pas d'ouverture Assistants de fonction. Vous pouvez simplement saisir l'expression suivante dans une cellule :

JOUR(EOMONTH(TODAY();0))-DAY(TODAY())

Après cela, la cellule spécifiée affichera le nombre de jours jusqu'à la fin du mois. Chaque jour, le résultat sera automatiquement mis à jour, et dès le début de la nouvelle période, le compte à rebours recommencera. Il s'avère une sorte de compte à rebours.

Comme vous pouvez le voir, cette formule se compose de deux parties. Le premier d'entre eux est l'expression déjà familière pour calculer le nombre de jours dans un mois :

JOUR(EOMOIS(AUJOURD'HUI();0))

Mais dans la deuxième partie, le nombre d'aujourd'hui est soustrait de cet indicateur :

AU JOUR LE JOUR())

Ainsi, lors de ce calcul, la formule de calcul du nombre de jours fait partie intégrante d'une formule plus complexe.

Méthode 4 : formule alternative

Mais, malheureusement, les versions du programme antérieures à Excel 2007 n'ont pas l'opérateur UN MOIS. Qu'en est-il des utilisateurs qui utilisent des versions plus anciennes de l'application ? Pour eux, cette possibilité existe à travers une autre formule, plus massive que celle décrite ci-dessus. Voyons comment calculer le nombre de jours dans un mois à partir d'un numéro de calendrier donné en utilisant cette option.

  1. Sélectionnez la cellule pour afficher le résultat et accédez à la fenêtre des arguments de l'opérateur JOUR nous est déjà familier. Nous plaçons le curseur dans le seul champ de cette fenêtre et cliquons sur le triangle inversé à gauche de la barre de formule. Aller à la rubrique "Plus de fonctionnalités...".
  2. Dans la fenêtre Assistants de fonction en groupe "Date et l'heure" mettre le nom en surbrillance "DATE ​​DE" et cliquez sur le bouton D'ACCORD.
  3. La fenêtre de l'opérateur se lance DATE. Cette fonction convertit la date du format habituel en une valeur numérique, que l'opérateur devra ensuite traiter JOUR.

    La fenêtre qui s'ouvre comporte trois champs. Dans le champ "Jour" vous pouvez entrer un nombre "1". Ce sera la même action pour n'importe quelle situation. Mais les deux autres domaines devront être traités en profondeur.

    Placez le curseur dans le champ "Année". Ensuite, nous passons au choix des opérateurs à travers le triangle familier.

  4. Tous dans la même catégorie Assistants de fonction mettre le nom en surbrillance "ANNÉE" et cliquez sur le bouton D'ACCORD.
  5. La fenêtre Arguments de l'opérateur s'ouvre ANNÉE. Il détermine l'année à partir du nombre spécifié. Dans le seul champ de la fenêtre "Date au format numérique" spécifiez une référence à une cellule contenant la date d'origine pour laquelle vous souhaitez déterminer le nombre de jours. Après cela, ne vous précipitez pas pour cliquer sur le bouton D'ACCORD et cliquez sur le nom "DATE ​​DE" dans la barre de formule.
  6. Ensuite, nous retournons à nouveau à la fenêtre des arguments DATE. Placez le curseur dans le champ "Mois" et procéder à la sélection des fonctions.
  7. DANS Assistant de fonction cliquez sur le nom "MOIS" et cliquez sur le bouton D'ACCORD.
  8. La fenêtre des arguments de la fonction est lancée MOIS. Ses tâches sont similaires à celles de l'opérateur précédent, sauf qu'il affiche la valeur du numéro du mois. Dans le seul champ de cette fenêtre, nous mettons la même référence au numéro d'origine. Puis dans la barre de formule, cliquez sur le nom "JOUR".
  9. Retour à la fenêtre des arguments JOUR. Ici, nous devons faire juste une petite touche. Dans le seul champ de la fenêtre où se trouvent déjà les données, ajouter l'expression à la fin de la formule "-1" sans les guillemets, et mettez également "+1" après l'opérateur MOIS. Après cela, cliquez sur le bouton D'ACCORD.
  10. Comme vous pouvez le voir, la cellule présélectionnée affiche le nombre de jours du mois auquel appartient le nombre spécifié. La formule générale ressemble à ceci :

    JOUR(DATE(ANNEE(J3),MOIS(J3)+1,1)-1)

Le secret de cette formule est simple. Nous l'utilisons pour déterminer la date du premier jour de la période suivante, puis en soustrayons un jour, obtenant le nombre de jours du mois spécifié. La variable dans cette formule est une référence de cellule D3à deux endroits. Si vous le remplacez par l'adresse de la cellule dans laquelle se trouve la date dans votre cas particulier, vous pouvez simplement conduire expression donnéeà n'importe quel élément de la feuille sans aide Assistants de fonction.

Comme vous pouvez le voir, il existe plusieurs options pour connaître le nombre de jours dans un mois dans Excel. Lequel utiliser dépend de l'objectif final de l'utilisateur, ainsi que de la version du programme qu'il utilise.

Le calculateur en ligne gratuit Kontur.Accounting vous aidera et vous dira combien de jours se sont écoulés entre deux dates données Et. De plus, si vous avez un besoin, vous pouvez calculer le nombre de jours calendaires, chômés ou ouvrables (heures) que contient la période spécifiée d'une année ou de plusieurs années.

Combien de jours entre les dates ? Instruction

Vous définissez simplement un jour de début et de fin spécifique et obtenez un calcul en une fraction de seconde. La calculatrice en ligne calcule toutes les données indépendamment. Si vous modifiez les jours de la semaine d'origine, le résultat est automatiquement recalculé pour prendre en compte l'année bissextile.

Important : vous ne pouvez pas prendre les jours/heures de travail mensuels des calculs des années précédentes et les fournir comme calculs - les données varieront. Par conséquent, il est préférable d'utiliser une calculatrice.

Ainsi, la procédure est la suivante :

  1. Dans les champs "Date de début" et "Date de fin", sélectionnez les jours de début et de fin du compte à rebours, respectivement, à partir de 2013 et se terminant dans le futur 2018.
  2. Définissez le nombre d'heures de travail par jour dans le champ suivant. Par défaut, ce champ est déjà défini sur 8 heures (semaine de travail de 40 heures), mais vous pouvez modifier ce chiffre.
  3. Sur le côté droit de l'écran, sur la bannière, vous verrez le résultat : jours ouvrés, jours calendaires et heures de travail entre les dates données. Les résultats doivent être copiés et enregistrés dans votre document.

À quoi pouvez-vous utiliser la calculatrice ?

  1. Pour calculer les pénalités et les retards dans le cadre des contrats
  2. Comment comprendre l'efficacité d'utilisation d'une ressource et les délais d'utilisation
  3. Comment ne pas planifier accidentellement une tâche un week-end
  4. Combien de temps reste-t-il jusqu'à la date limite

Exemple:

Vous êtes comptable. Le responsable vous a demandé de fournir des données sur le nombre d'heures de travail que tous les employés de l'entreprise devraient travailler en février dans les prochaines minutes. Vous pouvez facilement déterminer le nombre d'employés - vous avez des chiffres devant les yeux. Mais il faut compter le nombre d'heures.... Et combien y a-t-il de jours en février ? Et une année bissextile ? Quels jours étaient les jours de repos ? Et comment déterminer le nombre de jours de vacances ?

Solution : utilisez simplement notre widget. Vous recevrez toutes les informations automatiquement, vous n'avez pas besoin de calendriers et de calculatrices de bureau.

Vous avez aimé cette calculatrice ? Alors essayez nos autres fonctionnalités

Voulez-vous tenir une comptabilité, envoyer des rapports et effectuer des calculs dans un service Web pratique et simple ? Essayez Kontur.Accounting gratuitement pendant 14 jours ! Nous vous apprendrons rapidement à utiliser le service et répondrons à toutes vos questions !

Note: ce post est une traduction de l'article cmcenroe.me/2014/12/05/days-in-month-formula.html ( Première partie), ainsi que l'ajout de l'auteur ( Partie II). Vous ne devez pas prendre le matériel au sérieux, mais plutôt comme un échauffement pour l'esprit, ne nécessitant rien de plus qu'une connaissance scolaire de l'arithmétique et n'ayant aucune application pratique. Bonne lecture à tous !

Première partie

Introduction

Récemment, après une autre nuit blanche, je réfléchissais à des méthodes pour me souvenir du nombre de jours de chaque mois de l'année. Il y a un compteur pour cela, ainsi qu'un moyen de compter sur les phalanges, mais ni l'un ni l'autre ne me convenait. Je me suis demandé s'il existait une formule mathématique pour résoudre un tel problème, et - n'en trouvant pas dans une étude sommaire - je me suis lancé le défi d'en créer une.

Formalisation Autrement dit, il faut trouver la fonction F, de sorte que la valeur f(x) pour chaque mois X, représenté par un nombre compris entre 1 et 12, est égal au nombre de jours de ce mois. Tableau des valeurs des arguments et des fonctions :

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

Si vous avez été tenté de l'essayer vous-même avant de lire ma solution, c'est le moment. Si vous préférez voir immédiatement la réponse finale, regardez sous le spoiler.

Répondre


Voici mes étapes pour trouver la solution.

Appareil mathématique

Tout d'abord, rafraîchissons-nous brièvement la mémoire de deux opérateurs essentiels pour résoudre ce problème : la division entière et le reste de la division.

Division entière est un opérateur utilisé dans de nombreux langages de programmation lors de la division de deux nombres entiers et de l'élimination du quotient partie fractionnaire. Je vais le décrire comme. Par exemple:

Reste de la division est un opérateur qui trouve le reste d'une division. De nombreux langages de programmation utilisent le symbole % , mais j'utiliserai des constructions de la forme , par exemple :

Je note que le reste de la division a la même priorité que la division.

Bases

Ainsi, nous appliquons notre appareil mathématique pour obtenir la formule de base. Un mois normal a 30 ou 31 jours, nous pouvons donc utiliser 1 ou 0 pour obtenir alternativement, puis ajouter simplement une constante à ce nombre :

Nous obtenons un tableau, les valeurs correctes sont surlignées en gras :
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

Pas un mauvais début ! Il existe déjà des valeurs correctes pour janvier et pour les mois de mars à juillet inclus. Le mois de février est un cas particulier, et nous en traiterons un peu plus tard. Après juillet, pour les mois restants, l'ordre d'obtention du 0 et du 1 doit être inversé.
Pour ce faire, on peut ajouter 1 au dividende :

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

Maintenant, les valeurs correctes sont d'août à décembre, mais comme prévu, les valeurs des autres mois sont incorrectes. Voyons comment nous pouvons combiner ces formules.

Appliquer un masque

Cela nécessite une fonction par morceaux, mais - comme cela me semblait ennuyeux - j'ai pensé à une autre façon de le résoudre, en utilisant une partie de la fonction sur un intervalle, l'autre sur l'autre.
Je pense que le moyen le plus simple est de trouver une expression qui vaut 1 dans une application et 0 dans le reste. La méthode dans laquelle, en multipliant un argument par une expression, on l'exclut de la formule hors de sa portée, j'ai appelé "masquage", car ce comportement s'apparente à une sorte de masque de bits.
Pour utiliser cette méthode, dans la dernière partie de notre fonction, nous devons trouver une expression égale à 1 avec , et - puisque les valeurs d'argument sont toujours inférieures à 16 - la division entière par 8 convient à cela.
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

Maintenant, à l'aide de ce masque, en utilisant une expression au lieu de 1 dans le dividende, nous pouvons inverser l'ordre dans lequel 0 et 1 sont obtenus dans la formule :

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

Eurêka ! Tout est correct, sauf février. Surprise Surprise.

Février

Tous les mois ont 30 ou 31 jours, sauf février avec ses 28 (les années bissextiles sont hors de portée pour cette tâche). Pour le moment, selon notre formule, il a 30 jours, donc ce serait bien de soustraire l'expression égale à 2 avec .
Le meilleur que j'ai trouvé est celui-ci, qui masque tous les mois après février :
X 1 2 3 4 5 6 7 8 9 10 11 12
2 modules X 0 0 2 2 2 2 2 2 2 2 2 2

En changeant la constante de base à 28 avec l'ajout de 2 au reste des mois, nous obtenons la formule :

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

Malheureusement, janvier est maintenant plus court de 2 jours. Mais heureusement, il est très facile d'obtenir une expression qui ne s'applique qu'au premier mois : c'est l'inverse du nombre arrondi à l'inférieur. En le multipliant par 2, on obtient la formule 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

Épilogue

La voici - une formule pour obtenir le nombre de jours de n'importe quel mois de l'année, en utilisant l'arithmétique la plus simple. La prochaine fois que vous vous souviendrez du nombre de jours en septembre, faites-le simplement avec ce one-liner JavaScript :

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

Partie II

Introduction

Dans la première partie, une formule courte et même légèrement élégante a été obtenue, dont les principaux avantages sont la simplicité de l'appareil mathématique, l'absence d'expressions de branchement et conditionnelles, et la concision. Les inconvénients - outre le fait que vous ne l'utiliserez pas dans votre projet - incluent le manque de vérification des années bissextiles et non bissextiles.
Je me suis donc donné pour tâche de créer une fonction F, de sorte que la valeur f(x, y) pour chaque mois X, représenté par un nombre de 1 à 12 et une année y supérieur à 0 correspond au nombre de jours dans le mois X par an y.
Pour les impatients, il y a une réponse toute faite sous le spoiler, mais pour le reste, suivez-moi.

Répondre

Reste de la division : mode Et ⌊⌋

Pour plus de clarté visuelle, nous conviendrons que dans certaines formules l'opérateur de division avec un reste est remplacé par des parenthèses inférieures, là où cela me paraissait nécessaire :

Année bissextile

Dans une année bissextile, un jour supplémentaire est introduit : le 29 février. Comme vous le savez, une année bissextile est une année qui est un multiple de 4 et non un multiple de 100, ou un multiple de 400. Écrivons une expression identique à cette affirmation :

Pour convertir cette expression en une expression algébrique, il faut appliquer une injection de la forme au résultat de l'expression :

Ce qui vous permettra d'obtenir 1 en divisant sans reste et 0 en divisant avec reste, afin de l'utiliser dans la formule de détermination du nombre de jours dans un mois.

En tant que fonction g" vous pouvez utiliser 1 moins le reste pour :

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

Il est facile de voir qu'en augmentant le dividende et le diviseur par 1, on obtient la formule correcte pour :
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

Ainsi, nous écrivons l'expression sous la forme :


Écrivons l'expression sous la forme :

En appliquant cette approche, on obtient fonction suivante g(y), qui vaut 1 si l'année est bissextile, ou 0 sinon :

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

Les années bissextiles sont surlignées en gras.

Je vous rappelle que dans le cadre de l'accord accepté, l'opérateur pour obtenir le reliquat du partage peut être décrit comme mode, et ⌊⌋.

Appliquer un masque

Dans la formule, la partie est un ajustement qui ajoute 2 jours à janvier. Si nous supprimons le facteur 2 et changeons le numérateur de 1 à 2, cette formule ajoutera 2 jours à janvier et 1 jour à février, ce qui nous donne la clé pour ajouter un jour dans une année bissextile. Pour plus de clarté, nous utilisons une valeur intermédiaire dans la formule g(y) et comme y en utilisant 2000 (année bissextile) et 2001 (année non bissextile) :

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

Les valeurs pour tous les mois sauf janvier d'une année non bissextile sont correctes.

Pour corriger ce malheureux malentendu, ajoutez 1 jour à janvier par la formule que nous connaissons déjà :


Ou:

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

Conclusion

En conséquence, une formule beaucoup plus lourde, mais plus universelle, a été obtenue, qui peut également être utilisée pour obtenir le nombre de jours dans un mois d'une certaine année :

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

1 . Je ne sais pas comment utiliser un tel mnémonique, alors j'ai aperçu un signe sur Internet.
2 . "Basics", ou "Règle avec de nombreuses exceptions", comme la plupart des règles.
3 . Initialement, dans le calendrier romain, février était le dernier mois de l'année, il y a donc une logique à ce qu'il soit plus court que tous les autres. Il est également logique d'ajouter ou de supprimer un jour exactement à la fin de l'année, sa durée est donc variable.

Mise à jour 1:
Traduction alternative de la première partie en

Le calculateur de date est conçu pour calculer le nombre de jours entre les dates, ainsi que pour trouver une date en ajoutant ou en soustrayant un certain nombre de jours à une date connue.

Ajouter des jours à une date

Afin de savoir quelle sera la date dans un certain nombre de jours, utilisez cette option. Entrez la date de début et le nombre de jours à ajouter. Pour soustraire, utilisez la valeur moins. La calculatrice a également une option pour ajouter des jours ouvrables uniquement.

Calcul du nombre de jours entre les dates

Cette méthode de calcul répondra à la question "combien de jours se sont écoulés depuis la date". Entrez la date de début et la date de fin et cliquez sur le bouton "calculer". La calculatrice affichera le nombre de jours entre les dates saisies. Séparément, la calculatrice affichera le nombre de jours ouvrables.

Avec cette option, vous pouvez calculer combien de jours il reste jusqu'à un certain événement, comme un anniversaire ou un jour férié. Pour ce faire, entrez la date d'aujourd'hui dans le champ de date de début et la date de l'événement dans le champ de date de fin.

Vacances

La calculatrice peut calculer, ajouter et soustraire des jours calendaires et des jours ouvrables. Les jours fériés officiels non travaillés sont :

  • 1,2,3,4,5,6,8 janvier - Vacances du Nouvel An
  • 7 janvier - Noël orthodoxe
  • 23 février - Journée du défenseur de la patrie
  • 8 mars - Journée internationale de la femme
  • 1er mai - Printemps et fête du travail
  • 9 mai - Jour de la Victoire
  • 12 juin - Jour de la Russie
  • 4 novembre - Journée de l'unité nationale

Si un jour férié tombe un samedi ou un dimanche, il est reporté au jour ouvrable suivant. Mais parfois, le week-end est déplacé à un endroit complètement différent du calendrier. Par exemple, les samedis et dimanches qui tombent les jours fériés du Nouvel An peuvent être déplacés en mai pour prolonger les vacances de mai.

Lors du calcul des jours, le calculateur prend en compte à la fois les jours fériés et tous les transferts.

Récemment, après une longue période passée sans dormir, j'ai réfléchi à la façon dont vous pouvez connaître le nombre de jours dans un mois, en connaissant son nombre. Il y a des comptines sur ce sujet, il y a un moyen de compter par os, mais ces méthodes ne me conviennent pas - je me suis plongé dans la recherche d'une formule mathématique, que j'ai déduite au bout d'un moment.

Alors la tâche

Formellement En d'autres termes, nous devons obtenir une fonction f (x), qui donnerait la liste de valeurs suivante (que j'ai d'ailleurs trouvée quelque part sur Internet et que je n'ai pas déduite à l'aide de règles mnémoniques):

Il convient de noter que nous ne recevons que le numéro du mois comme argument, c'est-à-dire on ne tient pas compte des années bissextiles, et f(2) = 28.

Si vous voulez connaître le résultat que j'ai obtenu, faites défiler vers le bas de cette page. Ce qui sera décrit ci-dessous est la dérivation de la formule souhaitée.

Qu'allons-nous utiliser

En plus de l'addition, de la soustraction et de la multiplication, j'utiliserai deux opérations : la division entière et l'opération de prendre le reste. Laissez-moi vous rappeler ce que c'est :

  • Division entière, ou "division arrondie à l'inférieur". Pour moi, il sera représenté comme une division normale : a / b - signifiant ⌊a / b⌋ . Par exemple, 5 / 3 = 1 .
  • En prenant le reste modulo. Je désignerai traditionnellement la division avec un reste: a % b \u003d a - (a / b) * b. Par exemple, 5 % 3 = 2 .

Ils ont la même priorité et sont laissés associatifs.

Les fondamentaux ou une règle avec de nombreuses exceptions

Essayons de trouver un modèle qui satisferait autant de valeurs de l'argument que possible. Habituellement, le nombre de jours dans un mois fluctue entre 30 et 31. En même temps, vous pouvez remarquer la dépendance de ce nombre à la régularité du mois - ce qui signifie que nous utiliserons l'opération consistant à prendre le reste modulo 2. Il semble qu'il devrait être quelque chose comme:

f₁(x) = 30 + x%2


Bon départ! En ignorant février, qui devra évidemment passer par quelques tours, nous serons heureux d'avoir pu ajuster la fonction pour le premier semestre. Et puis, à partir du mois d'août, la parité doit être inversée. Cela peut être fait en remplaçant x%2 dans la première version de la formule (x+1)%2:

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


Comme prévu, la première moitié de l'année est maintenant hors de la fourchette des valeurs correctes, mais les mois d'août à décembre ont donné ce dont nous avions besoin. Trouvons un moyen de combiner ces deux parties.

Masque

Nous avons besoin du +1 dans le dividende pour "s'activer" uniquement lorsque l'argument atteint des valeurs supérieures à 8, c'est-à-dire nous devons appliquer un masque. Dans le même temps, les valeurs de l'argument ne peuvent pas dépasser 12. Ainsi, la division entière de l'argument par 8 est idéale pour nous :


Exactement comme nous avons besoin. Utilisons cette sortie :

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


Ouah! Tout est correct, sauf février. Comme c'est inattendu.

Février

Tous les mois ont 30 ou 31 jours, mais février en a 28 (laissez-moi vous rappeler que nous ne considérons pas les années bissextiles).

Référence historique: dans le calendrier romain, février était le dernier mois de l'année - convenez que l'ajout d'un jour dans les années bissextiles à la fin du calendrier est plus intuitif. Cependant, nous utilisons le calendrier grégorien, dans lequel le mois le plus court est rapproché du début à la demande de l'un des dirigeants sages.

Dans le dernière version notre formule pour février a obtenu jusqu'à 30 jours. Et donc nous devons lui couper quelques jours. Naturellement, certains autres mois en souffriront également : soit à gauche de février, soit à droite de celui-ci dans notre liste - cependant, il y a beaucoup moins de mois à droite, nous devrons donc sacrifier janvier, puis ajuster le formule pour cela. Vous pouvez découper des jours pour les premier et deuxième mois en utilisant l'expression 2 % ×.