2013-07-25 3 views
2

Comment puis-je montrer le numéro de la semaine pour la date dans Highstock (pas Highcharts!)?Highstock - afficher le numéro de la semaine

My SQL ressemble à ceci

select unix_timestamp(date)*1000 week 
(....) 
group by yearweek(date,3) 

Mon JS

$(function() { 
    $.getJSON('json_chart.php', function(data) { 

     // Create the chart 
     $('#container').highcharts('StockChart', { 


      rangeSelector : { 
       selected : 2 
      }, 

      title : { 
       text : 'Wyniki' 
      }, 
      xAxis: { 
       type: 'datetime', 
       dateTimeLabelFormats: { 
        day: '%e' 
       } 
      }, 
      yAxis: [{ 
       offset: 40, 
       title: { 
        text: 'Ilośc' 
       }, 
       lineWidth: 2 
      }, { 
       title: { 
        text: 'Efek' 
       }, 
       opposite: true, 
      }], 

      series : [{ 
       name : 'Ode', 
       data : data.ode, 
       type : 'column', 
       yAxis: 0 
      },{ 
       name : 'Sku', 
       data : data.sku, 
       marker : { 
        enabled : true, 
        radius : 3 
       }, 
       yAxis: 1, 
       shadow : true 
      },{ 
       name : 'TK', 
       data : data.tpk, 
       marker : { 
        enabled : true, 
        radius : 3 
       }, 
       yAxis: 0, 
       shadow : true 
      }] 
     }); 
    }); 
}); 

il ressemble actuellement à ceci:

enter image description here

Mais je veux ressembler à ceci:

enter image description here

Répondre

7

Vous pouvez l'ajouter à l'aide dateFormats, par exemple: http://jsfiddle.net/EkAnm/

Highcharts.dateFormats = { 
    W: function (timestamp) { 
     var date = new Date(timestamp), 
      day = date.getUTCDay() == 0 ? 7 : date.getUTCDay(), 
      dayNumber; 
     date.setDate(date.getUTCDate() + 4 - day); 
     dayNumber = Math.floor((date.getTime() - new Date(date.getUTCFullYear(), 0, 1, -6))/86400000); 
     return 1 + Math.floor(dayNumber/7); 

    } 
} 

, utilisez-le ou format ou dateFormat():

xAxis: { 
     tickInterval: 7 * 24 * 36e5, // one week 
     labels: { 
      format: '{value:Week %W/%Y}' 
     } 
    }, 
+0

Merci Pawel, fonctionne parfaitement! – breq

+0

Merci, ça a marché comme un charme. :) – anurag619

1

Pour @ réponse de Paweł Fus, je savoir que lorsque la date est 01/01/2012, c'était le dimanche, le résultat est faux, j'ai donc changé la réponse à:

W: function (timestamp) { 
    var date = new Date(timestamp); 
    var firstDay = new Date(date.getFullYear(), 0, 1); 
    var day = firstDay.getDay() == 0 ? 7 : firstDay.getDay(); 
    var days = Math.floor((date.getTime() - firstDay)/86400000) + day; // day numbers from the first Monday of the year to current date 
    return Math.ceil(days/7); 
}, 
0

Pour maintenir la cohérence des semaines et des années, j'ai tendance à utiliser la norme ISO-8601 pour la numérotation des semaines.

Avec la réponse Pawel et le code js de this blog, j'ai mis en place la solution suivante.

Highcharts.dateFormats = { 
     V: function (timestamp) {  
      var target = new Date(timestamp); 
      var dayNr = (target.getDay() + 6) % 7; 
      target.setDate(target.getDate() - dayNr + 3); 
      var firstThursday = target.valueOf(); 
      target.setMonth(0, 1); 
      if (target.getDay() != 4) { 
       target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7); 
      } 
      return 1 + Math.ceil((firstThursday - target)/604800000); // 604800000 = 7 * 24 * 3600 * 1000 
     } , 
     G: function(timestamp) { 
      var target = new Date(timestamp); 
      target.setDate(target.getDate() - ((target.getDay() + 6) % 7) + 3); 
      return target.getFullYear(); 
     } 
}; 

% V et% G respecte le strftime format utilisé dans le highstock.

+0

Je reçois la semaine 53 pour un horodatage qui est le 4 Janvier 2016 avec ce code ... Mais le code de natee ci-dessous donne la semaine 1. – envision

+0

européenne et nous les numéros de semaine diffèrent. ISO8601 doit avoir la majorité des jours dans la nouvelle année afin d'obtenir la semaine 1. Donc 4 janvier 2016 est dans la semaine 53 de 2015. – woens

Questions connexes