2016-08-24 80 views
0

我有一個動態操作,我想在觸發之前在JavaScript條件中執行一些檢查。我希望它只顯示一個區域,如果從數據庫返回到只讀字段(P4_NEXT_RENEWAL_DATE)的日期比今天的系統日期晚。Oracle Apex 5中的動態操作無法將日期與Oracle進行比較

我的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,並且使用我將不得不通過返回的原始Date對象的直apex.item.getValue()調用,但沒有運氣之一:

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

任何意見讚賞。

+0

我沒有在'Date.parse'上找到線索,但我可以告訴你P4_NEXT_RENEWAL_DATE中的值是一個**字符串**例如'16 -JUL-2017' 。所以問題是:Date.parse'可以處理那種格式的字符串嗎? –

+0

Oracle爲什麼會從日期列中獲取日期值,然後將其保存在一個頁面項中,該頁是一個字符串類型的綁定(?)變量?我嘗試使用3個Oracle子串將日期分成3部分......然後從部分「2017年7月16日」中構建一個字符串等,但仍然沒有歡樂 – smackenzie

+0

Google'Date.parse'和'DD-MMM-YYYY '爲解決方案提供建議。 'apex.item'是一個Javascript函數(由Oracle提供),它看到的只是一個「文本」類型的輸入,它不查看數據庫中的列,因此它不知道它擁有日期值。 –

回答

0

首先,我遇到了這個MDN documentation for Date.parse

不推薦使用Date.parse,直到ES5,字符串的解析完全依賴於實現。不同的主機如何解析日期字符串仍然存在很多差異,因此應該手動解析日期字符串(如果要適應多種不同的格式,庫可以提供幫助)。

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

和這個來自documentation for the Date object

注意:由於瀏覽器的差異和不一致性,強烈建議不要使用Date構造函數(和Date.parse,它們是等價的)解析日期字符串。

我在不同的瀏覽器測試了一點,鍍鉻手柄愉快地在Date.parse「DD-MON-YYYY」和日期構造器的格式值,但Firefox和IE瀏覽器沒有。

如果你想在JavaScript中操縱/比較日期,那麼我可以推薦使用Moment.js日期實用程序庫來解決這些問題。無論是或者找出一種方法來比較你在PL/SQL中的日期。