Progress 4GL - 周数

时间:2016-09-01 15:43:46

标签: progress-4gl openedge

我正在将日期转换为其周数,但是我收到了错误消息。你能救我吗?

这是我的代码

function WeekNumber returns integer ( OrderRel.ReqDate as date ):

define var vDay as integer no-undo.

vDay = OrderRel.ReqDate - date( 1, 1, YEAR( OrderRel.ReqDate ) ) + 1.

return integer( truncate( vDay / 7, 0 ) ) + ( if vDay mod 7 <> 0 then 1 else 0 ).   

end function. 

1 个答案:

答案 0 :(得分:2)

看起来您正在使用表字段作为函数的输入?您应该将其更改为局部变量,然后使用记录调用它:

FUNCTION WeekNumber RETURNS INTEGER ( INPUT pdaDate as DATE ):

    DEFINE VAR vDay AS INTEGER NO-UNDO.

    vDay = pdaDate - DATE( 1, 1, YEAR( pdaDate ) ) + 1  .

    RETURN INTEGER( TRUNCATE( vDay / 7, 0 ) ) + ( IF vDay MOD 7 <> 0 THEN 1 ELSE 0 ) .

END FUNCTION.

MESSAGE WeekNumber( OrderRel.ReqDate ) VIEW-AS ALERT-BOX. 

这使得函数编译并运行!

另一件事是,根据您计算的周数,可能是错误的。

MESSAGE WeekNumber( DATE("2016-09-02") ) VIEW-AS ALERT-BOX.

enter image description here

这在您的系统中可能是正确的,但至少在瑞典没有使用ISO8601标准的周编号。根据这些标准,2016年2月是第35周......

Week numbering on Wikipedia

ISO week date