设置dateTime格式和soapclient错误

时间:2017-06-13 10:13:49

标签: php laravel datetime soap soap-client

我需要以这种特定日期格式设置dateTime:

  

2016-10-19T11:06:20.000 + 00:00

所以我发现这个工作:

'date'=> $dateStart->format('Y-m-d\Th:m:s')

这是来自循环内的数组单元格设置。在多级数组的第一级。

在此设置之前,$dateStart会被这样处理:

$dateStart = new DateTime();
$dateStart->setTimeStamp($inputs['extraData']['dataStart']/1000);

var $inputs['extraData']['dataStart']包含一个UnixTimeStamp:

1493828407000

所有时间戳都按正确的升序排列。 在同一个数组的下一级,我尝试以这种方式设置另一个时间戳:

$timeStamp=$cellaViaggio['timestamp'];
$date3= new DateTime();
$date3->setTimestamp($timeStamp/1000)->format('Y-m-d\Th:m:s');

然后在数组

 array('name'=>'TIMESTAMP','value'=>$date3)

然后这个数组在PHP Soap客户端的调用中用作soap数据包。

如果我这样离开,我的Laravel会出现错误:

  

TripController.php第37行中的ErrorException:   类DateTime的对象无法转换为字符串

否则,如果我将所有这些都留下,但我将格式命令( ->format('Y-m-d\Th:m:s') )移到数组单元格中,如下所示:

array('name'=>'TIMESTAMP','value'=>$date3->format('Y-m-d\Th:m:s'))

这没有引发任何错误,但时间戳错了,因为分钟不会改变,只是第二次在每个循环都增加,但不是分钟! 所以有关时间的事情:

  

00:01:30

     

零点01分40秒

     

0时01分59秒

     

0时01分33秒

     

OO:01:03

正如我所说,我们谈论渐进式时间戳 请记住,时间戳被分配给Array of Array of Array,以使soap信封保持正确的服务器格式。

这是SOAP客户端的代码:

$client = new \SoapClient("http://soapserviceserver.xx/services/spPushDataServicePort?wsdl");
 try {  

            return $cli->pushData($param);
        } catch (SoapFault $e) {
           return $e->getMessage();
        }

$params包含如上所述的数组。

1 个答案:

答案 0 :(得分:1)

格式不正确,因为您正在使用

$date3->format('Y-m-d\Th:m:s')

相反,你应该使用

$date3->format('Y-m-d\Th:i:s')

这是一个例子

\Carbon\Carbon::now()->format('Y-m-d\Th:i:s')

结果 2017-06-13T06:44:45

结果在一段时间后2017-06-13T06:45:24

详细了解PHP日期格式here

  

i:带前导零的分钟

如果您想根据问题中给出的示例获得完美的日期格式,那么您可以使用

date(DATE_ATOM)

结果2017-06-13T18:51:08+05:30