2009-12-23 41 views
33

Tôi có một hàm thực hiện truy vấn để lấy một số dữ liệu dựa trên một phạm vi ngày nhất định được chọn bằng cách sử dụng .datepicker(). Tôi đang cố gắng đặt trình đặt ngày tháng trong dữ liệu phản hồi về phạm vi ngày đã được chọn trước khi truy vấn được thực thi..datepicker ('setdate'), trong jQuery

queryDate = '2009-11-01'; 
$('#datePicker').datepicker('setDate', queryDate); 

có kết quả thú vị là đặt datepicker thành ngày hôm nay! Tôi sẽ không quá bối rối nếu nó chỉ phát ra một lỗi. Tại sao nó đặt nó vào ngày hôm nay?

Làm cách nào để lấy ngày được định dạng như 'yyyy-mm-dd' và đặt bộ đếm ngày cho nó?

Tôi nghĩ có thể tốt nhất là chỉ đặt hộp văn bản mà trình ghi ngày tháng được liên kết đến 'queryDate'.

Trả lời

31

Bạn nên phân tích chuỗi ngày, kể từ bằng cách sử dụng định dạng ngày ISO8601 với các nhà xây dựng Date không được hỗ trợ cross-browserly nào, (một số trình duyệt hỗ trợ nó vì nó sẽ là một phần của tiêu chuẩn EcmaScript 5):

var queryDate = '2009-11-01', 
    dateParts = queryDate.match(/(\d+)/g) 
    realDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]); 
            // months are 0-based! 

$('#datePicker').datepicker({ dateFormat: 'yy-mm-dd' }); // format to show 
$('#datePicker').datepicker('setDate', realDate); 

Kiểm tra ví dụ trên here.

+4

Bạn đã bỏ lỡ một chút: '$ ('# datePicker'). Datepicker ('setDate', realDate);' –

+1

Thanks !, fixed ... – CMS

+3

Không phân tích cú pháp ngày của bạn. Đây là cách tiếp cận xấu. Sử dụng hàm datepicker parseDate tốt hơn. Hãy nhìn vào câu trả lời của tôi. – jurka

6

Cố gắng thay đổi nó để:

queryDate = '2009-11-01'; 
$('#datePicker').datepicker({defaultDate: new Date (queryDate)}); 
10

Như bài Scobal của nó, datepicker đang tìm kiếm một đối tượng Date - không chỉ là một chuỗi! Vì vậy, để sửa đổi mã ví dụ của bạn để làm những gì bạn muốn:

var queryDate = new Date('2009/11/01'); // Dashes won't work 
$('#datePicker').datepicker('setDate', queryDate); 
+0

Làm việc như một nét duyên dáng. Và thay vì sử dụng đối tượng Date dựng sẵn hơn một số phân tích cú pháp DIY theo giải pháp CMS –

+3

Tuy nhiên, trạng thái tài liệu hiện tại: Ngày mới có thể là đối tượng Ngày hoặc chuỗi ở định dạng ngày hiện tại. Bạn đặt định dạng khi tạo datepicker với .datepicker ({dateFormat: 'yy-mm-dd'}); và điều này không hoạt động - đây có phải là một lỗi, một lỗi với tài liệu hoặc một cái gì đó khác? –

1

Kiểm tra xem ngày bạn đang cố gắng đặt ngày nằm trong phạm vi ngày được phép nếu tùy chọn minDate hoặc maxDate được đặt.

69

Khi bạn cố gắng gọi setDate, bạn phải cung cấp đối tượng Ngày javascript hợp lệ.

queryDate = '2009-11-01'; 

var parsedDate = $.datepicker.parseDate('yy-mm-dd', queryDate); 

$('#datePicker').datepicker('setDate', parsedDate); 

Điều này sẽ cho phép bạn sử dụng các định dạng khác nhau cho ngày truy vấn và biểu diễn ngày chuỗi trong ngày tháng. Cách tiếp cận này rất hữu ích khi bạn tạo trang đa ngôn ngữ. Một hàm hữu ích khác là formatDate, định dạng đối tượng ngày javascript thành chuỗi.

$.datepicker.formatDate(format, date, settings); 
+12

+1 Tốt hơn nhiều so với câu trả lời được chấp nhận. SO quá tệ không có cách nào để chỉ ra rằng một câu trả lời hay hơn được đưa ra (trong trường hợp này là năm sau) sau câu trả lời đã được chấp nhận. – Hollister

+0

@Hollister, bạn có thể gắn cờ câu hỏi cho người kiểm duyệt để xem, tất nhiên giải thích rằng câu trả lời sau sẽ tốt hơn. Tôi nghĩ rằng người kiểm duyệt có thể thay đổi sự chấp nhận câu trả lời. –

2
function calenderEdit(dob) { 
    var date= $('#'+dob).val(); 
    $("#dob").datepicker({ 
     changeMonth: true, 
     changeYear: true, yearRange: '1950:+10' 
    }).datepicker("setDate", date); 
} 
+0

Chính xác những gì đang tìm kiếm, thưa sếp –