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

VB 6 et antérieur Discussion :

Comment tronquer une date (supprimer les heures) [FAQ]


Sujet :

VB 6 et antérieur

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut Comment tronquer une date (supprimer les heures)
    Bonjour ,
    Je cherche à supprimer les indications d'heure d'une date time.
    exemple 24/12/2005 16:18:25 ->24/12/2005 00:00:00
    Je n'ai pas trouvé de fonction toute faite, donc j'en ai fait deux.
    Laquelle préférez vous?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Function TronqueDate(ByVal DtmATronquer As Date) As Date
    TronqueDate = CDate(DateSerial(Year(DtmATronquer), Month(DtmATronquer), Day(DtmATronquer)))
    End Function
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Function TronqueDate1(ByVal DtmATronquer As Date) As Date
    TronqueDate1 = CDate(Int(DtmATronquer))
    End Function
    Si vous avez mieux à proposer, faites donc!

    Merci
    Soazig

  2. #2
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    La deuxième

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    à mon avis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Function TronqueDate1(ByVal DtmATronquer As Date) As Date 
    TronqueDate1 = int(DtmATronquer) 
    End Function
    est plus court et largement suffisant
    Elle est pas belle la vie ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    il devrais rajouter un &" 00:00:00"
    Pas il, elle!!
    Et non ce n'est pas la peine, l'idée de tronquedate1 est qu'une date est stockée comme un réel dont la partie décimale est la fraction de jour donc eles heures minute, par conséquent, lorsqu'on supprime les décimales, on se trouve avec la même date mais à minuit.

    Je ne pensais pas déchainer les foules comme cela.
    Remarque j'ai testé mes solutions avant de poster quand même.

    A+
    Soazig

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Citation Envoyé par méphistopheles
    Je pensait que la fonction integer ne s'apliquais qu'aux valeurs numériques On en apprent tous les jours.
    par contre, il devrais rajouter un &" 00:00:00"
    une date est une grandeur numérique
    je n'ai nul besoin de rajouter 00:00:00
    en effet 00:00:00 est une valeur numérique de grandeur 0
    il se trouve par un curieux hasard que le zéro est neutre par rapport à
    l'addition et que rajouter zéro à une grandeur numérique est une tache
    inutile (je n'ose pas dire un travail de bénédictin frère méphisto"
    teste la séquence suivante dans la fençetre d'éxécution
    print now()
    print int(now())
    print hour(now)
    print hour(int(now))
    print isnumeric(now()) pardon bill mais là tu te plantes


    plus fun
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function TronqueDate1(ByVal DtmATronquer As Date) As Date 
    TronqueDate1 = DtmATronquer\1 
    End Function
    Elle est pas belle la vie ?

  6. #6
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjours à tous,

    Pouvez m'expliquer pourquoi un simple format ne conviendrait pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test_date()
        Dim my_date As Date
        my_date = Now
        my_date = Format(my_date, "yyyy/mm/dd")
    End Sub
    Le format (il me semble) met en forme la date indépendemment de la forme de date qui est configurée sur le serveur

    Il me semble que des comparaisons ou des calcul ou des tris doivent suivre car si on ne fais rien je vois pas l'utilité. C'est pourquoi j'avais proposé ma solution en me disant si dans le code qui précede on prend la date système et qu'ensuite il faille tronqué la date il me semblait plus simple de prendre directement que la date : "Date".

    Alors bien évidemment si on récupère une date complète qui n'est pas la date système, dans ce cas est-ce que format ne suffirait pas?

    Si je me trompe, merci de me le dire gentiment et pouquoi ?

    Igloobel
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    format renvoie un variant qui n'est pas nécessairement reconnu comme une date
    essaie voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Function theur()
    Dim x As Variant
    x = Now()
    MsgBox (VarType(x))
    x = Format(x, "yyyy/mm/dd")
    MsgBox (VarType(x))
    theur = x
    End Function
    ta variable est passée de date à texte
    Elle est pas belle la vie ?

  8. #8
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Je viens de tester ce que tu dis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test_date()
        Dim my_date As Date
        my_date = Now
        my_date = Format(my_date, "yyyy/mm/dd")
        MsgBox (VarType(my_date))
    End Sub
    le msgbox me dit 7 soit un type date ???????

    Toi tu déclares ton type en variant et moi en date Est-ce pour cela?

    Merci d'avance

    Igloobel
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    oui c'est pour cela
    en effet vb essaie de transposer la valeur à l'appel d'une fonction
    de conversion
    mail il plus simple de taper int(madate) ou madate\1 que
    Format(my_date, "yyyy/mm/dd")
    et de plus cela fonctionne dans tous les contextes et dans tous les pays
    Elle est pas belle la vie ?

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Je pense que je vais choisir soit la TronqueDate4 ou la TronqueDate1.
    Vu que cela a l'air d'être celle la qui remporte les suffrages.

    Merci à tous pour vos contributions.
    Soazig

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/09/2008, 16h23
  2. Réponses: 0
    Dernier message: 10/06/2008, 16h57
  3. [ASIQ] Comment tester par rapport à une date avec l'heure
    Par Soulkeum dans le forum Adaptive Server IQ
    Réponses: 1
    Dernier message: 08/02/2008, 18h06
  4. Réponses: 1
    Dernier message: 06/05/2007, 11h56
  5. comment comparer une date et une heure ?
    Par developpeur62 dans le forum Hibernate
    Réponses: 2
    Dernier message: 03/11/2006, 10h04

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