0

これでハイチャートの縦棒グラフを使用しています。アカウントのGoogleアナリティクスデータから取得した日付形式でx軸を表示したいのですが、x軸に日付を表​​示したいのですが、形式iではありませんフォーマットされた方法でそれをしたい。「20151001」のようになり、「2015 年 1 月 10 日」のようにしたい 私のデータは Google 分析アカウントから来ているので、ハイチャート データを使用することはできません これが私のコードです

日付を取得するPHPコード

     $matrics='ga:sessions,ga:pageviews';
     $results_top_pages = $analytics->data_ga->get(
    'ga:109200082',
     date('Y-m-d',strtotime('-6 days')),
     date('Y-m-d',strtotime('now')),
     $matrics,
      array(

        'dimensions' => 'ga:date',
       // 'sort' => '-ga:pageviews', for acsending and decending page view sorting
    'filters'=>'ga:browser%3D~%5E'.$browser.'',
        'max-results' => 50
     ));

  if(is_array($results_top_pages->getRows())){
      echo '<ol>';
      foreach($results_top_pages->getRows() as $top_page){
        echo '<li>';
        echo $top_page[0];
        echo ' - '.$top_page[1].' ';
        echo ' - '.$top_page[2].' ';
        $data[]=$top_page[2];
        $date[]=$top_page[0];
        echo '</li>';
        }
         echo '</ol>';
     }

$date の var_dump によって、次の形式で日付を取得します。

    array(7) {
   [0]=>
   string(8) "20150930"
   [1]=>
   string(8) "20151001"
   [2]=>
   string(8) "20151002"
   [3]=>
   string(8) "20151003"
   [4]=>
   string(8) "20151004"
   [5]=>
    string(8) "20151005"
   [6]=>
   string(8) "20151006"
   }

ここから編集されたコード

::

    This is js code for highchart:

       $data[]=$top_page[2];
      $date[]=date('d-m-y',strtotime($top_page[0]));

       // echo '</li>';
         }
          echo '</ol>';
      }
      var_dump($date[0]);
       $datefirst= date('U', strtotime($date[0])) * 1000;

     ?>

    <script>

     $(function () {

        $('#container').highcharts({
         //alert("call");

     chart: {
         type: 'column'
     },
     title: {
        text: 'Weekly Traffic'
     },
     subtitle: {
         //text: 'Source: WorldClimate.com'
      },
      xAxis: {

        categories: [<?php echo join($date,','); ?>],
        max:6
       },
      yAxis: {
            title: {
            text: 'Views'
        }
      }, 
       plotOptions: {
        line: {
            dataLabels: {
                enabled: true,
            connectNulls: false
             },
             enableMouseTracking: false
           }
       },
       series: [{
       pointStart: '<?php echo $datefirst; ?>',
        pointInterval: 86400000, //one day
        pointRange: 86400000, //one day
        name: '<?php echo $browser; ?>',
        data: [<?php echo join($data, ',') ?>],
        //pointStart: Date.UTC(2015, 0, 1),
        //  pointInterval: 24 * 3600 * 1000
       },

       ]
        });
        });
       </script>
      <div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
4

1 に答える 1

1

わかりましたので、あなたの例から作業して、日付を適切にフォーマットするだけです。

このようなもの:

foreach($results_top_pages->getRows() as $top_page){
    echo '<li>';
    echo $top_page[0];
    echo ' - '.$top_page[1].' ';
    echo ' - '.$top_page[2].' ';
    $data[]=date('d-m-Y', strtotime($top_page[2])); //add the date function
    $date[]=date('d-m-Y', strtotime($top_page[0])); //add the date function 
    echo '</li>';
    }
     echo '</ol>';
 }

datetime時系列データを表示しているときにいつでもお勧めする x 軸タイプを使用する場合は、次のようにミリ秒のエポック時間を使用するように形式を変更するだけです。

date('U', strtotime($top_page[2])) * 1000

ただし、カテゴリの配列を作成する代わりに、その値をデータの x 値として設定します。

または、データが常に毎日の値になる場合は、pointStartプロパティを開始時刻として設定し、pointIntervalプロパティを 1 日 (86400000 ミリ秒)として設定できます。

{{編集 - - - - -

最後の方法の例:

以下を提供します。

  1. エポック形式の開始日時スタンプ
  2. ポイント間の間隔 (つまり、1 日 - ミリ秒単位)
  3. データ ポイントの配列、間隔 (日) ごとに 1 つのデータ ポイント

残りはチャートが行います。

{{コメントの編集:

そのため、pointStart プロパティと pointInterval プロパティを、2 つの場所のいずれかに配置できます。plotOptions またはシリーズ プロパティに直接配置できます。pointRange は必ずしも必要ではありませんが、列/バーの潜在的な間隔の問題を修正するため、通常は良い考えです。

したがって、あなたの場合、これを取ります:

series: [{
    name: '<?php echo $browser; ?>',
    data: [<?php echo join($data, ',') ?>]
},

そこにプロパティを追加します。

series: [{
    pointStart: __your_start_date__,
    pointInterval: 86400000, //one day
    pointRange: 86400000, //one day
    name: '<?php echo $browser; ?>',
    data: [<?php echo join($data, ',') ?>]
},

データ ソースからその開始日を取得し、ミリ秒単位のエポック時間としてフォーマットする必要があります (上記の例を参照)。

于 2015-10-07T16:37:14.833 に答える