Oracle Apex 5中的动态操作无法将日期与Oracle进行比较

时间:2016-08-24 18:08:11

标签: javascript oracle oracle-apex

我有一个动态动作,我希望在它触发之前在javascript条件下进行一些检查。我希望它只显示一个区域,如果从数据库返回到只读字段(P4_NEXT_RENEWAL_DATE)的日期晚于今天的系统日期。

我的oracle表有一个日期字段,返回到只读页面项目:

  

P4_NEXT_RENEWAL_DATE

返回一个值,如:

  

下一次续订日期

16-JUL-2017

我有一个动态动作,如下所示:

(
(apex.item('P4_RENEWAL_REQUIRED').getValue()=='Yes' && apex.item('P4_RENEWAL_REQUIRED_AGREE').getValue()=='Agree')
||
(apex.item('P4_RENEWAL_REQUIRED').getValue()=='No' && apex.item('P4_RENEWAL_REQUIRED_AGREE').getValue()=='Disagree')
)
&& 
Date.parse(apex.item('P4_NEXT_RENEWAL_DATE').getValue()) > new Date()

这是最后一点不起作用,

&& Date.parse(apex.item('P4_NEXT_RENEWAL_DATE').getValue()) > new Date()

我希望只有在我的下一个续约日期晚于今天的日期时才会显示该地区....但它会显示该地区,无论日期是过去还是未来。

我不确定我的只读字段是否在P4_NEXT_RENEWAL_DATE返回日期的字符串版本,或者如果Apex知道它来自Oracle的日期值,那么javascript将其视为日期值...我试过了一些date.parse()方法似乎没什么用。

我也尝试过不使用date.parse,并使用直接的apex.item.getValue()调用返回原始日期对象,但没有运气:

&& apex.item('P4_NEXT_RENEWAL_DATE').getValue() > new Date()

任何建议表示赞赏。

2 个答案:

答案 0 :(得分:0)

首先,我在MDN documentation for Date.parse上看到了这一点。

  

不建议在ES5之前使用Date.parse,解析字符串完全取决于实现。不同主机解析日期字符串的方式仍然存在很多差异,因此应该手动解析日期字符串(如果要容纳许多不同的格式,库可以提供帮助)。

     

表示RFC2822或ISO 8601日期的字符串(可以使用其他格式,但结果可能是意外的)。

这来自documentation for the Date object

  

注意:由于浏览器差异和不一致,强烈建议不要使用Date构造函数(和Date.parse,它们是等效的)解析日期字符串。

我在各种浏览器中进行了一些测试,Chrome很乐意为Date.parse和Date构造器处理'DD-MON-YYYY'格式的值,但Firefox和IE却没有。

如果您想在JavaScript中操作/比较日期,我建议您使用Moment.js日期实用程序库来解决这些问题。要么就是这样,要么想办法比较PL / SQL中的日期。

答案 1 :(得分:0)

您必须删除新的日期以进行比较。

apex.item('P4_NEXT_RENEWAL_DATE').getValue() > Date.parse(new Date())