mois avec 30, 31 ou 29 jours

Ce forum est dédié aux discussions qui concernent les graphiques réalisés avec la librairie Highcharts, Une question, un bug ?

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

Avatar du membre
PascalWMR
Messages : 323
Enregistré le : 16 févr. 2014, 09:28
Localisation : CONFLANS EN JARNISY (F54800)
Contact :

Re: mois avec 30, 31 ou 29 jours

Message par PascalWMR » 16 nov. 2014, 18:16

muchistic a écrit :merci beaucoup Pascal, je vais essayer de trouver le format tstamp, et il doit indiquer le début du mois ?
C'est bien ce que je pensait. Çà n'est pas comme cela qu'il faut faire.

Dis nous plutôt exactement ce que tu veux faire.

A+
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Image

muchistic
Messages : 142
Enregistré le : 17 févr. 2014, 20:20
Localisation : Canejan (33)
Contact :

Re: mois avec 30, 31 ou 29 jours

Message par muchistic » 16 nov. 2014, 18:34

je veux faire un graphique qui appelle le mois en cours. ou alors un exemple, si l'on est les 16 novembre (puisque nov compte 30 jours), je veux que mon graph remonte jusqu'au 16 octobre.
https://www.meteo-canejan.fr/

ma config : VP2sql , Weaterlink 6.03 , NOAAtable, minimaxibis (sonde agricole), Windows 10 .

Avatar du membre
PascalWMR
Messages : 323
Enregistré le : 16 févr. 2014, 09:28
Localisation : CONFLANS EN JARNISY (F54800)
Contact :

Re: mois avec 30, 31 ou 29 jours

Message par PascalWMR » 16 nov. 2014, 19:12

muchistic a écrit :je veux faire un graphique qui appelle le mois en cours. ou alors un exemple, si l'on est les 16 novembre (puisque nov compte 30 jours), je veux que mon graph remonte jusqu'au 16 octobre.
Voila voila du code tout fait :geek:

Code : Tout sélectionner

<?php
// appel du script de connexion
require("../Scripts/mysqli_connect.php");                     
// On récupère le timestamp du dernier enregistrement
$sql="select max(tstamp) from data";
$query = mysqli_query($conn,$sql);                  
$list=mysqli_fetch_array($query);     

// 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];
// teste si le mois précédant de la dernière date enregistrée est égal à 01, 03, 05, 07, 08, 10, 12 (mois à 31 jours)
if (((date('m', $stop)-1==01) || (date('m', $stop)-1==03) ||  (date('m', $stop)-1==05)||  (date('m', $stop)-1==07)||  (date('m', $stop)-1==08)||  (date('m', $stop)-1==10) ||  (date('m', $stop)-1==12))) {$nbjm=31;}
// teste si le mois précédant de la dernière date enregistrée est égal à 04, 06, 09, 11 (mois à 30 jours)
elseif (((date('m', $stop)-1==04) || (date('m', $stop)-1==06) ||  (date('m', $stop)-1==09)||  (date('m', $stop)-1==11))) {$nbjm=30;}
// teste si le mois précédant de la dernière date enregistrée est égal à 02, et si l'année est bissextile
elseif (((date('m', $stop)-1==02) && (date('L', $stop)-1==1))) {$nbjm=29;}
// teste si le mois précédant de la dernière date enregistrée est égal à 02, et si l'année n'est pas bissextile
elseif (((date('m', $stop)-1==02) && (date('L', $stop)-1==0))) {$nbjm=28;}

$start=$stop-(86400*$nbjm);


echo date('d m Y H i', $start)

?>
Faut peut être changer le chemin du script de connexion.

J'ai changer un peut le script car si l'on veut afficher les dates comme tu le demande ici
si l'on est les 16 novembre (puisque nov compte 30 jours), je veux que mon graph remonte jusqu'au 16 octobre
il ne faut pas tester le nombre de jours du mois en cours, mais le nombre de jours du mois passé.
ça se fait simplement en ajoutant -1 a ce code date('m', $stop)-1

A+
Pascal
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Image

muchistic
Messages : 142
Enregistré le : 17 févr. 2014, 20:20
Localisation : Canejan (33)
Contact :

Re: mois avec 30, 31 ou 29 jours

Message par muchistic » 16 nov. 2014, 20:00

merci Pascal :) :) j'essai ça de suite et je rectifie l'adresse du fichier de connexion
https://www.meteo-canejan.fr/

ma config : VP2sql , Weaterlink 6.03 , NOAAtable, minimaxibis (sonde agricole), Windows 10 .

muchistic
Messages : 142
Enregistré le : 17 févr. 2014, 20:20
Localisation : Canejan (33)
Contact :

Re: mois avec 30, 31 ou 29 jours

Message par muchistic » 16 nov. 2014, 20:37

bon... j'ai un résultat a cette adresse http://www.meteo-canejan.fr/graphique/t ... e-mois.php mais pas le graphique .

j'ai modifié l'adresse mais est ce qu'il manque pas la variable de la temperature ext : $sql = "SELECT tstamp, outdoortemperature FROM data where tstamp >= '$start' and tstamp <= '$stop' ORDER BY 1";

voici mon code :

Code : Tout sélectionner

<?php
// appel du script de connexion
require("mysql_connect.php");                     
// On récupère le timestamp du dernier enregistrement
$sql="select max(tstamp) from data";
$query = mysql_query($conn,$sql);                  
$list=mysql_fetch_array($query);     

// 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];
// teste si le mois précédant de la dernière date enregistrée est égal à 01, 03, 05, 07, 08, 10, 12 (mois à 31 jours)
if (((date('m', $stop)-1==01) || (date('m', $stop)-1==03) ||  (date('m', $stop)-1==05)||  (date('m', $stop)-1==07)||  (date('m', $stop)-1==08)||  (date('m', $stop)-1==10) ||  (date('m', $stop)-1==12))) {$nbjm=31;}
// teste si le mois précédant de la dernière date enregistrée est égal à 04, 06, 09, 11 (mois à 30 jours)
elseif (((date('m', $stop)-1==04) || (date('m', $stop)-1==06) ||  (date('m', $stop)-1==09)||  (date('m', $stop)-1==11))) {$nbjm=30;}
// teste si le mois précédant de la dernière date enregistrée est égal à 02, et si l'année est bissextile
elseif (((date('m', $stop)-1==02) && (date('L', $stop)-1==1))) {$nbjm=29;}
// teste si le mois précédant de la dernière date enregistrée est égal à 02, et si l'année n'est pas bissextile
elseif (((date('m', $stop)-1==02) && (date('L', $stop)-1==0))) {$nbjm=28;}

$start=$stop-(86400*$nbjm);


echo date('d m Y H i', $start)

?>

<script type="text/javascript"> 
eval(<?php echo  "'var dTime =  ".json_encode($dtime)."'" ?>);
eval(<?php echo  "'var outdoortemperature =  ".json_encode($outdoortemperature)."'" ?>);
eval(<?php echo  "'var debut =  ".json_encode($debut)."'" ?>);
eval(<?php echo  "'var minuit =  ".json_encode($minuit)."'" ?>);
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<META NAME="SUBJECT" CONTENT="Graphique Vantage Pro Davis">
<META NAME="DESCRIPTION" CONTENT="graphique dynamique">
<META NAME="KEYWORDS" CONTENT=" météo, pluie, vent, température, temperature, station, Vantage, Davis, Pro, Davis Vantage Pro,pression, UV, soleil,">
<META NAME="REVISIT-AFTER" CONTENT="5 DAYS">
<meta http-equiv="X-UA-Compatible" content="IE=9; IE=9" >
<META NAME="LANGUAGE" CONTENT="FR">
<meta http-equiv="content-type" content="text/html; charset=utf-8"> 
<title>Meteo Canejan / Graphique dynamique température et point de rosée sur 24h
heures</title>
<meta http-equiv="refresh" content="300">
      
     <!-- 1. Add these JavaScript inclusions in the head of your page -->
<script type="text/javascript" src="jquery/jquery.min.js"></script>           
<script type="text/javascript" src="highcharts/js/highcharts.js"></script> 
<script type="text/javascript" src="highcharts/js/themes/default.js"></script>
<script type="text/javascript" src="highcharts/js/modules/exporting.js"></script>
<script type="text/javascript" src="jquery/overlib.js"></script>
<script type="text/javascript" src="jquery/overlib_fade.js"></script>    

<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet"/>
      <style type ='text/css'>
      .style1 {
	color: #0000FF;
}
      </style>      
   
      <!-- 2. Add the JavaScript to initialize the chart on document ready -->
<script type="text/javascript"> 


	      function comArr(unitsArray) { 
        var outarr = [];
        for (var i = 0; i < dTime.length; i++) {
         outarr[i] = [dTime[i], unitsArray[i]];
        }
      return outarr;
    } 
 var conf_heure =
{
days: {'Sun': 'Dimanche','Mon': 'Lundi','Tue': 'Mardi','Wed': 'Mercredi','Thu': 'Jeudi','Fri': 'Vendredi','Sat': 'Samedi'},
mois: {'01': 'Janvier','02': 'Février','03': 'Mars','04': 'Avril','05': 'Mai','06': 'Juin','07': 'Juillet','08': 'Août','09': 'Septembre','10': 'Octobre','11': 'Novembre','12': 'Décembre'},
}       
$(function () {
    var chart;        
         $(document).ready(function() { 
var highchartsOptions = Highcharts.setOptions(Highcharts.theme);		 
         Highcharts.setOptions({
        lang: {
            months: ["Janvier "," Février "," Mars "," Avril "," Mai "," Juin "," Juillet "," Août "," Septembre "," Octobre "," Novembre "," Décembre"],
            weekdays: ["Dim "," Lun "," Mar "," Mer "," Jeu "," Ven "," Sam"],
            resetZoom: 'Reset zoom',
            resetZoomTitle: 'Reset zoom à 1:1',
            downloadPNG: "Télécharger au format PNG image",
            downloadJPEG: "Télécharger au format JPEG image",
            downloadPDF: "Télécharger au format PDF document",
            downloadSVG: "Télécharger au format SVG vector image",
            exportButtonTitle: "Exporter image ou document",
            printChart: "Imprimer le graphique",
            loading: "Laden..."
        }
      });

        chart = new Highcharts.Chart({
            chart: {
		        renderTo: 'container',
				zoomType: 'x',
				 alignTicks: false,
				 type: 'spline',
				 marginRight: 30,
				 marginBottom: 50,
				 plotBorderColor: '#000000',
				 plotBorderWidth: 1,
				 borderColor: '#000000',
				 borderWidth: 1,
				 plotBackgroundColor: '#F7F8E0',
				 backgroundColor: '#67C9F1',
				 animation: {
                duration: 5
            }
		    },
		    legend: {
		    enabled: true,
	    	align: 'right',
	    	layout: 'horizontal',
	    	verticalAlign: 'top',
	    	y: -5,
			x: -600,
	    	backgroundColor: '#F7F8E0',
	    },

            title: {
                text: 'Temperature sous abris des dernieres 24 heures',
                x: -20 //center
            },
            subtitle: {
                text: '© Meteo Canejan',
                x: -20
            },
			credits: {
            text: 'Météo Canéjan',
            href: 'http://www.meteo-canejan.php',
            style: {
	cursor: 'pointer',
	color: '#666666',
	fontSize: '12px'}
            
			},
		            xAxis: {
                type: "datetime",            
				dateTimeLabelFormats: {day: "%H:%M", hour: "%H:%M"},
                //tickInterval: 7200*1000,
                labels: {rotation: 0, align: 'right', style:{font: '', color: '#000000'} },
                title: false, 								
				plotLines: [{
				value: minuit,
				dashStyle: 'longdashdot',
				width: 1,
                color: '#000000',
				label: {
	    			text: 'Minuit',
	    			align: 'right',
					style:{font: 'bold 10px sans-serif', color: '#000000'},
					rotation: 0,
	    			y: 20,
	    			x: 0-2,

	    		}
            }],
        
		
						
            },

            yAxis: {
            minorGridLineColor: '#C5EEFA',
                minorTickInterval: 'auto',
                labels: {rotation: 0, align: 'right', style:{font: '', color: '#000000'} },
                title: {
                    text: 'Temperature (°C)'	
                },
                
                plotLines: [{
                    value: 0,
                    width: 1,
                    color: '#FF0000'
                }]
            },
	    tooltip: {
				crosshairs:[true],
				borderColor: '#4b85b7',
				shared: true,
				backgroundColor: '#edf1c8',
				formatter: function() {
                var s = '<b>'+ Highcharts.dateFormat('%e %B a %H:%M', this.x) +'</b>';
                $.each(this.points, function(i, point) {
					var unit = {
                    'Temperature': ' °C',
					}[this.point.series.name];
				    s = s + '<br>' + '<span style="color:'+ point.series.color +'">' + point.series.name + '</span> : '  
+Highcharts.numberFormat(point.y,1,","," ")
                       + unit;
                });
                return s;
            },
            },
		
	    plotOptions: {
				series: {
				  marker: {
						enabled: false
					},animation: {
                duration: 9000
                }
				}
			},
            series: [ 
				{
                name: 'Temperature',
                zIndex: 1,
                color: '#ff0000',
                data: comArr(outdoortemperature)  
                },
				
              ]}, function(chart) {
              chart.renderer.image('http://www.meteo-canejan.fr/graphique/blason1.png', 10, 3, 43, 50)
            .add();
                 });
      });
    });
   </script>
   </head>
   <body>
   
      <div id="container" style="width: 600px; height: 400px; margin: 0 auto"></div>
      
   </body>
</html>
https://www.meteo-canejan.fr/

ma config : VP2sql , Weaterlink 6.03 , NOAAtable, minimaxibis (sonde agricole), Windows 10 .

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

Re: mois avec 30, 31 ou 29 jours

Message par Météo Villarzel » 16 nov. 2014, 20:43

Salut,

Pascal t'as donné la fonction pour déterminer le start/stop, évitement après tu dois appeler les valeurs que tu veux tracer comme pour tes autres graphiques.

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

muchistic
Messages : 142
Enregistré le : 17 févr. 2014, 20:20
Localisation : Canejan (33)
Contact :

Re: mois avec 30, 31 ou 29 jours

Message par muchistic » 16 nov. 2014, 20:49

ok, merci Pierre André :)

merci beaucoup Pascal pour ton aide, j’arrête pour aujourd'hui.


a+
dominique
https://www.meteo-canejan.fr/

ma config : VP2sql , Weaterlink 6.03 , NOAAtable, minimaxibis (sonde agricole), Windows 10 .

courtil
Messages : 54
Enregistré le : 25 mai 2014, 14:31
Localisation : Pas de Calais - France
Contact :

Re: mois avec 30, 31 ou 29 jours

Message par courtil » 19 nov. 2014, 17:04

Bonjour à tous,

j'ai trouvé très "alléchant" le script de Pascal alors je me suis permis d'en prendre une copie !!!

Mais problème chez moi dans l'utilisation .....

Code : Tout sélectionner

<?php
error_reporting( E_ALL );
// appel du script de connexion
require("mysqli_connect.php");                     
// On récupère le timestamp du dernier enregistrement
$sql="select max(tstamp) from data";
$query = mysqli_query($conn,$sql);               
$list=mysqli_fetch_array($query);     

// 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];
// teste si le mois précédant de la dernière date enregistrée est égal à 01, 03, 05, 07, 08, 10, 12 (mois à 31 jours)
if (((date('m', $stop)-1==01) || (date('m', $stop)-1==03) ||  (date('m', $stop)-1==05)||  (date('m', $stop)-1==07)||  (date('m', $stop)-1==08)||  (date('m', $stop)-1==10) ||  (date('m', $stop)-1==12))) {$nbjm=31;}
// teste si le mois précédant de la dernière date enregistrée est égal à 04, 06, 09, 11 (mois à 30 jours)
elseif (((date('m', $stop)-1==04) || (date('m', $stop)-1==06) ||  (date('m', $stop)-1==09)||  (date('m', $stop)-1==11))) {$nbjm=30;}
// teste si le mois précédant de la dernière date enregistrée est égal à 02, et si l'année est bissextile
elseif (((date('m', $stop)-1==02) && (date('L', $stop)-1==1))) {$nbjm=29;}
// teste si le mois précédant de la dernière date enregistrée est égal à 02, et si l'année n'est pas bissextile
elseif (((date('m', $stop)-1==02) && (date('L', $stop)-1==0))) {$nbjm=28;}

$start=$stop-(86400*$nbjm);


echo date('d m Y H i', $start)

// Récupération des données sur les dernières 48 heures avec un tri ascendant sur le timestamp
$sql = "SELECT tstamp, outdoortemperature,dewpoint FROM data where tstamp >= '$start' and  tstamp <= '$stop' ORDER BY 1";  
$query=mysqli_query($conn,$sql);                   
$i=0;
while ($list = mysqli_fetch_assoc($query)) {      
if (date("I",time())==0) { 
	$time[$i]=($list['tstamp'])*1000;
	} 
else {
	$time[$i]=($list['tstamp']+7200)*1000;
  } 

$outdoortemperature[$i]=$list['outdoortemperature']*1;	
$dewpoint[$i]=$list['dewpoint']*1;
$i++;
}
	
  ?>
Le lancement me donne un " parse error" , je n'arrive pas à détecter l'erreur de syntaxe ...

Je fais donc appel à vos lumières.

Merci d'avance et Merci à Pascal pour son script.

Cordialement

Michel
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
OS : Windows 11
Station Météo : Vantage PRO2
Cumulus version 313.3 version 3148
http://meteo621.free.fr/

Répondre