主要日历是否可以禁用过去的日期和时间?

时间:2012-09-11 21:04:36

标签: javascript calendar primefaces

我正在尝试在网站上制作日历弹出窗口以允许用户选择日期。这是用于提醒/任务实现。我不希望用户能够选择以前的日期或时间。

所有人都给出了这个问题的建议mindate="today (get new Date())"。这很好,因为它使前几天无法被选中。然而,人们仍然可以选择今天的时间,即现在的时间。因此,人们自然会选择minHourminMinute,但这些也会保留以后的日子。因此,如果我拥有所有这三个,我们就会接近,但问题是,如果我选择明天的日期,它将只允许基于minMinuteminHour的时间,基于您的系统时间"today (get new Date())"。您应该可以在明天任何时候选择。

我是否可以使日历仅在“现在”之后的日期和时间有效?

这似乎是一种自然环境。 futureDates="disabled"pastDates="disabled"

1 个答案:

答案 0 :(得分:0)

我想在默认情况下无法在同一个日历组件中执行所有操作。因为它要求您在用户选择日期后更改minHourminMinute的值。这意味着日历组件需要再次渲染。

您可以将其分为两个部分:一个用于选择日期,另一个用于选择时间。

然后,当用户选择日期并根据所选日期重新呈现时间组件并根据所选日期设置minHourminMinute时,您可以执行ajax调用。

这就是xhtml的样子:

<p:calendar id="dateOnly" mindate="#{datePickerView.minDate}"
    value="#{datePickerView.chosenDate}">

    <p:ajax event="dateSelect" listener="#{datePickerView.handleDateSelect}" update="timeOnly" />  
</p:calendar>

<br />

<p:calendar id="timeOnly" value="#{datePickerView.chosenTime}" 
    pattern="HH:mm" timeOnly="true" minHour="#{datePickerView.minHour}" 
    minMinute="#{datePickerView.minMinute}" />

这就是bean的样子:

public class DatePickerView implements Serializable {
    private static final long serialVersionUID = 1L;

    private Date chosenDate;
    private Date chosenTime;

    public void handleDateSelect(DateSelectEvent event) {
        chosenDate = event.getDate();
    }

    public Date getMinDate() {
        return Calendar.getInstance().getTime();
    }

    public int getMinHour() {
        if (chosenDate.after(Calendar.getInstance().getTime())) {
            return 0;
        } else {
            return Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
        }
    }

    public int getMinMinute() {
        if (chosenDate.after(Calendar.getInstance().getTime())) {
            return 0;
        } else {
            return Calendar.getInstance().get(Calendar.MINUTE);
        }
    }

    public Date getChosenDate() {
        return chosenDate;
    }

    public void setChosenDate(Date chosenDate) {
        this.chosenDate = chosenDate;
    }

    public Date getChosenTime() {
        return chosenTime;
    }

    public void setChosenTime(Date chosenTime) {
        this.chosenTime = chosenTime;
   }
}

您当然应该添加时区处理等。