Это следует сделать это:
$dateTime = DateTime::createFromFormat('d-m-Y H:i:s', '01-01-2013 12:00:00');
$requiredJsonFormat = sprintf(
'\/Date(%s%s)\/',
$dateTime->format('U') * 1000,
$dateTime->format('O')
);
echo $requiredJsonFormat; // prints '\/Date(1357038000000+0100)\/'
я оставляю это до вас, чтобы найти то, что форматы U
и O
сделать из http://php.net/date.
Альтернативой может быть использование API DOTNET PHP и использование класса DataContractJsonSerializer
непосредственно из PHP. Тем не менее, вам понадобится .NET, установленный на сервере, и использование API DOTNET PHP довольно загадочно.
Более интересная часть - это то, почему вам нужен этот формат вообще. Это объясняется в BlogPost на http://weblogs.asp.net/bleroy/archive/2008/01/18/dates-and-json.aspx
Но из-за странного надзора в ECMAScript спецификации, нет стандартного способа описания даты в формате JSON. [...] Наш нынешний подход использует небольшую лазейку в спецификациях JSON. В строковом литерале JSON вы можете (или не можете) сбегать от некоторых символов. Среди этих символов, как ни странно, есть символ косой черты ('/'). [...] Новый формат: «/ Date (1198908717056) /», где число снова составляет миллисекунды с 1 января 1970 года UTC [...] Дело в том, что это устраняет неоднозначность литерала даты из строки, которая похожа на ту же дату буквально, оставаясь чистым JSON, который будет анализироваться любым стандартным парсером JSON. Разумеется, синтаксический анализатор, который не знает об этом соглашении, просто увидит строку, но синтаксические анализаторы, которые это сделают, смогут анализировать их как даты без риска ложных срабатываний.
что это за номер '410256000000-0800' должен представлять? мы не можем [преобразовать его, если мы не знаем формат] (http://php.net/date). – Gordon
Да, это мой вопрос, действительно, если кто-то знает, что представляет этот формат? Согласно некоторым исследованиям, это формат .Net DataContractJsonSerializer –
, он должен быть 'u' настолько большим. просто догадались ли вы попробовать 'u'? – DevZer0