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

Zend Framework PHP Discussion :

[Zend_Date] Probleme de format de date avec base mssql


Sujet :

Zend Framework PHP

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut [Zend_Date] Probleme de format de date avec base mssql
    Bonjour,

    Je récupère un champ DateTime dans une base de données SQL Server avec Zend_Dbet le driver pdo_mssql. Ce champ a pour valeur '21/12/2007 22:35:00'

    Quand je récupère la valeur dans PHP, j'obtiens bizarrement la valeur '21 déc. 2007 22:35'. Est-ce normal ???

    Quand j'essaye de parser la date avec Zend_Date, j'obtient le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exception 'Zend_Date_Exception' with message 'No date part in '21 déc. 2007 22:35' found.
    Quelqu'un sait-il pourquoi j'ai ces problèmes et comment les résoudre ????

    Merci

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Que fais tu exactement avec Zend_Date ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 93
    Points
    93
    Par défaut
    Bonjour rick,

    Tout dépend comment tu récupères ta date.
    Tu peux formater l'output de cette manière si besoin (même paramètres que date()) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print $date->toString('F j, Y, g:i a');
    // Returns 'December 1, 2008, 10:36 am'
    Si tu pouvais nous montrer ce que tu fais pour récupérer ta date, ça nous permetterait de mieux t'aider

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    En fait, je récupère le résultat d'une requete sql pour pouvoir l'afficher ma colonne DateTime dans 2 champs différents dans ma vue (une pour la date, l'autre pour l'heure.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sql = 'select * from table'
    $resultsDb = $dbAssistec->fetchAll($sql);
    foreach ($resultsDb as $result) :
    	$dateResult = new Zend_Date($result['DT_DATEHEURE'], Zend_Date::ISO_8601);
    endforeach;
    Sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $dateResult = new Zend_Date($result['DT_DATEHEURE'], Zend_Date::ISO_8601);
    J'ai l'exception suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    exception 'Zend_Date_Exception' with message 'No date part in '21 déc. 2007 22:35' found.
    alors que dans la base de données j'ai

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 93
    Points
    93
    Par défaut
    Rick,

    Dans la doc, tu trouveras comment bien utiliser Zend_Date.

    Pour la classe c'est ici :
    http://framework.zend.com/manual/en/....overview.html

    Pour les contantes, c'est ici:
    http://framework.zend.com/manual/en/...constants.list


    En gros, comme le format est différent de celui par défaut, tu dois spécifier le format d'entré à l'initialisation...

    Mais si je lis bien, un truc du genre devrait marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date = new Zend_Date($result['DT_DATEHEURE'], 'dd/MM/YYYY HH:mm:ss');

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    La doc dit :
    La sortie de chaque base de données est différente même si elles se ressemblent. Cependant elles ont toutes des formats compatibles ISO. La manière la plus simple de créer une date depuis une base de données est d'utiliser Zend_Date::ISO_8601. Les SGBDs connus pour être conformes pour Zend_Date::ISO_8601 sont MySQL, MSSQL par exemple, mais ils sont tous capables de retourner une représentation ISO8601 d'une donnée date. ISO8601 possède l'avantage d'être lisible et compréhensible par un humain. Son inconvénient est qu'il est légèrement plus lourd à traiter qu'un simple timestamp UNIX. En revanche ceux-ci ne supportent pas les dates inférieures au 1er Janvier 1970.

    // SELECT datecolumn FROM my_table
    $date = new Zend_Date($datecolumn, Zend_Date::ISO_8601);
    J'ai bien essayé de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date = new Zend_Date($datecolumn, 'd MMM yyyy h:m);
    ça marche pour une date au mois de novembre mais pas pour décembre.

    Dans PHP.ini, j'ai bien un paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ; Specify how datetime and datetim4 columns are returned
    ; On => Returns data converted to SQL server settings
    ; Off => Returns values as YYYY-MM-DD hh:mm:ss
    mssql.datetimeconvert = Off
    Mais ça n'a pas l'air de fonctionner avec PDO_MSSQL.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 93
    Points
    93
    Par défaut
    rick,

    Je ne comprends pas très bien pourquoi tu utilises le format d'entré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date = new Zend_Date($datecolumn, 'd MMM yyyy h:m);
    Alors que tu nous dis que le format dans la base de données est du style : 21/12/2007 22:35.

    As-tu essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date = new Zend_Date($result['DT_DATEHEURE'], 'dd/MM/YYYY HH:mm:ss');
    Sinon, peux-tu faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zend_Debug::dump($datecolumn); exit()
    Et nous dire ce qui s'affiche ...

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    j'ai essayé ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date = new Zend_Date($datecolumn, 'd MMM yyyy h:m');
    car comme le montre l'exception, la requete me retourne bizarrement sous Zend .

    Quand j'exécute cette même requete dans SQL Server, elle me retourne Pour info, la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zend_Debug::dump($datecolumn); exit()
    me retourne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string(18) "21/déc./2008  22:35"

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 93
    Points
    93
    Par défaut
    Je commence à comprendre pourquoi tu as un problème pour décembre et pas pour novembre.

    En gros, en plus du problème de format, tu as un problème de langue.
    nov (en anglais) = nov (en freançais)
    mais
    dec (en anglais) != déc (en freançais)

    Je pense que Zend_Date permet de changer la langue comme suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date = new Zend_Date($datecolumn, 'd MMM yyyy h:m', 'fr_FR');
    J'ai pas testé, mais un truc du genre devrait marcher

    Tiens moi au courant, ça m'interesse

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bon, c'est bien ça.

    le code suivant fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date = new Zend_Date($datecolumn, 'd MMM yyyy H:mm', 'fr_FR');
    Par contre mystère. Pourquoi ma date passe de à ?
    D'autant plus que la doc dit que l'on peut récupérer un champ datetime dans Sql Server avec le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date = new Zend_Date($datecolumn, Zend_Date::ISO_8601);

  11. #11
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Oui, mais ce que le doc ne dis pas, c'est que ta date doit-être passé comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $date = new Zend_Date('2007-12-21', Zend_Date::ISO_8601);

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 93
    Points
    93
    Par défaut
    Salut rick,

    Je suis déjà content de voir que ça marche...
    Pour les formats, je sais que j'ai eu se genre de problème sur notre server linux car tout le système d'exploitation était configuré en 'fr_FR', je l'ai passé en 'en_US' (plus logique pour un serveur d'application). Ce qui réglé le problème. Je ne sais donc pas à quel niveau se trouve le soucis.
    Mais en gros il n'y a que 3 niveaux d'où cela peut venir :

    1. PHP
    2. server mssql lui même
    3. pdo_mssql


    Je n'ai pas poussé mes recherches plus loin. Mais tu devrais surement trouver une variable de configuration pour régler ce soucis.

    Tiens nous au courant si tu trouves qqch, ça aidera surement qqun d'autre et au pire ça satisfera ma curiosité

    A+

Discussions similaires

  1. Coordonner format des Dates avec base Access
    Par wanou44 dans le forum ASP
    Réponses: 1
    Dernier message: 09/10/2007, 12h08
  2. Réponses: 23
    Dernier message: 26/09/2007, 12h35
  3. [SQL Server] Probleme de format de date
    Par flydragon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/05/2006, 17h49
  4. [VB]Format de date avec excell
    Par Empty_body dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/02/2006, 14h56
  5. requete SQL et probleme de format de Date
    Par huon dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/08/2005, 11h56

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