IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flash Pascal Discussion :

Nombre de jours depuis une date du passé


Sujet :

Flash Pascal

  1. #1
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 086
    Points : 15 501
    Points
    15 501
    Billets dans le blog
    9
    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 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 670
    Points
    5 670
    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.

  3. #3
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 086
    Points : 15 501
    Points
    15 501
    Billets dans le blog
    9
    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 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 670
    Points
    5 670
    Par défaut
    Hua,

    Oui, et ça devrait être facile à trouver, j'ai fait ça aux alentours de 1980, avant de disposer d'internet.

  5. #5
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 086
    Points : 15 501
    Points
    15 501
    Billets dans le blog
    9
    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
    4 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 086
    Points : 15 501
    Points
    15 501
    Billets dans le blog
    9
    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 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 670
    Points
    5 670
    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.


  8. #8
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 086
    Points : 15 501
    Points
    15 501
    Billets dans le blog
    9
    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