1、 php代码
$stime = (string) strtotime('2017-11-01 08:00:00')*1000 ; //"14 9667 8400 000";
//$stime = "1509494400000" ;
$endtime = strtotime('2017-11-10 08:00:00')*1000; //"1496678400000";
$c = new DingTalkClient;
$req = new SmartworkBpmsProcessinstanceListRequest;
$req->setProcessCode("PROC-B126B388-D2A1-4143-926A-2C74824559A3");
$req->setStartTime($stime);
$req->setEndTime($endtime);
$req->setSize("10");
$req->setCursor("0");
$resp = $c->execute($req, $access_token);
2、使用
$stime = (string) strtotime('2017-11-01 08:00:00')*1000 ; //"
返回
SimpleXMLElement Object([code] => 40[msg] => Missing required arguments:start_time[request_id] => 2imht4yakld0)使用
$stime = "1509494400000" ;
返回正常(成功)
3、 求助,何解? 哪里错了?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从您提供的代码片段和描述中,问题出在 $stime
变量的赋值方式上。当您使用 strtotime()
函数将时间字符串转换为时间戳并乘以1000后,直接对结果进行类型转换 (string)
,这可能导致了非预期的数值表示或精度损失,尤其是在大数字处理时。
在PHP中,当数字超过一定大小(通常称为PHP的最大整数限制,即 PHP_INT_MAX
),其行为会受到平台和PHP版本的影响,可能会导致溢出错误或者不准确的计算结果。
解决方法是确保 $stime
和 $endtime
的值正确地转换为字符串形式,并且没有精度损失。您已经发现直接赋值一个正确的毫秒时间戳字符串(如 "1509494400000"
)可以成功执行请求,这意味着问题确实出在时间戳的生成和转换过程。
修正后的代码示例:
$stime = strtotime('2017-11-01 08:00:00') * 1000;
$stime_str = (string) $stime; // 这里可能不是问题的关键,但确保转换不会丢失精度
// 更推荐的做法是直接格式化输出为字符串,避免潜在的精度问题
$stime_str_fixed = sprintf('%d', $stime);
$endtime = strtotime('2017-11-10 08:00:00') * 1000;
$endtime_str = sprintf('%d', $endtime);
$c = new DingTalkClient;
$req = new SmartworkBpmsProcessinstanceListRequest;
$req->setProcessCode("PROC-B126B388-D2A1-4143-926A-2C74824559A3");
$req->setStartTime($stime_str_fixed); // 使用格式化后的字符串
$req->setEndTime($endtime_str);
$req->setSize("10");
$req->setCursor("0");
$resp = $c->execute($req, $access_token);
通过使用 sprintf('%d', $variable)
,您可以确保时间戳乘以1000后的结果被准确地格式化为字符串,从而避免了任何可能的类型转换或精度问题。这样修改后,您的请求应该能够正常执行。