If the "month off" happens from javascript, thats a stupid, brandead, assinine, retarded bug in javascript's Date object (do I sound bitter :). If your saying it happens on constructing a java.util.Date instance, I've never seen that.
In general, I've found its best to parse date strings coming from the UI through use of a java.util.text.DateFormatter using a standard format pattern.
Regardless how you build them, once you have the Date instances, use them in HQL like this:
Code:
Date date1 = ...;
Date date2 = ...;
Query query = session.createQuery("from MyObject as myObj where myObj.startDate between :rangeStartDate and :rangeEndDate");
query.setDate("rangeStartDate", date1);
query.setDate("rangeEndDate", date2);
...