2012-07-04 46 views
5

làm cách nào tôi có thể nhận được cả tháng trong tên ngày được cung cấp theo tháng/năm? như:JavaScript: nhận được mảng tên ngày của ngày cụ thể (tháng/năm)

var year = "2000"; 
var month = "7" 

... some code here that makes an array with names of days of the given month... 

và đầu ra trông giống như sau:

Array ("1. Sunday", "2. Monday", "3. Tuesday", ... "29. Thursday", "30. Friday", "31. Saturday"); 

Trân trọng, Chris

+0

Đây không phải là câu hỏi "JavaScript" vì đó là câu hỏi "API ngày tôi muốn sử dụng". Phần JavaScript dễ dàng như chiếc bánh khi bạn tìm thấy một API sẽ xác định những ngày trong tuần đã giảm trong một tháng cụ thể của một năm cụ thể. – natlee75

+0

Đầu ra nào bạn mong đợi cho ngày này.Saturday? –

+0

Đầu đó ... không quá khó chút nào ... không suy nghĩ rõ ràng về điều này :-) – natlee75

Trả lời

9

Điều này sẽ làm những gì bạn yêu cầu.

function getDaysArray(year, month) { 
    var numDaysInMonth, daysInWeek, daysIndex, index, i, l, daysArray; 

    numDaysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; 
    daysInWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; 
    daysIndex = { 'Sun': 0, 'Mon': 1, 'Tue': 2, 'Wed': 3, 'Thu': 4, 'Fri': 5, 'Sat': 6 }; 
    index = daysIndex[(new Date(year, month - 1, 1)).toString().split(' ')[0]]; 
    daysArray = []; 

    for (i = 0, l = numDaysInMonth[month - 1]; i < l; i++) { 
     daysArray.push((i + 1) + '. ' + daysInWeek[index++]); 
     if (index == 7) index = 0; 
    } 

    return daysArray; 
} 
+0

Nếu bạn muốn tôi thêm nhận xét để giải thích những gì tôi đang làm ở mỗi bước, hãy cho tôi biết và tôi sẽ chỉnh sửa bài đăng. – natlee75

+0

Cảm ơn bạn rất nhiều! điều này thật đúng với gì mà tôi đã tìm kiếm. Cảm ơn một lần nữa! – Chris

2

Hãy thử điều này

<!DOCTYPE html> 
<html> 
<body> 

<p id="demo">Click the button to display todays day of the week.</p> 

<button onclick="myFunction()">Try it</button> 

<script type="text/javascript"> 
function daysInMonth(month,year) { 
    return new Date(year, month, 0).getDate(); 
} 

function myFunction() 
{var b=[],weekday = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],month=7,year=2000; 
for(var i=1,l=daysInMonth(month,year);i<l;i++){ 
var d = new Date(year,month-1,i); 
b.push(i+"."+weekday[d.getDay()]); 
} 
console.log(b);}//b is the desired array 
</script> 

</body> 
</html> 
+0

Cần lưu ý rằng trong 'myFunction()', 'month' là 1-based, không phải 0 dựa trên; đó là cách duy nhất để bạn triển khai 'daysInMonth' sẽ hoạt động chính xác. Điều này có thể gây nhầm lẫn khi đối tượng 'Ngày' của javascript sử dụng giá trị tháng không dựa trên số – jackwanders

+0

Không, tháng là không dựa trên. Xem https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/ – scottheckel

+0

Ngoài ra, bằng cách sử dụng 'mảng mới' cho mảng' weekday' của bạn không hiệu quả, bạn nên thực hiện 'weekday = ['Sunday ',' Thứ Hai ',' Thứ Ba ',' Thứ Tư ',' Thứ Năm ',' Thứ Sáu ',' Thứ Bảy '] '. Ngoài ra, không cần phải tạo lại mảng trong mỗi lần lặp của vòng lặp 'for' của bạn. – jackwanders

0

Bạn có thể làm logic mình khá dễ dàng bằng cách sử dụng Javascript ngày đối tượng chuẩn. Đây là một ví dụ về việc có một ngày để đẩy vào mảng của bạn. Chỉ cần lặp lại toàn bộ tháng gọi phương thức. (jsFiddle)

var daysOfTheWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; 

function getDisplay(month, day, year) { 
    var d = new Date(year, month-1, day); 
    return day + '. ' + daysOfTheWeek[d.getDay()]; 
} 

array_push($dates, getDisplay(7, 4, 2012)); 
+0

tôi nghĩ rằng nên có 'tháng + 1' – diEcho

+0

Không, tháng là không dựa. Tháng 1 là số không. Đó là lý do tại sao tôi đổi chỗ nó trong hàm đó để tương ứng với các biến của mình. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/ – scottheckel

+0

đó; s tại sao nếu người dùng nhập vào tháng 7 ('7') thì tập lệnh java nên hiểu nó là' 6' – diEcho

0

Hãy thử điều này và xem kết quả trong bảng điều khiển.

<script> 
var weekday = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 
       'Thursday', 'Friday', 'Saturday']; 
var month = '7'; 
var year = '2012'; 
realMonth = parseInt(month,10)-1; 
var monthObj = {}; 
for(var i=1;i<30;i++) 
{ 
    var d = new Date(year,realMonth,i);    
    monthObj[i] = weekday[d.getDay()]; 
} 
console.log(monthObj); 
</script> 
Các vấn đề liên quan