perdu avec les formats date/datetime

Un problème, une question sur la partie Java Script des graphiques

Modérateurs : jturlier, Météo Villarzel

alain
Messages : 101
Enregistré le : 21 nov. 2014, 20:23

perdu avec les formats date/datetime

Message par alain » 29 déc. 2014, 04:13

bonjour, bonsoir..
4h du matin je sais pas quel est le bon choix
je revient vers vous.
Archidébutant j’essaie de comprendre.
Je réussit a faire des graph avec la fonction copier coller depuis le tuto.
Mais quand je fait des graph perso ça marche pas surtout que je voudrais les faire sur le format date/datime.
J'ai déjà isolé le problème: cela vient de mon fichier Json.

Pour comprendre le fonctionnement j'ai tout repris le tuto depuis le début jusqu’à la fonction "encode en Json"
Sous chaque ligne j'ai fait un Echo pour visualiser le comportement, même les lignes qui me servent pas, ainsi je visualise mes requêtes et leur comportements. J'ai placé un point au début et a la fin des variables, comme preconisé dans les cours afin de vérifier qu'il n'y ais pas d'espace dans la variable.
le code d'origine sur lequel jais greffé mes ligne de débug:

Code : Tout sélectionner

 appel du script de connexion
require("mysql_connecti.php");    
	// On récupère la derniere date  du dernier enregistrement
	$sql="select max(La_Date) from tbteleinfo";
	echo 'visualisation ligne5 commande seletionne date max-------->.'.$sql.'.';
	echo '<br>';
		$query=mysqli_query($conn,$sql);  
		echo 'visualisation ligne8 execute le requete sur la BDD--------->.';
		print_r ($query);
		echo '<br>';
			$list=mysqli_fetch_array($query); 
			echo 'visualisation ligne12 variable list fetch_array-------------->.';
			print_r ($list);
			echo '<br>';
				// On détermine le stop et le start de façon à récupérer dans la prochaine requête que les données des dernières xx heures
				$stop=$list[0];
				$start= '2014-10-27';
				echo 'visualisation ligne18 variable start------------------------>.'.$start.'.';
				echo '<br>';
				echo 'visualisation ligne17 variable stop------------------------>.'.$stop.'.';
				echo '<br>';
	
ce qui me donne en affichage:

Code : Tout sélectionner

visualisation ligne5 commande seletionne date max-------->.select max(La_Date) from tbteleinfo.
visualisation ligne8 execute le requete sur la BDD--------->.mysqli_result Object ( [current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 1 [type] => 0 )
visualisation ligne12 variable list fetch_array-------------->.Array ( [0] => 2014-12-29 [max(La_Date)] => 2014-12-29 )
visualisation ligne18 variable start------------------------>.2014-10-27.
visualisation ligne17 variable stop------------------------>.2014-12-29.
ensuite je fait la requête et récupere mes données (comprend pas pourquoi( ['WATT']*1;) multiplié par 1. c'est bien $i qui s’incrémente?

Code : Tout sélectionner

$query = "SELECT WATT, IINST, La_Date FROM `tbteleinfo` WHERE La_Date BETWEEN '2014-12-18' AND '2014-12-19'" ;  
 
 if ($result = mysqli_query($conn,$query)) {

    /* Tableau */
	$i=0;
    while ($row = mysqli_fetch_assoc($result)) {
        printf ("%s %s(%s)\n",$row["La_Date"], $row["WATT"], $row["IINST"]);
		$WATT[$i]=$row['WATT']*1;
        $IINST[$i]=$row['IINST']*1;
		$La_Date[$i]=$row['La_Date']*1;
		$i++;
    }
ce qui me donne en affichage mon champ date, watt et intensité

Code : Tout sélectionner

2014-12-18 420(3)
2014-12-18 480(3)
2014-12-18 480(2)
2014-12-18 420(2)
2014-12-18 480(2)
2014-12-18 480(2)
2014-12-18 1560(11)
2014-12-18 2520(3)
2014-12-18 540(2)
jusqu'a
2014-12-19 240(1)
2014-12-19 240(1)
2014-12-19 240(1)
2014-12-19 240(1)
2014-12-19 180(1)
2014-12-19 240(1)
2014-12-19 240(1)
j'ai bien ma date, ma conso et mon intensité
Le soucis c'est que ma requête va du 18 au 19 décembre
du coup quand j'encode en Json, ma ligne de data Watt est bonne, intensité également, mais j'ai toujours 2014pour l'axe X
et comme je choisit ce format:

Code : Tout sélectionner

xAxis: {
                type: 'datetime', 
ben j'ai pas de graph.
dans un premier temps j'avais espéré que Hicharts ferait le graph, puisque il a le jour 18 et le jour 19. >Mais mon encodage ne prend que l'année, donc il n'a pas d'info sur l'axe X ça doit être pour ça que ma page reste désespérément blanche.
pour information: Dans ma BDD j'ai timstamp date et datetime comme champs.
si j’essaie de travailler en date c'est que j'ai enfin réussit réalisé un formulaire ou je récupère en dur les dates/datetimes du datpicker.
je pensais que je n'avais plus qu'a envoyer dans ma requête les deux dates saisies.
Voyez vous une solution facilement compréhensible pour un archi débutant ( avec les formats dates ou datetimes)

pour le script je n'ai rien inventé:
La_date est mon champ date de ma BDD

Code : Tout sélectionner

<script type="text/javascript"> 
eval(<?php echo  "'var La_Date =  ".json_encode($La_Date)."'" ?>);
eval(<?php echo  "'var WATT =  ".json_encode($WATT)."'" ?>);
eval(<?php echo  "'var IINST =  ".json_encode($IINST)."'" ?>);
</script>
la capture çi dessous prise dans la fenêtre code source du navigateur monte bien mon souci sur l'axe des dates

Perdu le Alain :oops:
Merci
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
station Orégon WMR 200
logiciel Xnet version 2012-03-17a et Graphweather V 3.0.15
windows XP SP3 sur vieux portable destiné a la météo
Windows7 sur mon portable, permet de tester les applications qui ne veulent plus de XP
http://mapetitemeteo.esy.es/

alain
Messages : 101
Enregistré le : 21 nov. 2014, 20:23

Re: perdu avec les formats date/datetime

Message par alain » 29 déc. 2014, 04:29

re
au fait j'ai bien essayer DATEHEURE.
en mode debug j'ai bien date heure minutes secondes.
mais en Json désespérément DATE :mrgreen:
bonsoir Alain
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
station Orégon WMR 200
logiciel Xnet version 2012-03-17a et Graphweather V 3.0.15
windows XP SP3 sur vieux portable destiné a la météo
Windows7 sur mon portable, permet de tester les applications qui ne veulent plus de XP
http://mapetitemeteo.esy.es/

Avatar du membre
Météo Villarzel
Administrateur du site
Messages : 524
Enregistré le : 06 févr. 2014, 09:48
Contact :

Re: perdu avec les formats date/datetime

Message par Météo Villarzel » 29 déc. 2014, 15:32

Salut Alain,
J'ai aussi le même problème avec un BDD, celle créée par logtemp et qui n'ai qu'une date formatée en datetime 2014-11-25 23:21:28

As-tu essayé sur l'axe x de spécifier le format de ta date

http://api.highcharts.com/highcharts#xA ... belFormats

A+
Station Vantage Pro2+ avec station agricole - Weatherlink - GraphWeather 3.0.15b - Cumulus 1.9.4 - Windows 7/64
Graphique dynamique à partir d'une bd MySql - VP2SQL

Image

alain
Messages : 101
Enregistré le : 21 nov. 2014, 20:23

Re: perdu avec les formats date/datetime

Message par alain » 29 déc. 2014, 22:20

Bonsoir
merci pour la piste
le graphique s'affiche, mais je n'ai rien sur l'axe X
j'ai trouvé des truc intéressant:

Code : Tout sélectionner

xAxis: {
                type: 'datetime', 
		showFirstLabel:true,
                showLastLabel:true,
		tickInterval: 3600 * 1000,
				
            },

Code : Tout sélectionner

series: [ 
				{
				pointInterval: 3600 * 1000,
                              pointStart: Date.UTC(2014, 11, 18, 0, 0, 0, 0),
                             name: 'Puissance',
			    zIndex: 1,
                           color: '#ff0000',
			 dashStyle: 'Solid',
			 lineWidth: 1,
                       data: comArr(WATT)  
                },

Mais ça marche pas!

j'ai bien essayer:

Code : Tout sélectionner

 xAxis: {
      type: 'datetime',
      showFirstLabel:true,
      showLastLabel:true,
      min:Date.UTC (2014,11,18,0,0,0,0),
      //minRange: 24 * 3600 * 1000,
      dateTimeLabelFormats: {
        hour: '%H:%M',
      }
je ne comprend pas cette fonction!
elle donne l’échelle de temps axe X?

Code : Tout sélectionner

//Ensuite on défini la fonction (temps) pour l'axe x  
    function comArr(unitsArray) { 
        var outarr = [];
        for (var i = 0; i < date_heure.length; i++) {
         outarr[i] = [date_heure[i], unitsArray[i]];
		 
        }
      return outarr;
Bon je cherche, je suis a la retraite :lol: :lol: :lol:
mais je sent que je vais revenir au timstamp :mrgreen:
Mais bon j'avais réussit mon formulaire qui m'envoyait datetime dans ma variable.
Sinon je convertirais datetime en temps unix,
Bref je galère
Mais comme je ne dois pas etre le seul :roll: ça me console
Bonsoir et merci pour l'astuce
PS avec mon fichier JSON 2014,2014,2014,2014,2014,2014,2014,2014,
je ne peut pas avoir d’échelle de temps?
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
station Orégon WMR 200
logiciel Xnet version 2012-03-17a et Graphweather V 3.0.15
windows XP SP3 sur vieux portable destiné a la météo
Windows7 sur mon portable, permet de tester les applications qui ne veulent plus de XP
http://mapetitemeteo.esy.es/

alain
Messages : 101
Enregistré le : 21 nov. 2014, 20:23

Re: perdu avec les formats date/datetime

Message par alain » 29 déc. 2014, 23:56

re
je viens de trouver une idée:
personne ne m'enpèche de faire une requête sur mes dates, requête issue du datpiker et d'utiliser le temps unix pour l’échelle des X
Tpunix soit dans la BDD soit par la formule que tu m'avais donnée.
en parcourant les forum je crois comprendre que l'encodage des dates ne se fait pas (Json ne sait pas faire!!)
la en convertissant ma date a la volée avec ta formule mon fichier Json se remplit,
il n'y a plus de raison pour que mon graph ne se fasse plus, il faut seulement que je remette d’équerre mon code.
Pour la fonction çi dessus je crois que jais compris: elle sert pour les DATA.
bonsoir

EDIT 01H24

bon ça marche bancale, mais ça marche
merci
( Bancale, parce que j'ai un trou au début de chaque graphe) quand je sélectionne par les datpicker, je verrais demain, c'est pas gagné!
je reste en admiration devant vos graph :o

merci encore
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
station Orégon WMR 200
logiciel Xnet version 2012-03-17a et Graphweather V 3.0.15
windows XP SP3 sur vieux portable destiné a la météo
Windows7 sur mon portable, permet de tester les applications qui ne veulent plus de XP
http://mapetitemeteo.esy.es/

alain
Messages : 101
Enregistré le : 21 nov. 2014, 20:23

Re: perdu avec les formats date/datetime

Message par alain » 31 déc. 2014, 23:14

bonjour
a première vue (je ne sais pas si c'est vraiment dans les normes) mais on peut faire autrement c'est a dire mettre du PHP directement dans Hicharts, je m'explique.
Ça marche pas mal comme ça sur les dates:
je reprends que les lignes modifiées par rapport au tuto, mais c'est facile de se retrouver puisque ces lignes s’insère dans le code tuto, il suffit de regarder la dernière ligne avant la mienne.
C'est conventionnel de faire comme ça? Parce que ça marche, mais.... :mrgreen:
bien entendue ce bout de code est issue de divers tuto trouvé sur le net et adapté
Merci Alain

Code : Tout sélectionner

<!-- Chargement des variables, et paramètres de Highcharts -->
<script type="text/javascript">
$(function () {
        $('#container').highcharts({
            chart: {
                zoomType: 'x',
                spacingRight: 20
            },
            title: {
//Titre du graphique
                text: 'Consommation'
            },
        subtitle: {
//date("d/m/Y - H:i", strtotime($row_date['Date'])) permet la mise en forme de la date:
// Jour / mois / Année - Heure : Minutes
            text: 'Dernier enregistrement: <?php echo date("d/m/Y - H:i", strtotime($row_date['Date'])); ?> <br/>Vous pouvez effectuer un zoom sur le graphique clique gauche souris sur une zone du graphique'
 
        },
            xAxis: {
tickmarkPlacement: 'on',
//Affichage des dates précédemment sélectionnées dans la requete sql
                categories : [<?php do { ?>'<?php echo date("H:i", strtotime($row_date['Date'])); ?>', <?php } while ($row_date = mysql_fetch_assoc($date)); ?>],
labels: {
//Step 2 permet d'afficher qu'une date sur deux
step: 2,
//rotation 90 permet la rotation a 90° des dates
rotation: 90
 
            }
},
            yAxis: {
                title: {
                    text: 'Consommation'
                }
            },
            tooltip: {
                shared: true,
//Ajout d'une unité de mesure lors du survole d'un point du graphique
valueSuffix: ' W'
            },
            legend: {
            enabled: false
            },
            plotOptions: {
                area: {
                    fillColor: {
                        linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1},
                        stops: [
                            [0, Highcharts.getOptions().colors[0]],
                            [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]
                        ]
                    },
                    lineWidth: 1,
                    marker: {
                        enabled: false
                    },
                    shadow: false,
                    states: {
                        hover: {
                            lineWidth: 1
                        }
                    },
                    threshold: null
                }
            },
 
            series: [{
                type: 'area',
                name: 'Consommation',
//Affichage des consommations  sélectionnées dans la requete sql
                data: [<?php do { ?><?php echo $row_conso['Consommation']; ?>,<?php } while ($row_conso = mysql_fetch_assoc($conso)); ?>]
            }]
        });
    });
</script>
station Orégon WMR 200
logiciel Xnet version 2012-03-17a et Graphweather V 3.0.15
windows XP SP3 sur vieux portable destiné a la météo
Windows7 sur mon portable, permet de tester les applications qui ne veulent plus de XP
http://mapetitemeteo.esy.es/

Avatar du membre
jturlier
Administrateur du site
Messages : 393
Enregistré le : 10 déc. 2014, 10:20
Localisation : Sérignan 34410
Contact :

Re: perdu avec les formats date/datetime

Message par jturlier » 31 déc. 2014, 23:31

Bonsoir Alain,
à partir du moment où un code fonctionne, il n'y a pas réellement de normalité. Rien n’empêche de mettre du code php dans du javascript, mais il faut garder en mémoire que quand le JS est passé au client les instructions php sont déjà exécutées et que tu les passes en temps que valeurs grace aux echos, intégrées dans le JS. Pour résumer il faut bien savoir ce qu'on fait ainsi que où et comment les diverses instructions sont exécutées.
Allez plus que 30 minutes et on passe à l'année prochaine.

Jean
Jean

Station :
VP2pro + anémomètre ultrasons et console Vue
Cumulus 1.9.4 + Cumulus2SQL + MySQL

Audio :
FR
PC :
W10 64bits migré
http://meteoserignan.ddns.net
Image

alain
Messages : 101
Enregistré le : 21 nov. 2014, 20:23

Re: perdu avec les formats date/datetime

Message par alain » 01 janv. 2015, 11:11

bonjour
merci pour ces précision.
je suis habitué au visal basic,
- ou l'on peut faire un peu n'importe quoi, même ne pas déclarer de variables, dans ce cas ellent sont de type variant, et l'on passe n’importe quoi dedans, mais c'est gourmand en mémoire.
Perso je déclare toujours mes variables. (option explicit)
Mais le PHP demande beaucoup plus de rigueur dans son écriture
meilleurs vœux a tous
station Orégon WMR 200
logiciel Xnet version 2012-03-17a et Graphweather V 3.0.15
windows XP SP3 sur vieux portable destiné a la météo
Windows7 sur mon portable, permet de tester les applications qui ne veulent plus de XP
http://mapetitemeteo.esy.es/

Avatar du membre
jturlier
Administrateur du site
Messages : 393
Enregistré le : 10 déc. 2014, 10:20
Localisation : Sérignan 34410
Contact :

Re: perdu avec les formats date/datetime

Message par jturlier » 01 janv. 2015, 16:50

Salut Alain,
Chaque langage de programmation a des règles grammaticales qui doivent être respectées, et ce n'est pas parce que le nom d'une instruction est identique dans 2 langages que sa structure est la même)
Par ex en .net, la base des indices est 0 et en mysql 1... etc

je crois 'avoir écrit quelque part :
  • c'est la première utilisation d'une donnée qui permet de la typer. Si tu souhaites changer ce type il faut effectuer une opération dessus
    ex :
    $montexte=" 0123.45" ;
    $montexte=$montexte*1;
    echo $montexte ; //=123.45 numérique

    ou sur du numérique
    $xx=12.34567;
    $xx=substr(((round($xx,2) +1000 ) ,2);
    echo $xx; //= 012.34 string
en fait php est beaucoup moins strict que la plupart des autres langages, il faut juste savoir ce qu'on fait.
D'autre part comme c'est un langage interprété, on peut facilement, grace à des "echo" placés judicieusement suivre son exécution presque en pas à pas.

Jean
Jean

Station :
VP2pro + anémomètre ultrasons et console Vue
Cumulus 1.9.4 + Cumulus2SQL + MySQL

Audio :
FR
PC :
W10 64bits migré
http://meteoserignan.ddns.net
Image

alain
Messages : 101
Enregistré le : 21 nov. 2014, 20:23

Re: perdu avec les formats date/datetime

Message par alain » 01 janv. 2015, 21:25

bonjour a tous, bonjour Jean
on peut facilement, grâce à des "echo" placés judicieusement suivre son exécution presque en pas à pas.
oui j'ai découvert ça, on peut même voir ses tableaux
pour mieux comprendre le tuto Graphique avec hightcharts j'ai repris l'exemple de P.A et j'ai fait cela, c'est très pratique.
Le point avant et après la variable permet de vérifier qu'il n'y a pas d'espace comme cela on peut voir le comportement du programme.
Le echo est bien pratique aussi pour savoir si l'on rentre dans une condition.
Mais n'oublie pas que si je me donne tant de mal avec PHP c'est qu'il parait que le pere noél va etre genereux avec nous en petits utilitaire..... tu voit ce que je veut dire :D :D :D
Sinon le père noël devait pas t'amener une station?

$sql="select max(La_Date) from tbteleinfo";
echo 'visualisation ligne5 commande seletionne date max-------->.'.$sql.'.';
echo '<br>';
$query=mysqli_query($conn,$sql);
echo 'visualisation ligne8 execute le requete sur la BDD--------->.';
print_r ($query);
echo '<br>';

$list=mysqli_fetch_array($query);
echo 'visualisation ligne12 variable list fetch_array-------------->.';
print_r ($list);
echo '<br>';


ce qui donne en affichage la vue ci dessous un petit moyen de debug simple effectivement
visualisation ligne5 commande seletionne date max-------->.select max(La_Date) from tbteleinfo.
visualisation ligne8 execute le requete sur la BDD--------->.mysqli_result Object ( [current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 1 [type] => 0 )
visualisation ligne12 variable list fetch_array-------------->.Array ( [0] => 2014-12-29 [max(La_Date)] => 2014-12-29 )


Encore merci a tous pour le temps que vous prenez, et la patience avec lés débutants, surtout quand comme dans mon cas on pose des questions évidente.... mais débutant......

ps Hors Sujet

au printemps je vais écrire en VB une toute petite routine.
Sont but:Rattraper ma bêtise de débutant
(comme tous les débutant, j'ai reçut ma station et pour avoir un bonne résolution j'ai pris un pas de 1 minutes, après sur le forum j'ai vue que c’était pas idéal, mais trop tard! Ensuite j'ai observé le fonctionnement de Xnet, pour le vent ( c'est pour cela que l'on cherche le pas le plus serré a l'achat de la station ) Xnet note chaque relevé ( dans mon cas toute les 14secondes) puis 14 secondes plus tard, lors du relevé qui arrive Xnet compare, et si la rafale est plus petite, Xnet garde la rafale précédente si elle est supérieure il la remplace, donc même avec un pas de 10MN par exemples on est sur que Xnet garde la rafale maxi. d’où effectivement inutile de serrer le pas a une minute)
ma petite routine va:
1-faire une copie du fichier Xnet
2-ouvrir une boite de dialogue demandant le pas d'enregistrement du fichier
3-ouvrir une boite de dialogue demandant le pas voulu
4-lire séquentiellement le fichier et ne recopier que le nombre de ligne voulu dans le nouveau fichier
5- vérifier que la ligne gardés comporte le maxi rafale, sinon remplacer cette ligne par le maxi de la partie enlevée.
a la fin on se retrouve avec 3 fichiers:
le fichier original
le fichier avec le nouveau pas
le fichier de ligne supprimé
jusqu'au point 4 je saurais le faire avec un simple prog batch
pour le point 5 calcul sur des variables en Batch sais pas trop faire.... Donc visual basic.
Après, si par malheur mon fichier CSV et pas trop compatible, il suffit de le lire avec CSVed et de enregistrer a nouveau
station Orégon WMR 200
logiciel Xnet version 2012-03-17a et Graphweather V 3.0.15
windows XP SP3 sur vieux portable destiné a la météo
Windows7 sur mon portable, permet de tester les applications qui ne veulent plus de XP
http://mapetitemeteo.esy.es/

Répondre