jQuery Date Picker - ปิดใช้งานวันที่ที่ผ่านมา


91

ฉันกำลังพยายามเลือกช่วงวันที่โดยใช้เครื่องมือเลือกวันที่ของ UI

ในช่องจาก / ถึงคนไม่ควรดูหรือเลือกวันที่ก่อนหน้าถึงปัจจุบัน

นี่คือรหัสของฉัน:

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

ช่วยบอกวิธีปิดการใช้งานวันที่ก่อนหน้าถึงวันที่ปัจจุบันได้ไหม

คำตอบ:


114

คุณต้องสร้างออบเจ็กต์วันที่ใหม่และตั้งเป็นminDateเมื่อคุณเริ่มต้น 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);
    }
});

แก้ไข - จากความคิดเห็นของคุณตอนนี้มันใช้งานได้ตามที่คาดไว้http://jsfiddle.net/nicolapeluchetti/dAyzq/1/


2
ฉันต้องการใช้วิธีที่ผู้คนไม่ควรเลือกวันที่ที่ผ่านมา .. เช่นเมื่อวานวันก่อนเป็นต้นตั้งแต่วันนี้เป็นต้นไป
Harsha MV

1
@HarshaMV ฉันอัปเดตคำตอบของฉันคุณควรตั้งค่า minDate เมื่อคุณเริ่มต้น datepickers
Nicola Peluchetti

คุณสามารถเพิ่มshowAnim:"",การตั้งค่า datepicker เพื่อลบการเปลี่ยนแปลงเดือนและปีที่น่ารำคาญเมื่อคุณทำการเลือก
Misiu

ฉันใช้สคริปต์ของคุณ แต่ฉันได้รับข้อผิดพลาด "Uncaught ReferenceError: $ ไม่ได้กำหนด" ฉันจะแก้ไขปัญหานี้อย่างไร
mable george

@NicolaPeluchetti นี่คือสิ่งที่ฉันต้องการ แต่สามารถใช้ใน asp: Textbox ได้หรือไม่? ฉันลองแล้ว แต่ไม่ได้ผลมีการเปลี่ยนแปลงใดที่ควรทำหรือไม่ ขอบคุณล่วงหน้า
wolfQueen

74

ประกาศตัวแปร dateToday และใช้ฟังก์ชัน Date () เพื่อตั้งค่า .. จากนั้นใช้ตัวแปรนั้นเพื่อกำหนดให้กับ minDate ซึ่งเป็นพารามิเตอร์ของ datepicker

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

แค่นั้นแหละ ... คำตอบข้างบนมีประโยชน์จริงๆ ... ติดตามกันต่อไป ..


คำตอบที่ชัดเจนและตรงไปตรงมาขอบคุณ
ASD


20

ใช้ตัวเลือก "minDate" เพื่อ จำกัด วันที่ที่เร็วที่สุดที่อนุญาต ค่า "0" หมายถึงวันนี้ (0 วันนับจากวันนี้):

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

เอกสารที่นี่: http://api.jqueryui.com/datepicker/#option-minDate


8

เพื่อเพิ่มสิ่งนี้:

หากคุณต้องการป้องกันไม่ให้ผู้ใช้พิมพ์วันที่ในอดีตด้วยตนเองนี่เป็นวิธีแก้ปัญหาที่เป็นไปได้ นี่คือสิ่งที่เราทำ (ตามคำตอบของ @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);
    }
});

สิ่งนี้คือการเปลี่ยนค่าเป็นวันที่ของวันนี้หากผู้ใช้พิมพ์วันที่ในอดีตด้วยตนเอง


6

สาธิตสดลองสิ่งนี้

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

นี่เป็นวิธีง่ายๆในการทำเช่นนี้

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

นอกจากนี้เรายังสามารถปิดการใช้งานวันในอนาคต

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

1
ขอขอบคุณ! คุณหยุดความหงุดหงิดได้หลายชั่วโมง
lmiguelvargasf

4

ตั้งค่าแอตทริบิวต์ startDate ของ datepicker มันใช้งานได้ด้านล่างคือรหัสการทำงาน

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

3

โดยการตั้งค่า startDate: new Date()

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

2

เอกสาร jQuery API - datepicker

วันที่เลือกขั้นต่ำได้ เมื่อตั้งค่าnullเป็นไม่มีขั้นต่ำ

รองรับหลายประเภท:

วันที่:วัตถุวันที่ที่มีวันที่ต่ำสุด
Number:จำนวนวันนับจากวันนี้ ยกตัวอย่างเช่น2เป็นตัวแทนtwo daysจากวันนี้และแสดงให้เห็นถึง-1 String:สตริงในรูปแบบที่กำหนดโดยตัวเลือกหรือวันที่สัมพันธ์ วันที่สัมพัทธ์ต้องมีคู่ค่าและช่วงเวลา ระยะเวลาที่ถูกต้องสำหรับ, สำหรับ, สำหรับ, และสำหรับ ยกตัวอย่างเช่นการเป็นตัวแทนจากyesterday
dateFormat
yyearsmmonthswweeksddays+1m +7done month and seven daystoday

เพื่อไม่ให้แสดงวันก่อนหน้านอกเหนือจากวันนี้

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

2

" mindateแอตทริบิวต์" ควรจะใช้ในวันที่ผ่านปิดการใช้งานใน jQuery datepicker

minDate: new Date () หรือ minDate: '0' เป็นกุญแจสำคัญสำหรับสิ่งนี้

Ex:

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

หรือ

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

2

เพียงแค่แทนที่รหัสของคุณ:

รหัสเก่า:

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

});

รหัสใหม่:

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

1

ฉันได้สร้างฟังก์ชันเพื่อปิดใช้งานวันที่ก่อนหน้าปิดใช้งานวันหยุดสุดสัปดาห์ที่ยืดหยุ่น (เช่นวันเสาร์วันอาทิตย์)

เรากำลังใช้ เมธอดbeforeShowDayของปลั๊กอิน 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
    });

ป้อนคำอธิบายภาพที่นี่

วันนี้คือวันที่ 15 กันยายนฉันปิดการใช้งานในวันเสาร์และวันอาทิตย์


0

คุณต้องประกาศวันที่ปัจจุบันเป็นตัวแปรเช่นนี้

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


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.