我有一个符合ISO 8601标准的日期/时间字符串2014-12-11T23:43:44+00:00
,我将其通过HTTP传递给Web服务器。在那里,我从我的HTTP POST字段中提取数据,一切都很好,当我print_r我的参数时,该值返回为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字段。
编辑:
这是我用来从PHP中的POST请求中获取字符串的代码:
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];
答案 0 :(得分:0)
您可以随时尝试trim(' ', str_replace(' ','+',$datetime));
进行测试。这将剥离外部的空白,并使您的内部空间符合ISO8901标准的时间。
我相信你的POST正在被解释为一个编码空间。另一种方法(如果你可以控制发送的是什么)POST:
$datetime = urlencode($datetime);
然后在接收端:
$datetime = urldecode($_POST['datetime']);