在 DatePicker Oracle Apex 上使用动态操作比较日期

Comparing dates using Dynamic Action on DatePicker Oracle Apex

我有一个日期选择器,用户只需选择一个日期,然后如果用户单击明天 (sysdate+1),动态操作就会发送警报。

日期选择器术语是简单布局。

动态动作-->

Name: Valid Date

Event: Change

Selection type: Item(s)

Item(s): datepicker_name

Condition: equal to

Value: sysdate+1

当我 运行 程序并单击日历上的任何一天时,没有出现警报。我认为问题是格式。动态操作将日期视为“DD/MM/YYYY”,而日期选择器输出为“DD-Mon-YY”,因此无法比较它们。苹果和橙子。但是我尝试了格式使它完全相同但仍然没有进展。

再次感谢您的宝贵时间和帮助!

正如@ScottWe 提到的:您正在尝试在 HTML/javascript 中应用 PLSQL 逻辑。 'When - Condition' 在运行时进行评估,因此您不能在那里使用 PLSQL。 不过 javascript 中的日期算法有点烦人,所以如果你不熟悉它,这里有一种方法可以执行你的检查(即输入的日期是不是明天)。

从这些中得到我的线索:
Date difference in Javascript (ignoring time of day)
JavaScript how to get tomorrows date in format dd-mm-yy

将此函数添加到页面的 javascript 全局变量和函数部分:

function isTomorrow(pDateItem){  
  function getTomorrow(){ 
    var tomorrow = new Date();
    tomorrow.setDate(tomorrow.getDate() + 1);
    return tomorrow;
  };

  function cutTime(pDate){
    return new Date(pDate.getFullYear(), pDate.getMonth(), pDate.getDate());
  };

  // check if pDateItem leads to a selection
  // check if it is a datepicker
  // check if a date has been selected
  if ( $(pDateItem).length 
       && $(pDateItem).data("datepicker")
       && $(pDateItem).datepicker("getDate") !== null 
     ) 
  {        
    var tomorrow = getTomorrow();
    var check = $(pDateItem).datepicker("getDate");
    var one = cutTime(check);
    var two = cutTime(tomorrow);

    return one.getDate() === two.getDate();
  };
  return false;
}

然后在您的动态操作 'When' 条件中,使用带有以下代码的 javascript 表达式:

isTomorrow(this.triggeringElement)

那么只有当日期设置为明天时才会触发相应的 True Actions。