ISO 8601日期/时间通过HTTP发送并创建到PHP DateTime对象时出错

时间:2014-12-12 20:22:22

标签: php datetime iso8601

我有一个符合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];

1 个答案:

答案 0 :(得分:0)

您可以随时尝试trim(' ', str_replace(' ','+',$datetime));进行测试。这将剥离外部的空白,并使您的内部空间符合ISO8901标准的时间。

我相信你的POST正在被解释为一个编码空间。另一种方法(如果你可以控制发送的是什么)POST:

$datetime = urlencode($datetime);

然后在接收端:

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