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

Langage PHP Discussion :

date venant d'excel


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par défaut date venant d'excel
    Bonjour,

    plus que débutant en PHP...
    J'ai un fichier .xlsx avec dans la première colonne des dates.
    Ces dates sont croissantes et uniques.
    Je dois lire cette colonne(A) et dès que je trouve la date du jour, sortir les données de la colonne B et C.
    J'arrive à ouvrir mon fichier .xlsx, à lire la première donnée dans la colonne A.
    Quand je fais un 'ECHO' de la valeur évidemment, j'ai le nombre xls qui se cache derrière la date , soit 43080.
    Je sais que c'est le 43080 jour après le 1/1/1900 mais je ne sais pas comment PHP peut me l'afficher correctement?
    Je sais aussi que PHP préfère commencer au 1/1/1970, qu'il y a 25569 jours de différence entre ces deux dates mais pas moyen d'afficher quelque chose de correct ni même de comparer ce nombre avec la date du jour venant de la fonction date() de PHP.
    voici mon code :
    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
    <?php
    require_once('PHPExcel/Classes/PHPExcel.php');
    $date = date("d/m/Y");
    $heure = date("H");
    $minute = date("i");
    $date_reference = $date;
    $lignes = 0;
    $colonne = 0;
    // Ouvrir un fichier Excel en lecture
    $objReader = PHPExcel_IOFactory::createReader('Excel2007');
    $objPHPExcel = $objReader->load("gardes.xlsx");
    //aller sur la feuille active
    $sheet = $objPHPExcel->getActiveSheet() ;
     
    // le fichier xlsx est ouvert
     
    // selon l'heure du moment, on va déterminer si on affiche le jour - 1 ou jour J
     
    if ($heure < 8 OR $heure == 8 AND $minute < 30) 
    	{
    		$date_reference = $date_reference - 1;
    	}
    // on va lire le fichier xls
    $colonne = 'A'; // On choisit de regarder la colonne A
    $lignes = $sheet->getHighestRow(); // Dans notre excel on va récupérer le numero de la dernière ligne remplis
    for ($ligne = 2; $ligne <= $lignes; $ligne++) { // Pour chaque ligne jusqu'a la dernière on récupère la cellule
     
        $cell = $sheet->getCell($colonne.$ligne);
        $cell = $cell - 1;
        echo $cell;
    //    echo date('d/m/Y', ($cell));
        if($cell == $date_reference) 
        {	
        	echo 'bonjour';
        	echo $ligne;
        	echo 'fin';
     
        }	
    }
    merci d'avance pour votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une recherche m'a pris moins de 2 nimutes : "php convertir date excel"

    Une réponse ici :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $iNbDay = X; //remplace X par la variable qui contient ta date extraite d'excel, donc ton nombre de jours. 
    $oDate = DateTime::createFromFormat('d/m/Y', '01/01/1900'); 
    $oDate->add(new DateInterval('P'.$iNbDay.'D')); 
    echo $oDate->format('d/m/Y'); //Affiche ta date au format d/m/Y

    voir : PHP - La classe DateTime

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par défaut
    Bonjour,
    merci pour votre réponse éclair
    effectivement, ce code m'avait échappé.
    par contre ça me renvoie la date de mon fichier .xls mais + 2 jours???

    Bàv,

    david

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    il y a des méthodes directs avec PHPExcel pour formater la date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date = PHPExcel_Style_NumberFormat::toFormattedString($cell->getValue(), 'YYYY-MM-DD HH:i:ss');
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par défaut
    Super, cette méthode fonctionne.
    Il me reste encore un soucis avec ces dates.
    J'ai une variable $date qui est alimentée par la fonction PHP date().
    $date = date(d/m/Y);
    Je souhaite comparer cette variable avec la date qui vient maintenant de votre fonction PHPExcel qui a le même format (d/m/Y)
    Quand je fais ma comparaison, je n'obtiens jamais l'équivalence???
    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
    <?php
    require_once('PHPExcel/Classes/PHPExcel.php');
    $date = date("d/m/Y");
    $heure = date("H");
    $minute = date("i");
    $date_reference = $date;
    $lignes = 0;
    $colonne = 0;
    // Ouvrir un fichier Excel en lecture
    $objReader = PHPExcel_IOFactory::createReader('Excel2007');
    $objPHPExcel = $objReader->load("gardes.xlsx");
    //aller sur la feuille active
    $sheet = $objPHPExcel->getActiveSheet() ;
     
    // le fichier xlsx est ouvert
     
    // selon l'heure du moment, on va déterminer si on affiche le jour - 1 ou jour J
     
    if ($heure < 8 OR $heure == 8 AND $minute < 30) 
    	{
    		$date_reference = $date_reference - 1;
    	}
    // on va lire le fichier xls
    $colonne = 'A'; // On choisit de regarder la colonne A
    $lignes = $sheet->getHighestRow(); // Dans notre excel on va récupérer le numero de la dernière ligne remplis
    for ($ligne = 2; $ligne <= $lignes; $ligne++) { // Pour chaque ligne jusqu'a la dernière on récupère la cellule
     
    	$cell = $sheet->getCell($colonne.$ligne);
    	$oDate = PHPExcel_Style_NumberFormat::toFormattedString($cell->getValue(), 'd/m/Y'); 
    	echo $oDate;
        echo $date_reference;
        echo '<br/>';
        if($oDate = $date_reference) 
        {	
        	echo 'bonjour';
        	echo $ligne;
        	echo 'fin';
     
        }	
    }
    Dans le code ci-dessus, c'est le dernier IF qui ne fonctionne pas??
    Merci d'avance,

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        if($oDate = $date_reference)
    Ceci n'est pas une comparaison (== ou ===), mais une affectation (=).

    D'autre part, comparer des dates n'est pas si simple : DateTime::diff

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par défaut
    Bonjour,

    merci pour vos conseils.
    J'ai donc été voir vers le lien proposé, j'en ai déduis le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	$cell = $sheet->getCell($colonne.$ligne);
    	$oDate = PHPExcel_Style_NumberFormat::toFormattedString($cell->getValue(), 'd/m/Y'); 
    	$interval = $oDate->diff($date_reference);
    	echo $interval->format('%R%a days');
    	echo $oDate;
    IL ne m'affiche rien du tout???
    Je n'ai pas déclaré $interval est-ce cela le problème?

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    la méthode diff() ne s'utilise pas du tout comme ça.

    Il n'y a pas de raison que la comparaison alphanumérique ne fonctionne pas.
    Il faut debuguer pour voir ce qui se passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if($oDate == $date_reference) 
        {	
        	echo 'bonjour';
        	echo $ligne;
        	echo 'fin';
     
        }
    else {
       echo $oDate . ' est différent de ' . $date_reference . '<br/>';
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par défaut
    Hello,

    Un tout grand merci !
    Je ne savait évidemment pas qu'il allait faire une comparaison alphanumérique! Je pensais qu'in faisait une comparaison de ces fameux nombres magiques!
    Et donc effectivement, j'avais une date dont l'année était en 4 chiffres et l'autre en deux chiffres...
    Résolu donc.
    Je profite de ce post et si ce n'est pas l'endroit vous pouvez le virer...
    Moi, j'ai commencé la programmation avec du cobol 85, je sais ça date, j'ai même fait un peu d'assembleur!
    Puis j'ai pataugé un peu avec du vba via access. Dans tous ces langages, on nous donne la ligne de code qui est en erreur.
    Existe-t-il une manière avec le PHP pour nous indiquer la ligne de code en erreur?

    Merci d'avance et encore un tout grand merci pour la solution

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Dans le message d'erreur tu as toujours le numéro de ligne.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par défaut
    Ben c'est là que ça doit coincer aussi.
    Mon fichier.php se trouve sur un synology, il s'ouvre donc avec je ne sais quel editeur de texte.
    L'exécution ne me donne aucun renseignements sur l'erreur.
    Je vais essayer directement depuis mon pc.

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

Discussions similaires

  1. [VBA-E] Format date SAP vers Excel
    Par Eva_75 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/07/2007, 14h38
  2. [Import] [2000] Importer des données venant d'excel
    Par DamKre dans le forum VBA Access
    Réponses: 27
    Dernier message: 05/06/2007, 12h38
  3. mise à jour de 2 tables venant d'excel
    Par pat1545 dans le forum Access
    Réponses: 4
    Dernier message: 17/07/2006, 16h58
  4. [VBA-E] Compatibilité de Date dans VBA Excel
    Par dorschner dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/05/2006, 19h25
  5. Convertir une date au format excel en datetime SQL server
    Par ALLB dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 20/07/2004, 11h28

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