PHP调用Microsoft Dynamics NAV Web服务的日期格式问题
你遇到的这个问题很常见——Dynamics NAV的SOAP Web服务对日期格式有严格要求,它只认ISO 8601标准的日期格式:YYYY-MM-DD(比如2018-05-30)。
你之前尝试的30-05-2018、05-30-2018、30/05/2018这些格式,NAV服务端无法自动解析为Date类型,所以才会抛出The value "30-05-2018" can't be evaluated into type Date.的错误。
把你的代码里的日期参数改成ISO格式就可以解决问题,修改后的函数代码如下:
public function getPriceList($customer_number){ $url = 'Page/CustomerPrices'; try { $response = new \stdClass(); $response->status = false; $options = [ 'soap_version' => SOAP_1_1, 'connection_timeout' => 120, 'login' => env('MICROSOFT_DYNAMICS_NAV_USERNAME', ''), 'password' => env('MICROSOFT_DYNAMICS_NAV_PASSWORD', ''), 'exceptions' => true, ]; $soapWsdl = env('MICROSOFT_DYNAMICS_NAV_URI', '').$url; $client = new SoapClient($soapWsdl, $options); // 替换为ISO标准日期格式 $response->data = $client->ReadMultiple([ 'filter'=> [], 'Start_Date' => "2018-05-30", 'Cust_No'=>$customer_number, 'Name'=>'Testing', 'Price_Comments'=>'', 'setSize'=>'1' ]); $response->status = true; }catch (Exception $e) { $response->data = $e->getMessage(); } return $response; }
额外提醒一下:如果后续需要传递带时间的日期参数,格式要换成YYYY-MM-DDTHH:MM:SS(比如2018-05-30T14:30:00),同样遵循ISO 8601标准。另外确保你的PHP环境时区设置正确,避免日期转换时出现不必要的偏差。
内容的提问来源于stack exchange,提问作者Sreejith B
相关产品推荐
相关产品推荐

