You can bind directly to a date field on an sObject(in my example contact) using Visualforce like this:
<apex:inputField value="{!Contact.BirthDate}" />
Visualforce will render as appropriate based on the data type of your field. So if your using standard Salesforce styles in your page, this will cause the salesforce default calendar to be displayed. Otherwise you can take a look here for some more ideas. Also it may be worthwhile to take a look at this for info on how you can format dates in VF.
Lets explore all the ways to form Date pickers
a)Using inputfield is best solution .
Disadvantage:Field level security and profile settings .If your object dont have edit access or field is hidden for any profile the same will apply and there is no way to bypass this security if you wish to by pass for various profiles (Note this is also advantage if your requirement is not to allow edit based on profile)
b)Hackish solution with input text
Visualforce page:
<apex:page controller="datePicker" id="mypage">
<apex:form>
Date: <apex:inputText value="{!datename}" size="10" id="demo" onfocus="DatePicker.pickDate(false, this , false);" />
</apex:form>
</apex:page>
Apex Controller:
public class DatePicker {
public String datename {get; set;}
}
Disadvantage :hacked the JavaScript of salesforce and not officially recommended .
c)New trend after winter 14
<apex:pageBlockSection >
<apex:outputLabel ></apex:outputLabel>
<apex:input label="datePicker" value="{! fDate }" type="auto"/>
</apex:pageBlockSection>
public class winter14Ctrl {
public Date fDate { get; set; }
}
Advantage :This is native to salesforce and safely recommended
Disadvantages:
Not supported in Firefox and IE. Source: http://caniuse.com/#search=input%20type
Your all the instances must be updated to winter 13
d)Using jquery component to do this .Jquery library or jquery UI will have this component
disadvantage:More developer skills needed and lot of testing with different browser
Best Answer
You can do this with
jQuery Datepicker
set themaxDate
property to 0 so that it will disable future dates. Hope this helps.