设置日期时间格式和 soapclient 错误

set dateTime format and soapclient error

我需要以这种特定的日期格式设置日期时间:

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 会出现以下错误:

ErrorException in TripController.php line 37: Object of class DateTime could not be converted to string

否则,如果我像那样保留所有内容,但我将格式命令 ( ->format('Y-m-d\Th:m:s') ) 移动到数组单元格中,这样写:

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

这不会引发任何错误,但时间戳是错误的,因为分钟不会改变,每次循环只会增加秒数,而不是分钟! 所以关于时间的事情:

00:01:30

00:01:40

00:01:59

00:01:33

oo:01:03

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

这是 SOAP 客户端的代码:

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

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

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

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

$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 : Minutes with leading zeros

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

date(DATE_ATOM)

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