преобразование даты Mysql в миллисекунды в JSON с использованием переполнения стека

Я RESTful кодировал JSON из MySQL, используя PHP, один столбец — это дата, которая в MySQL выглядит примерно так: 01/03/15 06:00, а в кодировке JSON — вот так.

[["01/03/15 06:00","89"],["02/03/15 06:00","87"]]

Как мне преобразовать это в код ниже, где дата в миллисекундах

[["1420245000000","89"],["1422923400000","87"]]

PHP-код для JSON Encode

private function productionhourlys(){
if($this->get_request_method() != "GET"){
$this->response('',406);
}
$query="SELECT distinct  c.Date, c.RoA FROM productionhourlys c order by c.productionhourlyNumber desc";
$r = $this->mysqli->query($query) or die($this->mysqli->error.__LINE__);

if($r->num_rows > 0){
$result[] = array_values([]);
while($row = $r->fetch_row()) {
$result[] = $row;
}
$this->response($this->json($result), 200); // send user details
}
$this->response('',204);    // If no records "No Content" status
}

2

Решение

Если вы хотите выполнить преобразование на стороне сервера, сделайте это внутри цикла while, прежде чем назначить текущую строку $ для $ result:

РЕДАКТИРОВАТЬ: преобразовал метку времени в секундах в миллисекунды, как запросили OP

while($row = $r->fetch_row()) {
$row[0] = strtotime($row[0]); // convert to unix timestamp (in seconds)
$row[0] = 1000 * $row[0]; // convert seconds to milliseconds
$result[] = $row;
}

Я также не уверен, какова цель этой линии:

$result[] = array_values([]);

Если вы просто создаете новый пустой массив, вы можете сделать:

$result = array();
1

Другие решения

Попробуйте с этим примером:

<?php

$json = '[["01/03/15 06:00","89"],["02/03/15 06:00","87"]]';

$array = json_decode($json, true);

$array = array_map(function($n) {$date = new DateTime($n[0]); return array($date->format('U'), $n[1]);}, $array);

$json = json_encode($array);

echo $json;

Выход:

[["1420282800","89"],["1422961200","87"]]
0

По вопросам рекламы [email protected]