1. Apex:inputfield:
We can simply use apex:inputfield and bind the field with date type field and it will automatically use the Salesforce Calander:
<apex:page standardcontroller=Contact>
<apex:form>
<apex:inputfield value=”{!Contact.Birthdate}”>
</apex:form>
</apex:page>
2. Apex:inputtext:
<apex:page standardcontroller="testcontroller" id="vfPage">
<apex:form>
<apex:inputText label="Birth Date" value="{!birthdateVariable}" onfocus="DatePicker.pickDate(false, this, false);"/>
</apex:form>
</apex:page>
Here birthdateVariable is a variable being referred from controller.
3. Using jQueryUI Date Picker:
<apex:page standardController="Contact">
<head>
<apex:stylesheet value="https://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
<apex:includeScript value="https://code.jquery.com/jquery-1.9.1.js" />
<apex:includeScript value="https://code.jquery.com/ui/1.10.3/jquery-ui.js" />
</head>
<body>
<script type="text/javascript">
j$ = jQuery.noConflict();
j$(document).ready(function()
{
j$( "#event_start_date" ).datepicker(
{
defaultDate: "+1w",
changeMonth: true,
changeYear: true,
numberOfMonths: 1,
dateFormat:"mm-dd-yy",
altField: "#event_start_date_alternate",
altFormat: "yy-mm-dd",
showAnim: "slide"
})
});
</script>
<apex:form >
<apex:pageMessages id="errors" />
<apex:pageBlock title="Date Picker Demo 1" mode="edit">
<input type="text" name="event_start_date" id="event_start_date" />
</apex:pageBlock>
</apex:form>
</body>
</apex:page>
</apex:form>
</apex:page>

nice post.