2012-02-28 4 views
5

(सब से पहले, बहाना मेरी अंग्रेजी, मैं अभी शुरुआत कर रहा हूँ)जेएस के साथ एक महीने के 4 सोमवार कैसे प्राप्त करें?

मुझे स्थिति स्पष्ट करता हूं:

मैं गूगल चार्ट उपकरण (का उपयोग कर इसे आजमाइए चार्ट बनाने के लिए चाहते हैं, यह बहुत उपयोगी है)। यह हिस्सा वास्तव में मुश्किल नहीं है ...

समस्या तब आती है जब मेरे पास एक विशिष्ट चार्ट होता है जो x-axis में एक महीने के चार सप्ताह की आवश्यकता होती है: मैं स्क्रीन पर केवल चार सोमवार को प्रदर्शित करना चाहता हूं वर्तमान माह।

मुझे पहले से ही वर्तमान माह और वर्तमान वर्ष के चर मिल चुके हैं और मुझे पता है कि महीने के पहले दिन कैसे प्राप्त करें। मुझे बस एक सरणी में एक महीने के चार सोमवार को कैसे प्राप्त करना है। और यह सब एक ही जावास्क्रिप्ट फ़ाइल में।

मैं अपने प्रोग्रामिंग तर्क में बहुत खो गया हूं, और मैंने बहुत सारे समाधान देखे हैं जो मेरे मामले में फिट नहीं हैं।

हां, तो मैं क्या है यह है:

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

और मैं कुछ इस तरह करना चाहते हैं:

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

पढ़ने के लिए धन्यवाद, और यदि आप मेरी मदद कर सकता है ... :)

Gaelle

+1

एक महीने 5 सोमवार हो सकता है। वर्तमान महीने की तरह (फरवरी, 2012) है। – pduersteler

+1

अच्छी तरह से, फरवरी 2012 में केवल 4 सोमवार, 6, 13, 20 और 27 (कल) हैं। यह बुधवार को शुरू हुआ और बुधवार को समाप्त हुआ .. लेकिन मैं मानता हूं, एक महीने में अप्रैल 2012 की तरह 5 सोमवार हो सकते हैं .. और हाँ, मुझे अपने कोड को – Gaelle

+0

मेरे स्वयं के कैलेंडर द्वारा भ्रमित करते समय उस तथ्य को याद रखना होगा, मैं क्षमा चाहता हूं। – pduersteler

उत्तर

22

function निम्नलिखित ग के लिए सभी सोमवार वापस आ जाएगी urrent महीने:

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

धन्यवाद जेकक्लार्कसन, यह समस्या तय की !!! – Gaelle

+0

खुशी हुई इससे मदद मिली :-) – jabclab

3

इस साल में महीने [एम] के चौथे पिछले सोमवार वापसी होगी [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 

अधिक सामान्य होने के लिए, यह पिछले एक के किसी भी काम करने के दिन वितरित कर देगा माह:

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

धन्यवाद, यह बहुत रोचक है, और मैं शायद बाद में इसका उपयोग करूंगा – Gaelle