Page 1 sur 1

Erreur date début

Posté : 27 janv. 2019, 18:13
par JP54
Bonjour,
J'ai fais un graphique sur les heures d'ensoleillement par année, mon start commence le 01-01-2017 (date de mise en service de ma sonde) et sur mon graphique sur l'axe x commence en 2016.
https://www.meteo-jarny.com/DY-graphiqu ... -annee.php

La partie php

Code : Tout sélectionner

<?php
require("mysqli_connect.php");                     
$sql="select max(tstamp) from ensol";
$query=mysqli_query($conn,$sql);                  
$list=mysqli_fetch_array($query);     

$stop=$list[0];
$start=mktime(0,0,0,1,1,date("2017"));
$stop-(86400*365);

$sql = "SELECT tstamp, SUM(ensolreeldec), substr(recdateTZ,1,4) AS Annee FROM `ensol` WHERE tstamp > '$start' GROUP BY Annee"; 

$query=mysqli_query($conn,$sql);  
$i=0;
while ($list = mysqli_fetch_assoc($query)) {     
if (date("I",time())==0) {
    $time[$i]=($list['tstamp']+3600)*1000;
    }
else 
    {
    $time[$i]=($list['tstamp']+7200)*1000;
    }

    $ensolreeldec[$i]=$list['SUM(ensolreeldec)']*1;

    if (date("m",$time[$i]/1000)==1) {$NormaleMensuelle[$i]=1640.3;}

    $Ecart[$i]=$ensolreeldec[$i]-$NormaleMensuelle[$i];

    $i++;
    }    
    ?>
Le code de xAxis

Code : Tout sélectionner

          
          xAxis: {
              type: 'datetime',
              labels: {
	          step: 2,
                  format: '{value:%Y}',
                  align: 'center',		
                      }
                  },
J'ai jouer avec le "step" sur xAxis, ça ne change rien, j'ai réussie à ce que 2016 ne soit plus sur l'axe x en mettant le start au 09-01-2017 :?: :?:
Quelqu'un aurait une idée?

Re: Erreur date début

Posté : 03 févr. 2019, 17:12
par PascalWMR
Salut Pascal

Ouhaa ouhaa ouhaa

Normal qu'il t’arrive cela.

Dans ta requête SQL, comme c'est un graphique annuel, on se fou du start et du stop. Y en a pas besoin.

Comme tes enregistrements commence le 1/1/2017, et qu'on le sait, pas besoin de faire des calculs de mktime.
Dans le requête SQL, on determine l'année en dur.
Ta requête devient

Code : Tout sélectionner

$sql = "SELECT tstamp, SUM(ensolreeldec), substr(recdateTZ,1,4) AS Annee FROM ensol WHERE recdateTZ >= '201701010000' GROUP BY Annee"; 
if (date("m",$time[$i]/1000)==1) {$NormaleMensuelle[$i]=1640.3;} Je vois pas bien à quoi ça sert.
Comme c'est un graphique annuel, autant dire
$NormaleMensuelle[$i]=1640.3;
tout simplement

Ensuite pour xAxis, tu supprime step et tu met startOnTick: 'true', comme ci-dessous

Code : Tout sélectionner

xAxis: {
	type: 'datetime',
	startOnTick: 'true',
	labels: {
		format: '{value: %Y}',
		align: 'center',
		}
	},
Voila ça fonctionne comme cela chez moi Heures d'ensoleillement annuelles.

Petite différence, c'est que pour l'année en cours, je lui fait faire un petit calcul.
La normale en cours d'année n'est pas la normale annuelle.
Voici mon code

Code : Tout sélectionner

// Creation d'une variable $Aujoudhui qui sert plus bas a déterminer la valeur de la variable $NormaleAnnuelle
$makeAujoudhui= mktime(0, 0, 0, date('m'), 1, date('Y'));
$Aujoudhui=date("YmdHi", $makeAujoudhui);


// Récupération des données groupée par année
$sql = "SELECT SUBSTR(recdateTZ,1,4) AS An, SUM(h_soleil_jour) AS NbHeures,tstamp FROM sundata WHERE recdateTZ >= '201411010000' GROUP BY An";  
//SELECT tstamp, h_soleil_jour FROM sundata
$query = mysqli_query($conn,$sql);                   
$i=0;
while ($list = mysqli_fetch_assoc($query)) {      
if (date("I",time())==0) { 
	$time[$i]=($list['tstamp']+3600)*1000;
	} 
else {
	$time[$i]=($list['tstamp']+7200)*1000;
  } 

$NbHeures[$i]=$list['NbHeures']*1;
	
	// Détermination de la valeur de $NormaleAnnuelle
	// Les normales ci dessous sont celle de la station Météo France de Metz Marly-Frescaty valable pour ma station.
	// Si année de $time[$i] <  année en cours, Normale annuelle égale Normale annuelle totale soit 1659.7 heures pour ma station
	if (date("Y",$time[$i]/1000)== '2014'){$MoyMensuel[$i]=95.4;}
	elseif (date("Y",$time[$i]/1000) < substr($Aujoudhui,0,4)) {$MoyMensuel[$i]=1659.7;}
	// Sinon année de $time[$i] est l'année en cours, alors Normale annuelle est égale au cumul des normales mensuelles calculées en fonction du mois en cours
	else {
		switch (substr($Aujoudhui,4,2)){
			case '01':
				$MoyMensuel[$i]=51.1;
				break;
			case '02':
				$MoyMensuel[$i]=133.8;
				break;
			case '03':
				$MoyMensuel[$i]=259.1;
				break;
			case '04':
				$MoyMensuel[$i]=433.7;
				break;
			case '05':
				$MoyMensuel[$i]=637.9;
				break;
			case '06':
				$MoyMensuel[$i]=852.9;
				break;
			case '07':
				$MoyMensuel[$i]=1089.1;
				break;
			case '08':
				$MoyMensuel[$i]=1305.2;
				break;
			case '09':
				$MoyMensuel[$i]=1465.0;
				break;
			case '10':
				$MoyMensuel[$i]=1564.3;
				break;
			case '11':
				$MoyMensuel[$i]=1618.1;
				break;
			case '12':
				$MoyMensuel[$i]=1659.7;
				break;
			}
	}
// Calcul de l'écart entre les heures d'ensoleillement effectives et la normale annuelle
$Ecart[$i]=$NbHeures[$i]-$MoyMensuel[$i];


$i++;
}
Je lui fait également faire un petit calcul pour l'année 2014 car mes données solaire commence le 01/11/2014

A+
Pascal

Re: Erreur date début

Posté : 03 févr. 2019, 18:35
par JP54
Je fais les modifs demain, j'ai passé une grande partie de l'après midi sur ce graphique sans trouvé la solution, j'ai le cerveau qui fume :roll:
En tout cas merci pour toutes ses infos, ;) je te tiens au courant demain
Pascal

Re: Erreur date début

Posté : 04 févr. 2019, 17:14
par JP54
Je viens d'effectuer les modifications et j'ai toujours le même problème, j'ai l'année 2016 qui apparait sur l'axe x.
https://www.meteo-jarny.com/DY-graphiqu ... -annee.php

Ma partie PHP

Code : Tout sélectionner

<?php
require("mysqli_connect.php");                     
$sql="select max(tstamp) from ensol";
$query=mysqli_query($conn,$sql);                  
$list=mysqli_fetch_array($query);     

$sql = "SELECT tstamp, SUM(ensolreeldec), substr(recdateTZ,1,4) AS Annee FROM ensol WHERE recdateTZ >= '201701010000' GROUP BY Annee"; 
$query=mysqli_query($conn,$sql);  
$i=0;
while ($list = mysqli_fetch_assoc($query)) {     
if (date("I",time())==0) {
    $time[$i]=($list['tstamp']+3600)*1000;
    }
else 
    {
    $time[$i]=($list['tstamp']+7200)*1000;
    }
    $ensolreeldec[$i]=$list['SUM(ensolreeldec)']*1;
    $NormaleMensuelle[$i]=1640.3;
    $Ecart[$i]=$ensolreeldec[$i]-$NormaleMensuelle[$i];
    $i++;
    }    
    ?>
Mon axe X

Code : Tout sélectionner

        xAxis: {
	        type: 'datetime',
	        startOnTick: 'true',
	    labels: {
		    format: '{value: %Y}',
		    align: 'center',
		        }
	        },  

Je ne pense pas m'être trompé. Je ne vois pas du tout ce qui se passe.
Je n'ai pas mis la partie du code avec la normale en cours d'année, je la mettrais quand mon graphique fonctionnera.
Pourtant j'ai un graphique des heures d'ensoleillement par mois et je n'ai pas ce problème de l'année 2016
https://www.meteo-jarny.com/DY-graphiq ... -mois.php

Re: Erreur date début

Posté : 04 févr. 2019, 18:59
par JP54
J'ai regardé dans ma base de données et le recdateTZ est '200701010010'

Image

J'ai fais la modif sur le graphique et ça ne change rien

Re: Erreur date début

Posté : 06 févr. 2019, 05:08
par PascalWMR
Salut Pascal

Vite fait avant que je reparte, ce n'est pas le recdateTZ qui est important, mais le timestamp.

Prend le tstamp de ta base de données et compare le ici http://www.timestamp.pro/.

Je parie que l'on se retrouve le 31/12/2016 à 23h10.

ATTENTION j'en ai parler dans un autre post. Les nouvelles librairies Highcharts ne gère plus les dates comme avant.
c'est ici viewtopic.php?f=9&t=276

A+
Pascal

Re: Erreur date début

Posté : 07 févr. 2019, 16:49
par JP54
Parie presque gagné, tstamp 1483225500 23-12-2016 à 23h05 mais je le savais, et j'ai même supprimé cette ligne et ça ne change rien à mon axe x.
De plus je n'utilise pas la dernière version le librairie Highcharts, j'ai une version plus ancienne.

Re: Erreur date début

Posté : 13 févr. 2019, 18:27
par JP54
J'ai quand même trouvé la solution, je transformé un graphique Highstock en graphique Highcharts, c'est la seule solution que j'ai trouvé pour ne pas avoir 2016 sur l'axe x.
Il me reste à faire la modification pour les normales
https://www.meteo-jarny.com/DY-graphiqu ... -annee.php