可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am trying to have a date Range select using the UI date picker.
in the from/to field people should not be able to view or select dates previous to the present day.
This is my code:
$(function() {
var dates = $( \"#from, #to\" ).datepicker({
defaultDate: \"+1w\",
changeMonth: true,
numberOfMonths: 1,
onSelect: function( selectedDate ) {
var option = this.id == \"from\" ? \"minDate\" : \"maxDate\",
instance = $( this ).data( \"datepicker\" ),
date = $.datepicker.parseDate(
instance.settings.dateFormat ||
$.datepicker._defaults.dateFormat,
selectedDate, instance.settings );
dates.not( this ).datepicker( \"option\", option, date );
}
});
});
Can some one tell me how to disable dates previous the to the present date.
回答1:
You must create a new date object and set it as minDate
when you initialize the datepickers
<label for=\"from\">From</label> <input type=\"text\" id=\"from\" name=\"from\"/> <label for=\"to\">to</label> <input type=\"text\" id=\"to\" name=\"to\"/>
var dateToday = new Date();
var dates = $(\"#from, #to\").datepicker({
defaultDate: \"+1w\",
changeMonth: true,
numberOfMonths: 3,
minDate: dateToday,
onSelect: function(selectedDate) {
var option = this.id == \"from\" ? \"minDate\" : \"maxDate\",
instance = $(this).data(\"datepicker\"),
date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
dates.not(this).datepicker(\"option\", option, date);
}
});
Edit - from your comment now it works as expected http://jsfiddle.net/nicolapeluchetti/dAyzq/1/
回答2:
Declare dateToday variable and use Date() function to set it..
then use that variable to assign to minDate which is parameter of datepicker.
var dateToday = new Date();
$(function() {
$( \"#datepicker\" ).datepicker({
numberOfMonths: 3,
showButtonPanel: true,
minDate: dateToday
});
});
That\'s it... Above answer was really helpful... keep it up guys..
回答3:
$(\'#datepicker-dep\').datepicker({
minDate: 0
});
minDate:0
works for me.
回答4:
Use the \"minDate\" option to restrict the earliest allowed date.
The value \"0\" means today (0 days from today):
$(document).ready(function () {
$(\"#txtdate\").datepicker({
minDate: 0,
// ...
});
});
Docs here: http://api.jqueryui.com/datepicker/#option-minDate
回答5:
Just to add to this:
If you also need to prevent the user to manually type a date in the past, this is a possible solution. This is what we ended up doing (based on @Nicola Peluchetti\'s answer)
var dateToday = new Date();
$(\"#myDatePickerInput\").change(function () {
var updatedDate = $(this).val();
var instance = $(this).data(\"datepicker\");
var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, updatedDate, instance.settings);
if (date < dateToday) {
$(this).datepicker(\"setDate\", dateToday);
}
});
What this does is to change the value to today\'s date if the user manually types a date in the past.
回答6:
Live Demo ,try this,
$(\'#from\').datepicker(
{
minDate: 0,
beforeShow: function() {
$(this).datepicker(\'option\', \'maxDate\', $(\'#to\').val());
}
});
$(\'#to\').datepicker(
{
defaultDate: \"+1w\",
beforeShow: function() {
$(this).datepicker(\'option\', \'minDate\', $(\'#from\').val());
if ($(\'#from\').val() === \'\') $(this).datepicker(\'option\', \'minDate\', 0);
}
});
回答7:
set startDate attribute of datepicker, it works, below is the working code
$(function(){
$(\'#datepicker\').datepicker({
startDate: \'-0m\'
//endDate: \'+2d\'
}).on(\'changeDate\', function(ev){
$(\'#sDate1\').text($(\'#datepicker\').data(\'date\'));
$(\'#datepicker\').datepicker(\'hide\');
});
})
回答8:
jQuery API documentation - datepicker
The minimum selectable date. When set to null
, there is no minimum.
Multiple types supported:
Date: A date object containing the minimum date.
Number: A number of days from today. For example 2
represents two days
from today and -1
represents yesterday
.
String: A string in the format defined by the dateFormat
option, or a relative date.
Relative dates must contain value and period pairs; valid periods are y
for years
, m
for months
, w
for weeks
, and d
for days
. For example, +1m +7d
represents one month and seven days
from today
.
In order not to display previous dates other than today
$(\'#datepicker\').datepicker({minDate: 0});
回答9:
\"mindate\" attribute should be used to disable passed dates in jquery datepicker.
minDate: new Date() Or minDate: \'0\' is the key for this.
Ex:
$(function() {
$( \"#datepicker\" ).datepicker({minDate: new Date()});
});
OR
$(function() {
$( \"#datepicker\" ).datepicker({minDate: 0});
});
回答10:
just replace your code:
old code:
$(\"#dateSelect\").datepicker({
showOtherMonths: true,
selectOtherMonths: true,
changeMonth: true,
changeYear: true,
showButtonPanel: true,
dateFormat: \'yy-mm-dd\'
});
new code:
$(\"#dateSelect\").datepicker({
showOtherMonths: true,
selectOtherMonths: true,
changeMonth: true,
changeYear: true,
showButtonPanel: true,
dateFormat: \'yy-mm-dd\',
minDate: 0
});
回答11:
This is easy way to do this
$(\'#datepicker\').datepicker(\'setStartDate\', new Date());
also we can disable future days
$(\'#datepicker\').datepicker(\'setEndDate\', new Date());
回答12:
you have to declare current date into variables like this
$(function() {
var date = new Date();
var currentMonth = date.getMonth();
var currentDate = date.getDate();
var currentYear = date.getFullYear();
$(\'#datepicker\').datepicker({
minDate: new Date(currentYear, currentMonth, currentDate)
});
})
回答13:
$( \"#date\" ).datetimepicker({startDate:new Date()}).datetimepicker(\'update\', new Date());
new Date()
: function get the todays date
previous date are locked.
100% working
回答14:
I have created function to disable previous date, disable flexible weekend days (Like Saturday, Sunday)
We are using beforeShowDay method of jQuery UI datepicker plugin.
<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js\"></script>
var NotBeforeToday = function(date) {
var now = new Date(); //this gets the current date and time
if (date.getFullYear() == now.getFullYear() && date.getMonth() == now.getMonth() && date.getDate() >= now.getDate() && (date.getDay() > 0 && date.getDay() < 6) )
return [true,\"\"];
if (date.getFullYear() >= now.getFullYear() && date.getMonth() > now.getMonth() && (date.getDay() > 0 && date.getDay() < 6))
return [true,\"\"];
if (date.getFullYear() > now.getFullYear() && (date.getDay() > 0 && date.getDay() < 6))
return [true,\"\"];
return [false,\"\"];
}
jQuery(\"#datepicker\").datepicker({
beforeShowDay: NotBeforeToday
});
Here today\'s date is 15th Sept. I have disabled Saturday and Sunday.