jQuery Date Picker - wyłącz przeszłe daty


89

Próbuję wybrać zakres dat za pomocą selektora dat w interfejsie użytkownika.

w polu od / do ludzie nie powinni mieć możliwości przeglądania ani wybierania dat poprzedzających dzień dzisiejszy.

To jest mój kod:

$(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 );
        }
    });
});

Czy ktoś może mi powiedzieć, jak wyłączyć daty przed datą obecną.

Odpowiedzi:


112

Musisz utworzyć nowy obiekt daty i ustawić go tak, jak minDateprzy inicjalizacji 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);
    }
});

Edytuj - od twojego komentarza teraz działa zgodnie z oczekiwaniami http://jsfiddle.net/nicolapeluchetti/dAyzq/1/


2
Chcę wdrożyć sposób, w jaki ludzie nie powinni być w stanie wybrać daty, która minęła… jak wczoraj, itp. Tylko od dziś i dalej.
Harsha MV

1
@HarshaMV Zaktualizowałem moją odpowiedź, powinieneś po prostu ustawić minDate podczas inicjalizacji datepickers
Nicola Peluchetti

Możesz dodać showAnim:"",do ustawień DatePicker, aby usunąć irytujące zmiany miesiąca i roku po dokonaniu wyboru.
Misiu

Użyłem twojego skryptu, ale pojawia się błąd „Uncaught ReferenceError: $ is not defined”. jak to naprawię?
mable george

@NicolaPeluchetti To jest dokładnie to, czego potrzebuję, ale czy można tego użyć w asp: Textbox? Próbowałem, ale to nie działa, czy jest jakaś konkretna zmiana, którą powinienem zrobić? Z góry
dziękuję

74

Zadeklaruj zmienną dateToday i użyj funkcji Date (), aby ją ustawić .. następnie użyj tej zmiennej, aby przypisać ją do minDate, która jest parametrem datepicker'a.

var dateToday = new Date(); 
$(function() {
    $( "#datepicker" ).datepicker({
        numberOfMonths: 3,
        showButtonPanel: true,
        minDate: dateToday
    });
});

To wszystko ... Powyższa odpowiedź była bardzo pomocna ... tak trzymajcie ...


Jasna i prosta odpowiedź ... Dzięki
ASD



8

Wystarczy dodać do tego:

Jeśli chcesz również uniemożliwić użytkownikowi ręczne wpisywanie daty z przeszłości, jest to możliwe rozwiązanie. Oto, co ostatecznie zrobiliśmy (na podstawie odpowiedzi @Nicola Peluchetti)

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);
    }
});

To powoduje zmianę wartości na dzisiejszą datę, jeśli użytkownik ręcznie wpisze datę z przeszłości.


6

Live Demo , spróbuj tego,

    $('#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);                             
     }
   });

5

To łatwy sposób

$('#datepicker').datepicker('setStartDate', new Date());

możemy również wyłączyć przyszłe dni

$('#datepicker').datepicker('setEndDate', new Date());

1
Dziękuję Ci! Zatrzymałeś godziny frustracji.
lmiguelvargasf

4

ustaw atrybut startDate w datepicker, działa, poniżej działający kod

$(function(){
$('#datepicker').datepicker({
    startDate: '-0m'
    //endDate: '+2d'
}).on('changeDate', function(ev){
    $('#sDate1').text($('#datepicker').data('date'));
    $('#datepicker').datepicker('hide');
});
})

2

Dokumentacja jQuery API - datepicker

Minimalna data do wyboru. Po ustawieniu nullnie ma minimum.

Obsługiwane wiele typów:

Data: obiekt daty zawierający minimalną datę.
Liczba: liczba dni od dzisiaj. Na przykład 2reprezentuje two daysod dzisiaj i -1reprezentuje yesterday.
Ciąg: ciąg w formacie zdefiniowanym przez dateFormatopcję lub datę względną.
Daty względne muszą zawierać pary wartości i okresów; ważne okresy to yza years, mza months, wza weeksi dza days. Na przykład +1m +7dreprezentuje one month and seven daysfrom today.

Aby nie wyświetlać poprzednich dat innych niż dzisiejszy

$('#datepicker').datepicker({minDate: 0});

2

Atrybutmindate ” powinien być używany do wyłączania minionych dat w jquery datepicker.

minDate: new Date () Lub minDate: kluczem do tego jest '0'.

Ex:

$(function() {
    $( "#datepicker" ).datepicker({minDate: new Date()});
});

LUB

$(function() {
  $( "#datepicker" ).datepicker({minDate: 0});
});

2

po prostu zastąp swój kod:

stary kod:

$("#dateSelect").datepicker({
    showOtherMonths: true,
    selectOtherMonths: true,
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    dateFormat: 'yy-mm-dd'

});

nowy kod:

$("#dateSelect").datepicker({
    showOtherMonths: true,
    selectOtherMonths: true,
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    dateFormat: 'yy-mm-dd',
    minDate: 0
});

2

Przez ustawienie startDate: new Date()

$('.date-picker').datepicker({
    defaultDate: "+1w",
    changeMonth: true,
    numberOfMonths: 1,
    ...
    startDate: new Date(),
});

1

Stworzyłem funkcję wyłączania poprzedniej daty, wyłączania elastycznych dni weekendowych (jak sobota, niedziela)

Używamy metody beforeShowDay wtyczki datepicker jQuery UI.

<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
    });

wprowadź opis obrazu tutaj

Tutaj dzisiejsza data to 15 września. Wyłączyłem sobotę i niedzielę.


0

musisz zadeklarować bieżącą datę w takich zmiennych jak ta

 $(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)
    });
})

0
$( "#date" ).datetimepicker({startDate:new Date()}).datetimepicker('update', new Date());

new Date(): funkcja pobiera dzisiejszą datę poprzednia data jest zablokowana. 100% sprawne


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.