2012-02-28 65 views
5

(trước hết, tha tiếng anh của tôi, tôi là một người mới bắt đầu)Làm thế nào để có được thứ 4 thứ hai của tháng với js?

hãy để tôi giải thích tình hình:

Tôi muốn tạo biểu đồ sử dụng Charts Tool của Google (cung cấp cho nó một thử, nó rất hữu ích). Phần này không thực sự khó khăn ...

Sự cố xảy ra khi tôi có biểu đồ cụ thể yêu cầu trong trục x bốn tuần mỗi tháng: tôi muốn hiển thị trên màn hình chỉ bốn thứ hai trong Tháng này.

Tôi đã có các biến CurrentMonth và currentYear hiện tại và tôi biết cách lấy ngày đầu tiên của tháng. tất cả những gì tôi cần là làm thế nào để có được bốn thứ hai của một tháng, trong một mảng. Và tất cả điều này trong cùng một tệp JavaScript.

Tôi bị lạc trong logic lập trình của mình và tôi đã thấy rất nhiều giải pháp không phù hợp với trường hợp của tôi.

như vậy, những gì tôi có là:

var date = new Date(); 
var currentYear = date.getFullYear(); 
var currentMonth = date.getMonth(); 
var firstDayofMonth = new Date(currentYear,currentMonth,1); 
var firstWeekDay = firstDayofMonth.getDay(); 

và tôi muốn có một cái gì đó như thế này:

var myDates = 
[new Date(firstMonday),new Date(secondMonday), new Date(thirdMonday),new Date(fourthMonday)] 

Cảm ơn bạn đã đọc, và nếu bạn có thể giúp tôi ... :)

Gaelle

+1

Một tháng có thể có 5 thứ hai. Giống như tháng hiện tại có (tháng 2 năm 2012). – pduersteler

+1

, tháng 2 năm 2012 chỉ có 4 thứ hai, 6, 13, 20 và 27 (ngày hôm qua). nó bắt đầu vào thứ tư và kết thúc vào một ngày thứ tư ... Nhưng tôi đồng ý, một tháng có thể có 5 thứ hai như tháng tư năm 2012 .. và có, tôi phải nhớ rằng thực tế khi xây dựng mã của tôi – Gaelle

+0

nhầm lẫn với lịch của riêng tôi, tôi xin lỗi. – pduersteler

Trả lời

22

function sau sẽ trả về tất cả các thứ Hai cho c urrent tháng:

function getMondays() { 
    var d = new Date(), 
     month = d.getMonth(), 
     mondays = []; 

    d.setDate(1); 

    // Get the first Monday in the month 
    while (d.getDay() !== 1) { 
     d.setDate(d.getDate() + 1); 
    } 

    // Get all the other Mondays in the month 
    while (d.getMonth() === month) { 
     mondays.push(new Date(d.getTime())); 
     d.setDate(d.getDate() + 7); 
    } 

    return mondays; 
} 
+0

cảm ơn jakeclarkson, nó đã khắc phục được sự cố !!! – Gaelle

+0

Rất vui được giúp :-) – jabclab

3

này sẽ trả lại thứ tư thứ hai cuối cùng tháng [m] năm [y]

function lastmonday(y,m) { 
var dat = new Date(y+'/'+m+'/1') 
    ,currentmonth = m 
    ,firstmonday = false; 
    while (currentmonth === m){ 
    firstmonday = dat.getDay() === 1 || firstmonday; 
    dat.setDate(dat.getDate()+(firstmonday ? 7 : 1)); 
    currentmonth = dat.getMonth()+1; 
    } 
    dat.setDate(dat.getDate()-7); 
    return dat; 
} 
// usage 
lastmonday(2012,3); //=>Mon Mar 26 2012 00:00:00 GMT+0200 
lastmonday(2012,2) //=>Mon Feb 27 2012 00:00:00 GMT+0100 
lastmonday(1997,1) //=>Mon Jan 27 1997 00:00:00 GMT+0100 
lastmonday(2012,4) //=>Mon Apr 30 2012 00:00:00 GMT+0200 

Để được chung chung hơn, điều này sẽ cung cấp những cuối cùng bất kỳ các ngày trong tuần của một tháng:

function lastDayOfMonth(y,m,dy) { 
var days = {sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6} 
    ,dat = new Date(y+'/'+m+'/1') 
    ,currentmonth = m 
    ,firstday = false; 
    while (currentmonth === m){ 
    firstday = dat.getDay() === days[dy] || firstday; 
    dat.setDate(dat.getDate()+(firstday ? 7 : 1)); 
    currentmonth = dat.getMonth()+1 ; 
    } 
    dat.setDate(dat.getDate()-7); 
    return dat; 
} 
// usage 
lastDayOfMonth(2012,2,'tue'); //=>Tue Feb 28 2012 00:00:00 GMT+0100 
lastDayOfMonth(1943,5,'fri'); //=>Fri May 28 1943 00:00:00 GMT+0200 
+0

cảm ơn, điều này rất thú vị và tôi có thể sẽ sử dụng sau – Gaelle

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