2012-03-12 27 views
8

Tóm tắtBiểu đồ của Google: chuyển ngày mà không sử dụng Ngày()?

Tôi đang cố gắng tạo biểu đồ đường trong Biểu đồ của Google có ngày làm trục X. Tôi có tất cả được sắp xếp nhưng yêu cầu phải vượt qua các ngày làm đối tượng Date, tức là new Date(2005, 3, 13). Có cách nào tôi có thể vượt qua nó như là một dấu thời gian Unix hoặc có lẽ một chuỗi để thay thế?

Xem chi tiết

Vì vậy, tôi có một loạt các dữ liệu trong PHP mà tôi muốn vẽ đồ thị. Tôi lấy dữ liệu và sắp xếp nó thành một mảng trong định dạng đó sẽ tạo ra định dạng JSON đúng khi chạy qua json_encode(), mỗi the Google data docs:

$graph_data = array(
    'cols' => array(
     array(
      'id' => 'date', 
      'label' => 'Date', 
      'type' => 'datetime', 
     ), 
     array(
      'id' => 'odometer', 
      'label' => 'Miles', 
      'type' => 'number', 
     ), 
    ), 
    'rows' => array(
     array(
      'c' => array(
       array('v' => 1331479502), 
       array('v' => 56872), 
      ), 
     ), 
     array(
      'c' => array(
       array('v' => 1331375984), 
       array('v' => 55324), 
      ), 
     ), 
     array(
      'c' => array(
       array('v' => 1328966460), 
       array('v' => 54244), 
      ), 
     ), 
    ), 
); 

{"cols":[{"id":"date","label":"Date","type":"datetime"},{"id":"odometer","label":"Miles","type":"number"}],"rows":[{"c":[{"v":1331479502},{"v":56872}]},{"c":[{"v":1331375984},{"v":55324}]},{"c":[{"v":1328966460},{"v":54244}]}]}

Vì vậy, tôi có việc tạo ra JSON xuống nhưng API muốn ngày được chuyển thành đối tượng Date và không phải là số (hoặc chuỗi). Nó ném một lỗi ngay bây giờ nhưng nếu tôi thay đổi nó từ datetime thành number, nó đồ thị hoàn hảo vì vậy tôi biết định dạng JSON của tôi là chính xác.

Có bất kỳ điều gì tôi có thể làm để API chấp nhận dấu thời gian Unix hay có lẽ là một chuỗi sắp xếp?

Khi tôi đánh máy này, tôi nhận ra rằng có lẽ tôi có thể sử dụng Javascript để đi bộ đối tượng JSON và thay thế dấu thời gian bằng các đối tượng Date, nhưng sẽ tốt hơn nếu tôi không phải thực hiện bất kỳ thao tác dữ liệu nào Javascript.

EDIT

tôi có một phần của con đường đó bằng cách thiết lập type để number và đi qua ngày như thế này:

 array(
      'c' => array(
       array('v' => 1331479502, 'f' => 'March 11th, 2012'), 
       array('v' => 56872), 
      ), 
     ), 

Điều đó làm cho giá trị f hiển thị trong tooltip (yay!) nhưng giá trị v vẫn được sử dụng cho các nhãn trục. Hmm.

EDIT # 2

Hình như có thể có một số tiềm năng trong việc sử dụng DataView để biến đổi một timestamp number vào một ngày nhưng tôi đã không figured it out được nêu ra.

Trả lời

8

Tôi đã kết thúc chỉ cần đi bộ mảng JSON và thay thế dấu thời gian bằng các đối tượng Date. Nó dễ hơn tôi mong đợi:

for (var i = 0; i < json.rows.length; i++) { 
    json.rows[i].c[0].v = new Date(json.rows[i].c[0].v * 1000); 
} 
+0

Bạn đã làm vòng lặp này ở đâu? Cảm ơn! – Moozy

+1

@Moozy: Trong Javascript để xử lý trước dữ liệu. Bạn có thể xem bản trình diễn trong nguồn http://www.viper007bond.com/about/my-cars/. Tôi cũng đã nhân đôi nó ở đây như một bản sao lưu trong trường hợp trang web của tôi thay đổi trong tương lai: http://pastebin.com/xsQm8qZT – Viper007Bond

0

Tôi đã sử dụng chuỗi thay vì loại ngày khi được hiển thị Ngày trên trục x. Nó cho phép tôi tùy chỉnh hiển thị DateTime ở phía máy chủ bằng cách định dạng nó như một chuỗi và cũng không cần các thủ thuật như tạo đối tượng ngày từ một số chuỗi hoặc một giá trị số trong javascript.

+4

Cảm ơn nhưng vấn đề với việc sử dụng 'chuỗi' là làm cho [rời rạc] (http://code.google.com/apis/chart/interactive/ docs/customizing_axes.html # Discrete_vs_Continuous) trục thay vì trục liên tục, tức là các điểm dữ liệu được giãn cách đều nhau thay vì được trải ra dựa trên giá trị thực tế. – Viper007Bond

Các vấn đề liên quan