Seletor de data jQuery - desabilitar datas anteriores

89

Estou tentando selecionar um intervalo de datas usando o seletor de datas da IU.

no campo de / para as pessoas não devem ser capazes de visualizar ou selecionar datas anteriores ao dia atual.

Este é o meu código:

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

Alguém pode me dizer como desativar as datas anteriores à data atual.

Harsha MV
fonte

Respostas:

112

Você deve criar um novo objeto de data e defini-lo como minDatequando você inicializar os selecionadores de data

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

Editar - a partir do seu comentário, agora funciona como esperado http://jsfiddle.net/nicolapeluchetti/dAyzq/1/

Nicola Peluchetti
fonte
2
Eu quero implementar uma maneira que as pessoas não consigam escolher uma data que já passou ... como ontem, dia anterior, etc. Somente de hoje em diante.
Harsha MV
1
@HarshaMV atualizei minha resposta, você deve apenas definir minDate ao inicializar os selecionadores de data
Nicola Peluchetti
Você pode adicionar as showAnim:"",configurações do selecionador de data para remover a mudança irritante de mês e ano quando você faz sua seleção.
Misiu,
Usei seu script, mas estou recebendo o erro "Uncaught ReferenceError: $ is not defined". como vou consertar isso?
mable george
@NicolaPeluchetti Isso é exatamente o que eu preciso, mas pode ser usado em asp: Textbox? Tentei, mas não está funcionando. Há alguma alteração específica que devo fazer? Obrigado antecipadamente
wolfQueen 01 de
74

Declare a variável dateToday e use a função Date () para defini-la .. então use essa variável para atribuir a minDate que é o parâmetro de datepicker.

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

É isso ... A resposta acima foi muito útil ... continue assim, pessoal ..

Sachin
fonte
Resposta clara e direta. Obrigado
ASD de
47
$('#datepicker-dep').datepicker({
    minDate: 0
});

minDate:0 funciona para mim.

Riya Travel
fonte
20

Use a opção "minDate" para restringir a primeira data permitida. O valor "0" significa hoje (0 dias a partir de hoje):

    $(document).ready(function () {
        $("#txtdate").datepicker({
            minDate: 0,
            // ...
        });
    });

Docs aqui: http://api.jqueryui.com/datepicker/#option-minDate

Mosin
fonte
8

Apenas para adicionar a isto:

Se você também precisar evitar que o usuário digite manualmente uma data no passado, esta é uma solução possível. Foi o que acabamos fazendo (com base na resposta de @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);
    }
});

O que isso faz é alterar o valor para a data de hoje se o usuário digitar manualmente uma data no passado.

PålOliver
fonte
6

Demonstração ao vivo , experimente isto,

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

Esta é uma maneira fácil de fazer isso

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

também podemos desativar os dias futuros

$('#datepicker').datepicker('setEndDate', new Date());
Sameera Prasad Jayasinghe
fonte
1
Obrigado! Você parou horas de frustração.
lmiguelvargasf
4

definir o atributo startDate de datepicker, funciona, abaixo está o código de trabalho

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

Documentação da API jQuery - datepicker

A data mínima selecionável. Quando definido paranull , não há mínimo.

Vários tipos suportados:

Data: Um objeto de data contendo a data mínima.
Número: alguns dias a partir de hoje. Por exemplo, 2representa a two dayspartir de hoje e -1representa yesterday.
String: Uma string no formato definido pela dateFormatopção ou uma data relativa.
As datas relativas devem conter pares de valor e período; os períodos válidos são ypara years, mpara months, wpara weekse dpara days. Por exemplo, +1m +7drepresenta one month and seven daysde today.

Para não exibir datas anteriores diferentes de hoje

$('#datepicker').datepicker({minDate: 0});
Mohammad Faisal
fonte
2

O atributo " mindate " deve ser usado para desabilitar datas passadas no jquery datepicker.

minDate: new Date () Ou minDate: '0' é a chave para isso.

Ex:

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

OU

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

apenas substitua seu código:

código antigo:

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

});

novo Código:

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

Pela configuração startDate: new Date()

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

Eu criei uma função para desabilitar a data anterior, desabilitar dias de fim de semana flexíveis (como sábado, domingo)

Estamos usando o método beforeShowDay do plugin jQuery UI datepicker.

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

insira a descrição da imagem aqui

Aqui, a data de hoje é 15 de setembro. Desativei o sábado e o domingo.

Smit Patadiya
fonte
0

você tem que declarar a data atual em variáveis ​​como esta

 $(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)
    });
})
hoga98
fonte
0
$( "#date" ).datetimepicker({startDate:new Date()}).datetimepicker('update', new Date());

new Date(): função obter a data de hoje a data anterior está bloqueada. 100% trabalhando

Muhammad Usman Nasir
fonte
0

você pode simplesmente usar

startDate: 'today'

está funcionando bem para mim.

Moaz Ateeq
fonte