Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime HH:MI:SS中两次之间的差异_Datetime_Time_Sap_Business Objects - Fatal编程技术网

Datetime HH:MI:SS中两次之间的差异

Datetime HH:MI:SS中两次之间的差异,datetime,time,sap,business-objects,Datetime,Time,Sap,Business Objects,我的问题:我需要使用脚本以HH:MI:SS的格式获取两个日期(时间)之间的差异。例如,如果我有两次: 2012/08/24 13:04:23 2012/08/24 14:15:32 我的结果是: 1:11:09 要求:我正在使用SAP的BusinessObjects Data Services Designer编写此脚本,因此我的脚本必须满足其语法规则(单击查看长pdf文档…如果您不熟悉SAP的语法,只需知道它确实有限…) 我尝试过的:目前我有一个函数(见下文),它将为用户提供一条SQL语

我的问题:我需要使用脚本以HH:MI:SS的格式获取两个日期(时间)之间的差异。例如,如果我有两次:

2012/08/24 13:04:23
2012/08/24 14:15:32
我的结果是:

1:11:09
要求:我正在使用SAP的BusinessObjects Data Services Designer编写此脚本,因此我的脚本必须满足其语法规则(单击查看长pdf文档…如果您不熟悉SAP的语法,只需知道它确实有限…)


我尝试过的:目前我有一个函数(见下文),它将为用户提供一条SQL语句,用户可以在
SQL
函数中使用该语句,这将为他们提供他们想要的内容,但我想使此数据存储不可知

以下是我当前的函数(不是我想要的):

这不起作用,因为我希望它独立于数据存储,并在脚本中单独计算

我还尝试将日期转换为十进制数,然后对其使用
JED_Time(int)
函数,这是可行的,除了十进制是以10为基数,时间是以任何为基数。。。所以那是行不通的



我的等待:时间并没有一个明确的基础,这让我很难过。。。。任何帮助都会非常好!谢谢

这可能完全准确,也可能不完全准确,但我想我明白了。我非常欢迎你的意见。希望有一天这会帮助别人

#Make sure that when we're finding the difference, we always take the lesser date from the greater date. We'll negate it at the end.
if ($time_1 < $time_2)
begin
  $temp_time = $time_1;
  $time_1 = $time_2;
  $time_2 = $temp_time;
end

#Get all value differences from the two times
$nanoseconds = to_decimal(to_char($time_1, 'FF'), '.', null, 0) - to_decimal(to_char($time_2, 'FF'), '.', null, 0);
$seconds = to_decimal(to_char($time_1, 'SS'), '.', null, 0) - to_decimal(to_char($time_2, 'SS'), '.', null, 0);
$minutes = to_decimal(to_char($time_1, 'MI'), '.', null, 0) - to_decimal(to_char($time_2, 'MI'), '.', null, 0);
$hours = to_decimal(to_char($time_1, 'HH24'), '.', null, 0) - to_decimal(to_char($time_2, 'HH24'), '.', null, 0);
$days = interval_to_char($time_1 - $time_2, 'D');

#fix nanoseconds
if ($nanoseconds >= 1000000000)
begin
  $seconds = $seconds + 1;
  $nanoseconds = $nanoseconds - 1000000000;
end

if ($nanoseconds < 0)
begin
  $seconds = $seconds -1;
  $nanoseconds = $nanoseconds + 1000000000;
end

#fix seconds
if ($seconds >= 60)
begin
  $minutes = $minutes + 1;
  $seconds = $seconds - 60;
end

if ($seconds < 0)
begin
  $minutes = $minutes -1;
  $seconds = $seconds + 60;
end

#fix minutes
if ($minutes >= 60)
begin
  $hours = $hours + 1;
  $minutes = $minutes - 60;
end

if ($minutes < 0)
begin
  $hours = $hours -1;
  $minutes = $minutes + 60;
end

#fix hours
if ($hours >= 24)
begin
  $days = $days + 1;
  $hours = $hours - 24;
end

if ($hours < 0)
begin
  $days = $days - 1;
  $hours = $hours + 24;
end

#fix days
if (trunc($days/365, 0) >= 1)
begin
  $years = trunc($days/365, 0);
  $days = $days - ($years * 365);
end

if (round($days/7, 0) > 0)
begin
  $weeks = round($days/7, 0);
  $days = $days - ($weeks * 7);
end

$ret = '';

if ($years > 0)
begin
  $ret = $years||' year'||ifthenelse($years = 1, '', 's')||' ';
end

if ($weeks > 0)
begin
  $ret = $ret||$weeks||' week'||ifthenelse($weeks = 1, '', 's')||' ';
end

if ($days > 0)
begin
  $ret = $ret||$days||' day'||ifthenelse($days = 1, '', 's')||' ';
end

$ret = $ret||$hours||':'||lpad($minutes, 2, '0')||':'||lpad($seconds, 2, '0')||':'||lpad(round($nanoseconds/1000000, 0), 3, '0');

#Negate it if the parameter values were swapped at the beginning (using $temp_time)
if ($temp_time is not null)
begin
  $ret = '-'||$ret;
end

return $ret;
#确保当我们发现差异时,总是从较大的日期中选取较小的日期。我们会在最后否定它。
如果($time_1<$time_2)
开始
$temp\u time=$time\u 1;
$time_1=$time_2;
$time_2=$temp_时间;
结束
#获取两次的所有值差异
$nanoseconds=to_decimal(to_char($time_1,'FF'),'.',null,0)-to_decimal(to_char($time_2,'FF'),'.',null,0);
$seconds=to_decimal(to_char($time_1,'SS'),'null,0)-to_decimal(to_char($time_2,'SS'),'null,0);
$minutes=to_decimal(to_char($time_1,'MI'),'.',null,0)-to_decimal(to_char($time_2,'MI'),'.',null,0);
$hours=to_decimal(to_char($time_1,'HH24'),'.',null,0)-to_decimal(to_char($time_2,'HH24'),'.',null,0);
$days=间隔时间到字符($time_1-$time_2,'D');
#固定纳秒
如果($纳秒>=100000000)
开始
$seconds=$seconds+1;
$nanoseconds=$nanoseconds-100000000;
结束
如果($纳秒<0)
开始
$seconds=$seconds-1;
$nanoseconds=$nanoseconds+100000000;
结束
#固定秒数
如果($s>=60)
开始
$minutes=$minutes+1;
$seconds=$seconds-60;
结束
如果($s<0)
开始
$minutes=$minutes-1;
$seconds=$seconds+60;
结束
#固定时间
如果($minutes>=60)
开始
$hours=$hours+1;
$minutes=$minutes-60;
结束
如果($分钟<0)
开始
$hours=$hours-1;
$minutes=$minutes+60;
结束
#固定时间
如果($hours>=24)
开始
$days=$days+1;
$hours=$hours-24;
结束
如果($h<0)
开始
$days=$days-1;
$hours=$hours+24;
结束
#固定天数
如果(trunc($days/365,0)>=1)
开始
$years=trunc($days/365,0);
$days=$days-($years*365);
结束
如果(整轮($7天,0)>0)
开始
$weeks=整数($days/7,0);
$days=$days-($weeks*7);
结束
$ret='';
如果($years>0)
开始
$ret=$years | | | | | | | |如果其他($years=1,,'s')| |';
结束
如果($weeks>0)
开始
$ret=$ret | | | | | | | | |周| |如果其他($weeks=1,,'s')| |';
结束
如果($days>0)
开始
$ret=$ret | | | | | | | | | | | |如果其他($days=1,,'s')| |';
结束
$ret=$ret | | | |$hours | |:“| | lpad($minutes,2,'0')|:“| | lpad($nanoseconds/1000000,0),3,'0');
#如果参数值在开始时交换(使用$temp_time),则将其取反
如果($temp_time不为空)
开始
$ret='-'| |$ret;
结束
返回$ret;

更简单的方法是使用数据类型Interval

要获取两个日期时间之间的秒数,请执行以下操作:

interval_to_char( $dtFrom - $dtTo , 'SS');
获取间隔并返回间隔的字符表示形式

interval_to_char([in]InputInterval作为interval,[in]FormatString作为varchar)作为varchar


此功能还可用于获取分钟数和小时数。

第一次回答评论:能否请您更新此帖子,添加指向您引用的参考资料的链接?
interval_to_char( $dtFrom - $dtTo , 'SS');