1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 881
    Points : 10 497
    Points
    10 497
    Billets dans le blog
    4

    Par défaut Nombre de jours depuis une date du passé

    Bonjour ! Je vous présente un programme FlashPascal qui compte le nombre de jours depuis une date du passé (par exemple depuis le jour de votre naissance).

    Le programme peut être essayé en ligne.

    P.-S. Le programme utilise la version récemment corrigée de la fonction Ord(). Merci Paul !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if aJour1.j > NOMBRE_JOURS_PAR_MOIS[aJour1.m, Ord(Bissext(aJour1.a))] then
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé

    Inscrit en
    août 2006
    Messages
    3 720
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 720
    Points : 5 083
    Points
    5 083

    Par défaut

    Mau,

    Je n'ai pas regardé ton programme, mais depuis le temps que je programme, les problèmes de ce genre sont récurrents.

    J'ai résolu ça en utilisant le calcul de dates en jours juliens (et j'ai pris l'habitude de les stocker ainsi, ce qui m'évite tous les problèmes avec les différents systèmes, qui n'utilisent pas tous la même date d'origine, alors que pour les jours juliens, c'est définit pour tout le monde).

    Dans le cas de ton programme, une fois 2 dates converties, il suffit de faire une différence.
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 881
    Points : 10 497
    Points
    10 497
    Billets dans le blog
    4

    Par défaut

    Merci pour le tuyau, droggo. Il faut que j'étudie le sujet. Si je comprends bien, il y aurait une formule qui permettrait à partir d'une date grégorienne d'obtenir une date julienne en jours, et inversement ?

  4. #4
    Expert confirmé

    Inscrit en
    août 2006
    Messages
    3 720
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 720
    Points : 5 083
    Points
    5 083

    Par défaut

    Hua,

    Oui, et ça devrait être facile à trouver, j'ai fait ça aux alentours de 1980, avant de disposer d'internet.
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 881
    Points : 10 497
    Points
    10 497
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par droggo Voir le message
    Hua,

    Oui, et ça devrait être facile à trouver, j'ai fait ça aux alentours de 1980, avant de disposer d'internet.
    Effectivement, ce fut facile à trouver. J'aurai quand même un peu de regret d'abandonner mon premier algorithme, certes plus lent, mais aussi plus compréhensible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    program JourJulien;
    {$APPTYPE CONSOLE}
    {$MODE DELPHI}
     
    (*
     
      A  = Année       Entier
      M  = Mois        Entier
      Q  = Quantième   Flottant
     
      JJ = Jour julien Flottant
     
    *)
     
    function ConvDateJourJulien(A, M: integer; Q: double): double;
    var
      S: integer;
      B: integer;
    begin
      if M <= 2 then
      begin
        A := A - 1;
        M := M + 12;
      end;
      S := Trunc(A / 100);
      B := 2 - S + Trunc(S / 4);
      result := Trunc(365.25 * (A + 4716)) + Trunc(30.6001 * (M + 1)) + Q + B - 1524;
    end;
     
    procedure ConvJourJulienDate(const JJ: double; var A, M: integer; var Q: double);
    var
      Z: integer;
      F: double;
      S: integer;
      alpha: integer;
      B: integer;
      C: integer;
      D: integer;
      E: integer;
    begin
      Z := Trunc(JJ);
      F := Frac(JJ);
     
      if Z < 2299161 then
        S := Z
      else
      begin
        alpha := Trunc((Z - 1867216.25) / 36524.25);
        S := Z + 1 + alpha - Trunc(alpha / 4);
      end;
     
      B := S + 1524;
      C := Trunc((B - 122.1) / 365.25);
      D := Trunc(365.25 * C);
      E := Trunc((B - D) / 30.6001);
     
      Q := B - D - Trunc(30.6001 * E) + F;
     
      if E < 14 then
        M := E - 1
      else
        M := E - 13;
     
      if M > 2 then
        A := C - 4716
      else
        A := C - 4715;
    end;
     
    var
      A, M: integer;
      Q: double;
      JJ: double;
     
    begin
      A := 2014;
      M := 3;
      Q := 16.0;
     
      WriteLn(A);
      WriteLn(M);
      WriteLn(Q:0:2);
      WriteLn;
     
      JJ := ConvDateJourJulien(A, M, Q);
      ConvJourJulienDate(JJ, A, M, Q);
     
      WriteLn(A);
      WriteLn(M);
      WriteLn(Q:0:2);
      WriteLn;
     
      Write('Appuyez sur la touche Entr'#130'e...');
      ReadLn;
    end.

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 881
    Points : 10 497
    Points
    10 497
    Billets dans le blog
    4

    Par défaut

    Une version légèrement améliorée, qui donne en plus le jour de la semaine pour la date saisie sous la forme jj/mm/aaaa.

  7. #7
    Expert confirmé

    Inscrit en
    août 2006
    Messages
    3 720
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 720
    Points : 5 083
    Points
    5 083

    Par défaut

    Loa,

    En fait, si tu gères également l'heure, une version vraiment améliorée serait de tenir compte du time zone, car les jours juliens ont la particularité de commencer à 12h GMT, ce qui fait que pour nous, si on fait référence à 10 h du matin, ou à 16 heures, on aura changé de jour julien.

    Cet ajout n'est pas vraiment utile pour l'usage habituel de nos programmes, mais nécessaire si on doit gérer des données dans différents pays, si on veut récupérer l'heure sans erreur.

    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 881
    Points : 10 497
    Points
    10 497
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par droggo Voir le message
    Loa,

    En fait, si tu gères également l'heure, une version vraiment améliorée serait de tenir compte du time zone, car les jours juliens ont la particularité de commencer à 12h GMT, ce qui fait que pour nous, si on fait référence à 10 h du matin, ou à 16 heures, on aura changé de jour julien.

    Cet ajout n'est pas vraiment utile pour l'usage habituel de nos programmes, mais nécessaire si on doit gérer des données dans différents pays, si on veut récupérer l'heure sans erreur.

    Tout cela est bon à savoir. Merci, droggo !

Discussions similaires

  1. [AC-2003] Récupérer les enregistrements mis à jour depuis une date d
    Par Zodiarch dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/04/2010, 11h05
  2. soustraire un nombre de jours d'une date
    Par air75 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/02/2009, 23h16
  3. extraire le nom du jour depuis une date
    Par switch1 dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2009, 00h52
  4. ajouter nombre de jours a une date
    Par debutantasp dans le forum ASP
    Réponses: 7
    Dernier message: 31/03/2008, 09h02
  5. ajouter un nombre de jour ouvrable à une date
    Par ecirb dans le forum InfoPath
    Réponses: 1
    Dernier message: 30/03/2007, 15h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo