Ошибка, когда дата / время ISO 8601 отправляется по HTTP и создается в объекте PHP DateTime

У меня есть строка даты / времени, соответствующая ISO 8601 2014-12-11T23:43:44+00:00 который я передаю по HTTP на веб-сервер. Там я извлекаю данные из моего поля HTTP POST, и все замечательно, когда я печатаю свои параметры, значение возвращается как 2014-12-11T23:43:44 00:00,

Однако я замечаю, что + в настоящее время отсутствует, (я предполагаю, что это в представлении данных, а не в том, что данные закодированы и не является (?) проблемой, верно?)

Затем при разборе значения в качестве параметра для создания нового объекта DateTime я получаю следующую ошибку:

DateTime::__construct(): Failed to parse time string (2014-12-11T23:43:44 00:00) at position 20 (0): Double time specification

Я предполагаю, что это потому, что он видит добавление 00:00 как в другой раз после 23:43:44, когда, конечно, это разница во времени.

Это потому что + отсутствует или я делаю что-то еще не так?

Я должен также указать, что мое первоначальное значение (2014-12-11T23:43:44+00:00) происходит от http://www.timestampgenerator.comполе ISO 8601.

Редактировать:

Вот код, который я использую для получения строки из запроса POST в PHP:

static function request_parameters($including_request_uri = false)
{
$request_parameters = $_REQUEST;

if (!$including_request_uri)
{
unset($request_parameters[PARAMETER_NAME_REQUEST]);
}

return $request_parameters;
}

Затем я получаю значение следующим образом:

$parameters =       RESTController::request_parameters();
$date_created =     $parameters[UNIVERSALLY_UNIQUE_OBJECT_KEY_DATE_CREATED];

2

Решение

Вы всегда можете попробовать сделать trim(' ', str_replace(' ','+',$datetime)); тестировать. Это позволит как убрать пробелы снаружи, так и превратить ваше внутреннее пространство с временем, соответствующим стандарту ISO8901.

Я полагаю, что ваш входящий POST интерпретируется как закодированное пространство. Еще один способ сделать это (если у вас есть контроль над отправкой) — это POST с помощью:

$datetime = urlencode($datetime);

Затем на приемном конце:

$datetime = urldecode($_POST['datetime']);
0

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

Других решений пока нет …

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