无法在PHP中解析时间字符串

时间:2016-03-11 09:44:05

标签: php datetime

我需要根据从表单收到的值创建一个DateTime。问题是收到的值就像一个字符串:" 2016-10-10T08:29:06.959Z"我需要收到类似2016-10-10T08:29:06.959Z的没有引号的内容,因为如果我收到引号,我就会收到下一个错误:

  

DateTime :: __ construct():无法解析位置0(")的时间字符串(" 2016-10-14T22:00:00.000Z"):意外字符

当我尝试将值转换为DateTime时:

$fechaHasta = new DateTime($params["fechaHasta"]);

如果我尝试使用:

$fecha2 = DateTime::createFromFormat("d-m-Y H:i:s", $data["fechaHasta"]);

我在$ fecha2中有一个空对象。

我发送数据的表单是:

<form id = "formSearch" class = "menu-table" method = "post" action = "<?php echo $this->basePath('/privado/actividades-planificadas/pai/exportdatatoexcel'); ?>">
    <input type = "hidden" name = "codigoPPM" value = "{{searchForm.codigoPPM}}" />
    <input type = "hidden" name = "fechaDesde" value = {{searchForm.dt1}} />
    <input type = "hidden" name = "fechaHasta" value = {{searchForm.dt2}} />
    <input type = "hidden" name = "estado" value = "{{searchForm.estadoSelected.id}}" />
    <button type = "submit">
        Exportar datos a Excel&nbsp;&nbsp;&nbsp;<img title = "Exportar tabla a Excel" src = "/img/logo-excel.png" />
    </button>
</form> 

那么,我必须做什么来发送没有引号的值或转换DateTime中收到的值。

3 个答案:

答案 0 :(得分:1)

$date = '"2016-10-14T22:00:00.000Z"';
=> ""2016-10-14T22:00:00.000Z""
$fechaHasta = new DateTime($date);
Exception with message 'DateTime::__construct(): Failed to parse time string ("2016-10-14T22:00:00.000Z") at position 0 ("): Unexpected character'
$fechaHasta = new DateTime(trim($date, '"')); /* « notice the trim */
=> DateTime {#174
     +"date": "2016-10-14 22:00:00.000000",
     +"timezone_type": 2,
     +"timezone": "Z",
   }

所以你只需要调整"

$fechaHasta = new DateTime(trim($params["fechaHasta"], '"'));

这应该可以正常工作。

答案 1 :(得分:0)

function trim()可以选择从字符串中删除特定字符: e.g:

echo trim('example"','"');

将输出:示例

答案 2 :(得分:-3)

尝试使用strtotime功能,您也可以设置所需的格式。

示例:

$ date = date(&#39; Y-m-d H:i:s&#39;,strtotime(&#34; 2016-10-14T22:00:00.000Z&#34;))