2012-10-30 40 views
9

có cách nào để có tất cả các ngày trong một tháng hoặc một năm không? Tôi đang tìm kiếm điều này để vô hiệu hóa một số ngày cụ thể trong một datepicker, tôi sẽ có một trang trong back-office để chọn những ngày này để vô hiệu hóa.Tìm tất cả các ngày trong một tháng với đối tượng Ngày?

Vì vậy, tôi cần phải hiển thị tất cả các ngày trong một tháng và thêm nút "kích hoạt hoặc vô hiệu" bên dưới mỗi ngày. Có cách nào để tìm những ngày này với đối tượng Date không? Tôi tìm thấy liên kết này ví dụ: Displaying all the days of a month nhưng tôi không thực sự hiểu nó, cộng với nó là Java, tôi đang cố gắng tìm một giải pháp trong javascript.

Cảm ơn bạn đã giúp đỡ của bạn

+0

"tìm những ngày này" hoặc "có những ngày này" thực sự có ý nghĩa gì? Mục tiêu không rõ ràng – charlietfl

Trả lời

37

Để nhận danh sách tất cả các ngày trong một tháng, bạn có thể bắt đầu bằng số Date vào ngày đầu tiên của tháng, tăng ngày cho đến khi tháng thay đổi.

/** 
* @param {int} The month number, 0 based 
* @param {int} The year, not zero based, required to account for leap years 
* @return {Date[]} List with date objects for each day of the month 
*/ 
function getDaysInMonth(month, year) { 
    var date = new Date(year, month, 1); 
    var days = []; 
    while (date.getMonth() === month) { 
     days.push(new Date(date)); 
     date.setDate(date.getDate() + 1); 
    } 
    return days; 
} 

Ví dụ http://jsfiddle.net/kKj8h/1/

+0

Cảm ơn rất nhiều Juan, đây chính xác là những gì tôi cần! Cảm ơn rất nhiều – Paul

+0

Chỉnh sửa nhỏ cho mã date.setDate (date.getDate() + 1); nên đi trước cuộc gọi mảng date.push – Timothy

+0

@Timothy Trường hợp thử nghiệm nào không hoạt động? –

4

Tôi không chắc chắn từ mô tả của bạn nếu ngày tháng chuẩn của trình duyệt date sẽ hoạt động với bạn, vì vậy tôi sẽ trả lời trực tiếp cho bạn.

Bạn có thể xây dựng một loạt các ngày trong một tháng khá dễ dàng bằng cách làm này:

var numOfDays = new Date(2012, 10, 0).getDate(); //use 0 here and the actual month 
var days = new Array(); 

//This will construct an array with all the elements represent the day of the week 
//(i.e. Oct 30th would be days[30-1] or days[29]) and the value would be the actual 
//day of the week (i.e. Tuesday which is representing by the number 2) 
for(var i=0;i<=numOfDays;i++) 
{ 
    days[i] = new Date(2012,9,i+1).getDay(); //use month-1 here    
} 
//This will give you a number from 0 - 6 which represents (Sunday - Saturday) 
alert(days[29]); 

Sử dụng rằng mảng ngày bạn có thể khá nhiều làm bất cứ điều gì bạn muốn với nó và biết các ngày của tuần là tốt.

+0

cảm ơn Jeremy vì câu trả lời của bạn! – Paul

1

Dưới đây là một loopp chạy qua từng tháng để xác định ngày cuối cùng của tháng đó. Ngày lập chỉ mục đối tượng Javascript tháng bắt đầu từ số không và nếu bạn đặt ngày thành 0 thì nó sẽ trở lại ngày cuối cùng của tháng trước đó. Handy để xác định năm nhuận ngày cuối tháng hai

Date(2012, 12, 0) sẽ trở lại ngày 31 tháng 12 năm 2012

Date (2012,0,0) sẽ trở lại tháng mười hai 31,2011

và tất cả các quan trọng để tìm ra là tháng hai với

Date (2012,3,0) Trả về ngày 29 tháng 2 kể từ năm nhuận năm

var mos=['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'] 

for (i = 0; i < 12; i++) { 
    var lastDate = new Date(2012, i+1, 0); 
    $('body').append('Last day of ' + mos[i] + ' is ' + lastDate.getDate()+'<br>') 
} 

DEMO: http://jsfiddle.net/5k8sn/1/

+0

Cảm ơn charlietfl vì câu trả lời của bạn! – Paul

1

Tôi đã triển khai chức năng bạn đã yêu cầu bằng cách sử dụng một trình đếm ngày tháng jQuery.

Đầu tiên, thêm tất cả những ngày đã chọn trong văn phòng lại bị vô hiệu vào một mảng

// format yyyy-mm-dd 
var disabledDates = [ 
    "2012-10-01", 
    "2012-10-02", 
    "2012-10-30", 
    "2012-09-12" 
]; 

Thứ hai, xác định datepicker với hai chức năng

$("#datepicker").datepicker({ 

    // only enable date if dateEnabled returns [true] 
    beforeShowDay: dateEnabled, 

    // once a date has been selected call dateSelected 
    onSelect: dateSelected 
}); 

Dưới đây là định nghĩa của yêu cầu chức năng

function dateEnabled(d) { 

    // if date found in array disable date 
    if(disabledDates.indexOf(getDate(d)) > -1) { 

     return [false]; 

    } else { 

     return [true] ; 

    } 
} 

Chuyển đổi ngày thành chuỗi để so sánh với ngày tháng ở mảng

function getDate(d) { 
    var day, 
     month, 
     year; 

    day = d.getDate(); 
    month = d.getMonth() + 1; // add 1 as getMonth returns 0 - 11 
    year = d.getFullYear(); 

    if(month < 10) month = "0" + month; 
    if(day < 10) day = "0" + day; 
    return year + "-" + month + "-" + day; 
} 

Khi một ngày đã được quá trình chọn nó

function dateSelected(d) { 
    // do stuff with string representation of date           
} 

Đây là một fiddle http://jsfiddle.net/KYzaR/7/

Chỉ cần nghĩ rằng nó sẽ là đáng nói đến là Array.indexOf là một bổ sung gần đây để ECMA -262 tiêu chuẩn và vì vậy trong trường hợp của IE7 và IE8 nó không được hỗ trợ. Trang MDN sau cung cấp mã triển khai Array.indexOf cho các trình duyệt này https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf

+0

cảm ơn rất nhiều Bruno, đây chính xác là những gì tôi đang tìm kiếm! – Paul

+0

@Juan Mendes Tôi không chắc chắn để hiểu ý bạn là gì, chúng ta nên làm gì nếu chúng ta không sử dụng indexOf? – Paul

+0

@Juan Mendes được rồi, cảm ơn – Paul

Các vấn đề liên quan