0

For Google Visualization I coded the JSON by hand (Messy I know) I did not think about ''s in NAME_TEAM which has recently come about an issue as my first team name was entered with an apostrophe. I have read this post and tried to implement php json_encode. I am having an issue with the dates. The new Date works fine in the old messy json format, however I get an error Fatal error: Class 'Date' when I try use anything similar for the Json_encode version. The format must be date for the visualization api to understand the values.

foreach ($data as $row) {
$dateArray = explode('-', $row['THE_DATE']);
$year = $dateArray[0];
$month = $dateArray[1] - 1;
$day = $dateArray[2];
$dataArray[] = "[new Date ($year, $month, $day),  {$row['ORANGE']}, {$row['GREEN']}, '{$row['NAME_TEAM']}']";


$itemOutput[] = array(
new Date($year, $month, $day),
$row['ORANGE_SCORE'],
$row['GREEN_SCORE'],
$row['NAME_TEAM'],
);
}
echo "data.addRows(" . json_encode($itemOutput) . ");" ;

Data Table creation

  function drawDashboard() {
         //var data = new google.visualization.DataTable();
          var data = new google.visualization.DataTable(<?php echo json_encode($itemOutput, JSON_NUMERIC_CHECK); ?>);
            data.addColumn('date', 'Date');
            data.addColumn('number', 'ORANGE_SCORE');
            data.addColumn('number', 'GREEN_SCORE');
            data.addColumn('string', 'NAME_TEAM');

       //   data.addRows(<?php echo '[' . implode(',', $dataArray) . ']'; ?>);

ARRAY FORMAT

{"c":[
   {"Date":"new Date(2013, 9, 19)"},
   {"ORANGE_SCORE":14},
   {"GREEN_SCORE":7},
   {"NAME_TEAM":"Trigon"}]
},
3
  • 1
    new Date ($year, $month, $day) is not actually valid JSON. You're constructing literal Javascript source code instead of JSON. You should be encoding the date in JSON as regular string, then post-process it in Javascript to make it a Javascript object. Commented Jul 28, 2014 at 9:42
  • I should store my date as a string e.g."new Date (2013, 8, 14)" how would this alter how I approach the input into the visualization.DataTable' data.addRows(<?php json_encode($itemOutput) ?>); I have added extra code to the initial question, showing where the JSON is integrated Commented Jul 28, 2014 at 10:46
  • Helpful question: stackoverflow.com/questions/3638137/… Commented Jul 28, 2014 at 10:58

2 Answers 2

2

You can't use Date objects in JSON; the only way to transmit dates is via strings, but the DataTable.addRows method does not parse strings into Date objects, so you will have to convert to the full JSON structure to make this work. Here's an example:

$itemOutput = array(
    'cols' => array(
        array('type' => 'date', 'label' => 'Date'),
        array('type' => 'number', 'label' => 'ORANGE_SCORE'),
        array('type' => 'number', 'label' => 'GREEN_SCORE'),
        array('type' => 'string', 'label' => 'NAME_TEAM')
    ),
    'rows' => array()
);

foreach ($data as $row) {
    $dateArray = explode('-', $row['THE_DATE']);
    $year = $dateArray[0];
    $month = $dateArray[1] - 1;
    $day = $dateArray[2];

    $itemOutput['rows'][] = array('c' => array(
        array('v' => "Date($year, $month, $day)"),
        array('v' => $row['ORANGE_SCORE']),
        array('v' => $row['GREEN_SCORE']),
        array('v' => $row['NAME_TEAM'])
    ));
}

Then in javascript:

var data = new google.visualization.DataTable(<?php echo json_encode($itemOutput, JSON_NUMERIC_CHECK); ?>);
Sign up to request clarification or add additional context in comments.

Comments

2

If case 1 or 2, What do you want?

result is Case 2.

result link

source link

<?
/***
  CREATE TABLE `24992408` (
`THE_DATE` TIMESTAMP NOT NULL DEFAULT DATE ,
`ORANGE` VARCHAR( 50 ) NOT NULL ,
`ORANGE_SCORE` INT( 11 ) NOT NULL ,
`GREEN` VARCHAR( 50 ) NOT NULL ,
`GREEN_SCORE` INT( 11 ) NOT NULL ,
`NAME_TEAM` VARCHAR( 50 ) NOT NULL
) ENGINE = MYISAM ;
INSERT INTO `24992408` (
`THE_DATE` ,
`ORANGE` ,
`ORANGE_SCORE` ,
`GREEN` ,
`GREEN_SCORE` ,
`NAME_TEAM`
)
VALUES (
  '2014-07-28' , '1', '1', '1', '2', 'NAME_TEAM'
);
***/
$host = "localhost";
$name = "user";
$db = "db";
$password ="password";

function confirm_query($watever){
    global $connection;
    if (!$watever) {
        die("Database query failed! " . mysqli_error($connection));
    }
}
function select_query(){
  global $connection;
  $query  = "SELECT * FROM `24992408` ";
  $admin_set = mysqli_query($connection, $query);
  confirm_query($admin_set);
  return $admin_set;
}
$connection = mysqli_connect($host, $name, $password, $db); 
$row = mysqli_fetch_assoc($admin_set = select_query());

$dateArray = explode('-', $row['THE_DATE']);
$year =  $dateArray[0];          //echo $year;    //2014
$month = $dateArray[1] - 1;      //echo $month;    //6
$day = $dateArray[2];            //echo $day;     //28

// IN PUT
//$date1 =  Date('Ymd',strtotime(sprintf('%04d%02d%02d',$year, $month, $day) ) ); //case 1
$date1 = "new Date ($year, $month, $day)";                                        //case 2

$dataArray[] = "[$date1,  {$row['ORANGE']}, {$row['GREEN']}, '{$row['NAME_TEAM']}']";
$itemOutput[] = array(  $date1,   $row['ORANGE_SCORE'],   $row['GREEN_SCORE'],  $row['NAME_TEAM']   );

echo "data.addRows(" . json_encode($dataArray) . ");" ;

// OUT PUT
//data.addRows(["[20140628, 1, 2, 'NAME_TEAM']"]);                                          // case 1 output
//data.addRows(["[new Date (2014, 6, 28), 1, 2, 'NAME_TEAM']"]);                            // case 2 output
?>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.