2012-02-28 26 views
5

Bir ayın 4 pazartesi günü js ile nasıl edinilir?

Bana durumu açıklayalım (her şeyden önce, mazeret, ben acemiyim ingilizce benim):, çok yararlı ben (Google Charts Aracı kullanarak bir deneyin grafikleri oluşturmak istiyoruz

var). Bu bölüm gerçekten zor değil ...

Sorun, x ekseninde ayın dört haftasını gerektiren belirli bir grafiğe sahip olduğum zaman geliyor: Ekranda yalnızca dört pazartesi günü görüntülenmesini istiyorum içinde bulunduğumuz ay.

GeçerliMonth ve currentYear değişkenlerini zaten aldım ve ayın ilk gününü nasıl alacağımı biliyorum. İhtiyacım olan tek şey, bir ayın dört pazartesi gününü bir dizide nasıl alacağım. Ve hepsi aynı JavaScript dosyasında.

Programlama mantığım içinde oldukça kayboldum, ve benim durumumla uyuşmayan çok sayıda çözüm gördüm.

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

ve ben böyle bir şey istiyorum:

yüzden, ben var ne sen bana yardımcı olur musun

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

okuma için teşekkürler ve ... :)

Gaelle

+1

Bir ay 5 pazartesi günü olabilir. Şu anki gibi olduğu gibi (şubat, 2012). – pduersteler

+1

de, Şubat 2012 sadece 4 pazartesi, 6, 13, 20 ve 27 (dün) var. bir Çarşamba günü başladı ve Çarşamba günü sona erdi.Ama katılıyorum, bir ay Nisan 2012 gibi 5 pazartesi olabilir ve evet, benim kendi kodumla karışık – Gaelle

+0

kod inşa ederken bu gerçeği hatırlamak zorunda, özür dilerim. – pduersteler

cevap

22

c tüm Mondays'i dönecektir function aşağıdaki eçerli ay:

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

teşekkürler jakeclarkson, sorunu çözdü! – Gaelle

+0

Şanslıyım :-) – jabclab

3

Bu senenin her ayında [m] dördüncü geçen Pazartesi döneceğini [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 

daha genel olmak gerekirse, bu bir herhangi hafta içi son teslim edecek ay:

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

teşekkürler, çok ilginç ve muhtemelen daha sonra kullanacağım – Gaelle