Кодирование / декодирование Json с объектами даты и времени symfony php - PullRequest
1 голос
/ 03 апреля 2020

У меня есть массив с объектами datetime. Массив выглядит следующим образом

$advanceresult= array:68 [▼
      "contact" => array:1 [▶]
      "policyBranch" => ArrayCollection {#38322 ▶}
      "assuranceContact" => ArrayCollection {#38337 ▶}
      "info" => null
      "withSurplusShare" => false
      "withSurpassedSurplusShare" => false
      "withoutPremiumInvoice" => false
      "withoutPremiumInvoiceRange" => array:2 [▼
        "start" => DateTime @1577833200 {#38339 ▶}
        "end" => DateTime @1609369200 {#38346 ▶}
      ]
      "showPoliciesFromArchivedContacts" => false
    ]

Значение ключаlessPremiumInvoiceRange является объектом datetime. Моя проблема в том, что когда я кодирую этот массив следующим образом

$advanceresultencode=json_encode($advanceresult);
json_decode($advanceresultencode, true);

и декодирую его обратно, объекты даты и времени выглядят следующим образом

enter code here

"withoutPremiumInvoiceRange" => array:2 [▼
    "start" => array:3 [▼
      "date" => "2020-01-01 00:00:00.000000"
      "timezone_type" => 3
      "timezone" => "Europe/Zurich"
    ]
    "end" => array:3 [▶]
  ]

Мне нужны данные для объекта datetime. помоги мне достичь этого.

1 Ответ

0 голосов
/ 03 апреля 2020

Вы не можете иметь дату и время без дополнительного шага. Вы можете изменить процесс кодирования (более подробная информация здесь: Изменить вывод DateTime в json_encode ), но та же проблема с json_decode.

Вот что вы можете сделать для json_decode:

<?php

// Here your json as string
$json = ...;

$jsonDecoded = json_decode($json);

$jsonDecoded['withoutPremiumInvoiceRange']['start'] = DateTime::createFromFormat(
    'Y-m-d H:i:s.u', 
    $jsonDecoded['withoutPremiumInvoiceRange']['start']['date'], 
    new DateTimeZone($jsonDecoded['withoutPremiumInvoiceRange']['start']['timezone'])
);
...