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

PHP & Base de données Discussion :

Décalage date avec strtotime()


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut Décalage date avec strtotime()
    Bonjour,

    Je transforme une série de date contenues dans une base MySQL du format '2017-01-02' au format '1483311600000'.

    Les dates sont visiblement transormées correctement, mais mon problème est que lorsque je génère un graphique highstock, la date de début et la date de fin sont décalées d'une journée... Au lieu d'être du 02 janvier au 19 octobre, elles sont du 01 janvier au 18 octobre.

    SI quelqu'un à une idée?

    Mon code pour transformer la date:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for($a=0;$a<sizeof($Result);$a++){
    	$Result=strtotime($Result[$a][0]).'';
    	$DataResult=$DataResult."[".$Result."000,".$Result[$a][1]."],";
    };
    Merci par avance.

  2. #2
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    A quoi sert le dans ton code ?

    Tu dis que tu as un problème avec strtotime mais cela m'étonnerait que le timestamp qu'il te fournie soit faux.
    Le problème ne serait pas plutôt sur la conception de ton graphique ?

    Ta colonne Mysql est en DATE ou en DATETIME ? On pourrait imaginer que le graphique est décalé a cause de l'heure.

    Au passage, utilise foreach pour parcourir un tableau. Les boucles for/sizeof ça date de la préhistoire de PHP3.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut
    Ma colonne MySQL est en 'datetime' (format '2017-01-02 04:51:04').

    Je fait une requête pour me sortir une quantité 'x' sur la journée de 05:00:00 à 05:00:00

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CASE WHEN TIME(Processdate) < '05:00:00' THEN CAST(Processdate - INTERVAL 1 DAY AS DATE) ELSE CAST(Processdate AS DATE) END AS jour, COUNT(*) AS Nombre FROM nccdetails WHERE Line='MALIGNE_1' GROUP BY jour;
    ,

    Ce qui me retourne une date 'YYYY-mm-dd'

    Après je transforme pour rendre compatible avec highstock:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for($a=0;$a<sizeof($Result);$a++){
    	$Result=strtotime($Result[$a][0]);
    	$DataResult=$DataResult."[".$Result."000,".$Result[$a][1]."],";
    };
    Et mon code PHP pour le graphique:
    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
    	<script type="text/javascript">
    		 $(function() {
    			  Highcharts.setOptions({
        lang: {
            months: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin','juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
            weekdays: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi','Jeudi', 'Vendredi', 'Samedi'],
    		shortMonths: ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'],
            decimalPoint: ',',
            downloadPNG: 'Télécharger en image PNG',
            downloadJPEG: 'Télécharger en image JPEG',
            downloadPDF: 'Télécharger en document PDF',
            downloadSVG: 'Télécharger en document Vectoriel',
            exportButtonTitle: 'Export du graphique',
            loading: 'Chargement en cours...',
            printButtonTitle: 'Imprimer le graphique',
            resetZoom: 'Réinitialiser le zoom',
            resetZoomTitle: 'Réinitialiser le zoom au niveau 1:1',
            thousandsSep: ' ',
            decimalPoint: ','
        }
    });
           // Create the chart
           window.chart = new Highcharts.StockChart({
                  chart : {
                         renderTo : 'container'
                  },
     
                  rangeSelector : {
                         selected : 0
                  },
     
                  title : {
                         text : 'mon titre'
                  },subtitle: {
                  text: 'mon sous-titre'
                  },
     
    			  tooltip: {
                      crosshairs: true,
                      shared: true,
     
                   formatter: function() {
                    var s = Highcharts.dateFormat('%A %e %b %Y', this.x);
     
                    $.each(this.points, function(i, point) {
                        s += '<br/>'+this.series.name+':'+'<b>'+this.y+'<b>';
                    });
     
                    return s;
                   }
     
                },
     
                  series : [{
                         name : 'Nom de la série',
                         data : [<?php echo rtrim($DataResult, ",");?>],
                         tooltip: {
     
                              //valueDecimals: 0
                         }
                  }]
           })
    })
    	</script>

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Fais le debugage élémentaire : est-ce que $DataResult contient les bonnes données ou non ?
    Si oui, le problème est dans ton graphique.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut
    A priori oui...

    Voici le résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [1483311600000,29],[1483398000000,47],[1483484400000,28],[1483570800000,64],[1483657200000,26],[1483743600000,65],[1483830000000,34],[1483916400000,36],[1484002800000,30],[1484089200000,26],[1484175600000,25],[1484262000000,47],[1484348400000,24],[1484434800000,17],[1484521200000,30],[1484607600000,27],[1484694000000,12],[1484780400000,33],[1484866800000,26],[1484953200000,39],[1485039600000,34],[1485126000000,9],[1485212400000,21],[1485298800000,35],[1485385200000,30],[1485471600000,20],[1485558000000,27],[1485644400000,31],[1485730800000,20],[1485817200000,18],[1485903600000,20],[1485990000000,13],[1486076400000,11],[1486162800000,12],[1486249200000,17],[1486335600000,27],[1486422000000,13],[1486508400000,17],[1486594800000,23],[1486681200000,16],[1486767600000,13],[1486854000000,16],[1486940400000,23],[1487026800000,26],[1487113200000,18],[1487199600000,15],[1487286000000,33],[1487372400000,39],[1487458800000,24],[1487545200000,31],[1487631600000,13],[1487718000000,13],[1487804400000,22],[1487890800000,22],[1487977200000,24],[1488063600000,26],[1488150000000,52],[1488236400000,28],[1488322800000,20],[1488409200000,44],[1488495600000,34],[1488582000000,18],[1488668400000,16],[1488754800000,15],[1488841200000,21],[1488927600000,29],[1489014000000,73],[1489100400000,26],[1489186800000,15],[1489273200000,49],[1489359600000,68],[1489446000000,27],[1489532400000,33],[1489618800000,26],[1489705200000,11],[1489791600000,10],[1489878000000,12],[1489964400000,22],[1490050800000,15],[1490137200000,25],[1490223600000,13],[1490310000000,15],[1490396400000,29],[1490482800000,21],[1490565600000,23],[1490652000000,26],[1490738400000,21],[1490824800000,20],[1490911200000,15],[1490997600000,13],[1491084000000,16],[1491170400000,14],[1491256800000,20],[1491343200000,16],[1491429600000,21],[1491516000000,28],[1491602400000,52],[1491688800000,67],[1491775200000,36],[1491861600000,26],[1491948000000,22],[1492034400000,41],[1492120800000,25],[1492207200000,30],[1492293600000,33],[1492380000000,7],[1492466400000,33],[1492552800000,27],[1492639200000,23],[1492725600000,20],[1492812000000,48],[1492898400000,35],[1492984800000,39],[1493071200000,61],[1493157600000,15],[1493244000000,19],[1493330400000,28],[1493416800000,9],[1493503200000,25],[1493676000000,15],[1493762400000,23],[1493848800000,20],[1493935200000,42],[1494021600000,41],[1494108000000,28],[1494194400000,26],[1494280800000,287],[1494367200000,15],[1494453600000,36],[1494540000000,42],[1494626400000,95],[1494712800000,104],[1494799200000,236],[1494885600000,28],[1494972000000,29],[1495058400000,21],[1495144800000,20],[1495231200000,26],[1495317600000,21],[1495404000000,29],[1495490400000,8],[1495576800000,7],[1495663200000,9],[1495749600000,14],[1495836000000,23],[1495922400000,18],[1496008800000,14],[1496095200000,9],[1496181600000,18],[1496268000000,13],[1496354400000,15],[1496440800000,10],[1496527200000,6],[1496613600000,15],[1496700000000,24],[1496786400000,18],[1496872800000,43],[1496959200000,7],[1497045600000,18],[1497132000000,10],[1497218400000,23],[1497304800000,5],[1497391200000,5],[1497477600000,7],[1497564000000,5],[1497650400000,23],[1497736800000,19],[1497823200000,22],[1497909600000,15],[1497996000000,16],[1498082400000,15],[1498168800000,22],[1498255200000,54],[1498341600000,22],[1498428000000,37],[1498514400000,18],[1498600800000,70],[1498687200000,67],[1498773600000,25],[1498860000000,24],[1498946400000,56],[1499032800000,26],[1499119200000,15],[1499205600000,15],[1499292000000,11],[1499378400000,15],[1499464800000,17],[1499551200000,9],[1499637600000,17],[1499724000000,15],[1499810400000,14],[1499896800000,18],[1499983200000,12],[1500069600000,33],[1500156000000,14],[1500242400000,32],[1500328800000,23],[1500415200000,31],[1500501600000,39],[1500588000000,9],[1500674400000,15],[1500760800000,19],[1500847200000,21],[1500933600000,24],[1501020000000,37],[1501106400000,21],[1501192800000,24],[1501452000000,22],[1501538400000,8],[1501624800000,5],[1501711200000,14],[1501797600000,3],[1502056800000,52],[1502143200000,10],[1502229600000,9],[1502316000000,10],[1502402400000,5],[1502661600000,9],[1502748000000,15],[1502834400000,22],[1502920800000,22],[1503007200000,24],[1503266400000,33],[1503352800000,31],[1503439200000,15],[1503525600000,13],[1503612000000,11],[1503698400000,22],[1503784800000,16],[1503871200000,13],[1503957600000,16],[1504044000000,20],[1504130400000,22],[1504216800000,22],[1504303200000,37],[1504389600000,26],[1504476000000,32],[1504562400000,29],[1504648800000,17],[1504735200000,20],[1504821600000,28],[1504908000000,22],[1504994400000,87],[1505080800000,39],[1505167200000,57],[1505253600000,21],[1505340000000,19],[1505426400000,11],[1505512800000,15],[1505599200000,41],[1505685600000,37],[1505772000000,28],[1505858400000,49],[1505944800000,21],[1506031200000,22],[1506117600000,13],[1506204000000,7],[1506290400000,12],[1506376800000,28],[1506463200000,35],[1506549600000,17],[1506636000000,16],[1506722400000,24],[1506808800000,22],[1506895200000,16],[1506981600000,24],[1507068000000,42],[1507154400000,59],[1507240800000,39],[1507327200000,52],[1507413600000,42],[1507500000000,58],[1507586400000,33],[1507672800000,13],[1507759200000,13],[1507845600000,14],[1507932000000,17],[1508018400000,16],[1508104800000,20],[1508191200000,10],[1508277600000,20]
    Après si c'est la partie graphique, je suis dans la mouise ^^ c'est du code js

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Euh... :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CASE WHEN TIME(Processdate) < '05:00:00' THEN CAST(Processdate - INTERVAL 1 DAY AS DATE) ELSE CAST(Processdate AS DATE) END AS jour
    Si l'heure est inférieure à 5:00, on fait -1 jour... Tu es sûr que tes dates ont bien une heure en base ? parce que si elles sont à minuit (00:00), tu vas automatiquement retourner la date de la veille.

    Au passage :

    Ya un peu beaucoup de $Result là... C'est à la fois un tableau et le résultat de strtotime ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for($a=0;$a<sizeof($Result);$a++){
    	$Result=strtotime($Result[$a][0]);
    	$DataResult=$DataResult."[".$Result."000,".$Result[$a][1]."],";
    };
    Et tu as l'air de vouloir récupérer des données au format json, non ? Pourquoi ne pas construire un tableau et le passer dans json_​encode ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $data = array();
    foreach ($Result as $row) {
        $data[] = array(strtotime($row[0]).'000', $row[1]); 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data : <?php echo json_encode($data);?>,
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut
    Oui c'est beaucoup plus simple, mais je dois supprimer les doubles quote pour ne pas planter la génération de mon graphique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data : <?php echo str_replace('"', "", json_encode($data));?>,
    Par contre toujours ce fichu pb...

Discussions similaires

  1. Décalage de date avec spring rest et la librairie jackson
    Par jean.dufour dans le forum Spring
    Réponses: 10
    Dernier message: 27/07/2015, 23h31
  2. [PHP 5.3] Comparaisons de date avec "strtotime"
    Par link.80 dans le forum Langage
    Réponses: 2
    Dernier message: 06/12/2013, 11h16
  3. [Dates] Perdu avec strtotime et différence de temps
    Par skystef dans le forum Langage
    Réponses: 10
    Dernier message: 14/10/2008, 11h44
  4. [Dates] problème avec strtotime
    Par grinder59 dans le forum Langage
    Réponses: 5
    Dernier message: 24/08/2007, 16h40
  5. [Dates] Date avec strtotime('next ...')
    Par lusitano11 dans le forum Langage
    Réponses: 2
    Dernier message: 17/01/2006, 23h03

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