У меня есть строка даты / времени, соответствующая 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];
Вы всегда можете попробовать сделать trim(' ', str_replace(' ','+',$datetime));
тестировать. Это позволит как убрать пробелы снаружи, так и превратить ваше внутреннее пространство с временем, соответствующим стандарту ISO8901.
Я полагаю, что ваш входящий POST интерпретируется как закодированное пространство. Еще один способ сделать это (если у вас есть контроль над отправкой) — это POST с помощью:
$datetime = urlencode($datetime);
Затем на приемном конце:
$datetime = urldecode($_POST['datetime']);
Других решений пока нет …