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