var startDate; var endDate; var callbacks = 0; function resetDates() { startDate = endDate = null; } /* * Given two dates (in seconds) find out if date1 is bigger, date2 is bigger or * they're the same, taking only the dates, not the time into account. * In other words, different times on the same date returns equal. * returns -1 for date1 bigger, 1 for date2 is bigger 0 for equal */ function compareDatesOnly(date1, date2) { var year1 = date1.getYear(); var year2 = date2.getYear(); var month1 = date1.getMonth(); var month2 = date2.getMonth(); var day1 = date1.getDate(); var day2 = date2.getDate(); if (year1 > year2) { return -1; } if (year2 > year1) { return 1; } //years are equal if (month1 > month2) { return -1; } if (month2 > month1) { return 1; } //years and months are equal if (day1 > day2) { return -1; } if (day2 > day1) { return 1; } //days are equal return 0; /* Can't do this because of timezone issues var days1 = Math.floor(date1.getTime()/Date.DAY); var days2 = Math.floor(date2.getTime()/Date.DAY); return (days1 - days2); */ } function filterDates1(cal) { startDate = cal.date; /* If they haven't chosen an end date before we'll set it to the same date as the start date This way if the user scrolls in the start date 5 months forward, they don't need to do it again for the end date. */ if (endDate == null) { Calendario.setup({ inputField : "dataate", button : "bt_dataate", // What will trigger the popup of the calendar ifFormat : "%Y-%m-%d ", timeFormat : "24", date : startDate, electric : false, showsTime : false, //no time disableFunc : dateInRange2, //the function to call onUpdate : filterDates2 }); } } function filterDates2(cal) { endDate = cal.date; } /* * Both functions disable and hilight dates. */ /* * Can't choose days after the * end date if it is choosen, hilights start and end dates with one style and dates between them with another */ function dateInRange1(date) { if (endDate != null) { // Disable dates after end date var compareEnd = compareDatesOnly(date, endDate); if (compareEnd < 0) { return (true); } // Hilight end date with "edges" style if (compareEnd == 0) { {return "edges";} } // Hilight inner dates with "between" style if (startDate != null){ var compareStart = compareDatesOnly(date, startDate); if (compareStart < 0) { return "between"; } } } //disable days prior to today var today = new Date(); var compareToday = compareDatesOnly(date, today); if (compareToday > 0) { return(true); } //all other days are enabled return false; //alert(ret + " " + today + ":" + date + ":" + compareToday + ":" + days1 + ":" + days2); return(ret); } /* * Can't choose days before the * start date if it is choosen, hilights start and end dates with one style and dates between them with another */ function dateInRange2(date) { if (startDate != null) { // Disable dates before start date var compareDays = compareDatesOnly(startDate, date); if (compareDays < 0) { return (true); } // Hilight end date with "edges" style if (compareDays == 0) { {return "edges";} } // Hilight inner dates with "between" style if ((endDate != null) && (date > startDate) && (date < endDate)) { return "between"; } } var now = new Date(); if (compareDatesOnly(now, date) < 0) { return (true); } //all other days are enabled return false; } Calendario.setup({ inputField : "datade", // id of the input field button : "bt_datade", // What will trigger the popup of the calendar ifFormat : "%Y-%m-%d ", // format of the input field timeFormat : "24", showsTime : false, //no time electric : false, dateStatusFunc : dateInRange1, //the function to call onUpdate : filterDates1 }); Calendario.setup({ inputField : "dataate", button : "bt_dataate", // What will trigger the popup of the calendar ifFormat : "%Y-%m-%d ", timeFormat : "24", showsTime : false, //no time electric : false, dateStatusFunc : dateInRange2, //the function to call onUpdate : filterDates2 }); var foo = new Date(); var bar = new Date(foo - (Date.DAY + 5000));