Environment
Environment

Reputation: 59

new Date into Array php

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"}]
},

Upvotes: 0

Views: 1111

Answers (2)

minias
minias

Reputation: 69

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
?>

Upvotes: 2

asgallant
asgallant

Reputation: 26340

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); ?>);

Upvotes: 2

Related Questions