54 votes

Comment formater les valeurs de l'échelle de temps de l'axe des x dans Chart.js v2

Je suis capable de formater les infobulles lorsque je survole un point de données sur un graphique linéaire via options.scales.xAxes.time.tooltipFormat mais je n'arrive pas à le faire pour les étiquettes des tics de l'axe x. Mon site data.labels est un tableau d'objets momentanés. Ils s'affichent comme "MMM DD, YYYY" (par exemple, 23 février 2012), mais je veux laisser tomber l'année.

1 votes

96voto

potatopeelings Points 864

Il suffit de définir tous les paramètres de l'unité de temps sélectionnée displayFormat à MMM DD

options: {
  scales: {
    xAxes: [{
      type: 'time',
      time: {
        displayFormats: {
           'millisecond': 'MMM DD',
           'second': 'MMM DD',
           'minute': 'MMM DD',
           'hour': 'MMM DD',
           'day': 'MMM DD',
           'week': 'MMM DD',
           'month': 'MMM DD',
           'quarter': 'MMM DD',
           'year': 'MMM DD',
        }
        ...

Remarquez que j'ai réglé tous les formats d'affichage de l'unité sur MMM DD . Une meilleure méthode, si vous avez le contrôle de la plage de vos données et de la taille du graphique, serait de forcer une unité, comme suit

options: {
  scales: {
    xAxes: [{
      type: 'time',
      time: {
        unit: 'day',
        unitStepSize: 1,
        displayFormats: {
           'day': 'MMM DD'
        }
        ...

Violon - http://jsfiddle.net/prfd1m8q/

2 votes

Je pense que dans votre deuxième extrait de code, le unit et unitStepSize doit être incluse dans le champ time objet. Mise à jour de jsfiddle . J'ai essayé de faire une modification mais elle a été rejetée car elle s'écartait de l'intention originale de votre message...

0 votes

Merci @tchan ! Corrigé.

0 votes

Savez-vous comment traduire la date (mois) dans une autre langue que l'anglais ?

25voto

Moustafa Shama Points 161

selon la page de documentation Chart js section de configuration des coches . vous pouvez formater la valeur de chaque tick en utilisant la fonction de rappel. par exemple, je voulais changer la locale des dates affichées pour qu'elles soient toujours en allemand. dans les parties ticks des options d'axe

ticks: {
    callback: function(value) { 
        return new Date(value).toLocaleDateString('de-DE', {month:'short', year:'numeric'}); 
    },
},

0 votes

Je pense qu'il y a un problème pour IE11 avec cette solution, il affiche toutes les dates comme 'Invalid Date' alors que Chrome et Firefox fonctionnent bien.

0 votes

Edit : Il semble que ce soit le new Date cela ne fonctionnait pas en fait, car je le faisais sur une chaîne telle que Feb 2017 . Et IE ne semble pas en profiter beaucoup.

1voto

Rob Raymond Points 8774

J'ai un cas d'utilisation différent, je veux différents formats basés sur la durée entre le début et la fin des données dans le graphique. J'ai trouvé l'approche la plus simple

    xAxes = {
        type: "time",
        time: {
            displayFormats: {
                hour: "hA"
            }
        },
        display: true,
        ticks: {
            reverse: true
        },
        gridLines: {display: false}
    }
    // if more than two days between start and end of data,  set format to show date,  not hrs
    if ((parseInt(Cookies.get("epoch_max")) - parseInt(Cookies.get("epoch_min"))) > (1000*60*60*24*2)) {
        xAxes.time.displayFormats.hour = "MMM D";
    }

0 votes

Bonjour @Rob Raymond ! Pouvez-vous jeter un coup d'œil à ma question aussi stackoverflow.com/questions/62086503/ . J'ai un problème similaire, mais je n'arrive pas à le résoudre.

0voto

shafeerambatt Points 1

Vous pourriez formater les dates avant de les ajouter à votre tableau. C'est ce que j'ai fait. J'ai utilisé AngularJS

//convertir la date dans un format standard

var dt = new Date(date);

//prendre seulement la date et le mois et les pousser dans votre tableau d'étiquettes

$rootScope.charts.mainChart.labels.push(dt.getDate() + "-" + (dt.getMonth() + 1));

Utilisez ce tableau dans votre présentation graphique

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X