I think there might be a bug in Date.diff – it looks like if the number of days are the same, it attempts to directly cast the incoming Item to a Date in order to compare seconds. However, if the incoming Item is actually a string or something else a cast failure will occur. My fix is below:

 

Old code:

  @Override

  public int diff(final InputInfo ii, final Item it) throws QueryException {

    final long d1 = days();

    final Date d = (Date) (it.date() ? it : type.e(it, null, ii));

    final long d2 = d.days();

    if(d1 != d2) return (int) (d1 - d2);

    return seconds().subtract(((Date) it).seconds()).signum();

  }

 

New code:

  @Override

  public int diff(final InputInfo ii, final Item it) throws QueryException {

    final long d1 = days();

    final Date d = (Date) (it.date() ? it : type.e(it, null, ii));

    final long d2 = d.days();

    if(d1 != d2) return (int) (d1 - d2);

    return seconds().subtract(d.seconds()).signum();

  }

 

Dave