Превращение JSON в объект даты

0

Я получил запрос здесь

$http.get('php/getactivity.php')
    .then(
        function (response) {
            $scope.data.activities = response.data;
        },
        function (response) {
          // error handling
        }
    );

который получает данные из базы данных. в моем php

<?php 
include('dbconnect.php');

$result = $conn->query("SELECT * FROM Activities WHERE EventID =1;");

$outp = "";

while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
    if ($outp != "") {
        $outp .= ",";
    }       
    $outp .= '{"ActivityDate":"'  . $rs["ActivityDate"] . '",';     
    $outp .= '"StartTime":"'  . $rs["StartTime"] . '",';        
    $outp .= '"EndTime":"'  . $rs["EndTime"] . '"}';
}   
$outp ='['.$outp.']';
$conn->close();

echo($outp);
?>

который получает строку даты из базы данных. Пример данных таков:

Чт 01.01 1970 11:11:00 GMT + 0800 (Стандартное время Малайского полуострова)

Поскольку я обращаюсь к данным с помощью ng-repeat и {{ActivityDate||date:"dd/MM/yyyy"}} чтобы показать это в представлении, я не могу его преобразовать вручную, используя new Date(),

Я попытался добавить новую дату в json, созданный как таковой, но он не работает:

$outp.= '"ActivityDate": new Date("'. $rs["ActivityDate"]. '"),';

Каков правильный способ сделать это?

  • 1
    Вопрос «Превращение JSON в объект даты», где находится код JSON?
  • 2
    Не смешивайте строки для создания JSON. PHP имеет функцию json_encode .
Показать ещё 4 комментария
Теги:
date

1 ответ

2
Лучший ответ

Вероятно, было бы проще отформатировать дату на стороне сервера, как вы хотите, чтобы она отображалась на клиенте.

Один из вариантов:

date('d/m/Y', strtotime($rs["ActivityDate"]));

Вот пример этого: https://3v4l.org/6Xv03

Примечание: я бы рекомендовал вам изменить способ генерации вашего JSON. Сначала создайте массив PHP, а затем json_encode. Это позволит избежать возможных проблем формата JSON.

Что-то вроде:

$output = [];
while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
    $output[] = [
        "ActivityDate" => date('d/m/Y', strtotime($rs["ActivityDate"])),
        "StartTime" => $rs["StartTime"],
        "EndTime" => $rs["EndTime"]
    ];
}   

$conn->close();

echo(json_encode($output));

И затем, как отметил один комментатор, это помогает добавить заголовок для указания вашего типа контента:

header("Content-Type: application/json");
echo(json_encode($output));
  • 0
    есть ли какая-либо причина, по которой преобразованная дата является 01.01.1970, когда есть (Стандартное время Малайского полуострова)?
  • 0
    Ваша строка даты "1 января 1970 г." Независимо от часового пояса, форматирование в d/m/Y приведет к «01.01.1970». Что бы вы ожидали? Мы не конвертируем его в другой часовой пояс.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню