2014-08-31 12 views
13

के साथ एक महीने में दिनों की सूची कैसे प्राप्त करें Moment.js का उपयोग करके मैं एक दिन में विशिष्ट वर्ष के एक महीने में सभी दिन प्राप्त करना चाहता हूं। उदाहरण के लिए:Moment.js

January-2014: 
[ 
"01-wed", 
"02-thr", 
"03-fri", 
"04-sat" 
] 

कोई सुझाव? मैंने Moment.js दस्तावेज़ों को देखा लेकिन कुछ भी नहीं मिला।

moment("2012-02", "YYYY-MM").daysInMonth() 

लेकिन यह केवल विशिष्ट महीने नहीं प्रत्येक दिन के साथ एक सरणी के लिए कुल दिनों के साथ एक पूर्णांक लौट: कोठरी मुझे मिल गया यह था।

+0

मुझे लगता है कि '04-sit" '' के बजाय '04-sat" होना चाहिए, और उसके बाद "05-sun", "06-mon", "07-tue", "08- wed "और इतने पर? आप इसकी आवश्यकता क्यों है? –

+0

हां, एक टाइपो कहो। मुझे इसे ड्रॉप डाउन में प्रदर्शित करने की ज़रूरत है ताकि उपयोगकर्ता साल-दर-साल संयोग के अंदर एक दिन फिर एक वर्ष का चयन कर सके। लेकिन 1,2,3 दिखाने के बजाए ... दिनों के लिए मैं दिन का नाम 1-मोन, 2-ट्यूज़, 3-वेड ... – ecorvo

+0

दिखाऊंगा, नीचे मेरा उत्तर देखें। किसी को तारीख चुनने के उद्देश्य से, हालांकि, मैं कई उपलब्ध जावास्क्रिप्ट कैलेंडर डेट पिकर्स में से एक का उपयोग करने की सलाह दूंगा। –

उत्तर

27

यहाँ एक समारोह है कि चाल करना होगा है (पल का उपयोग नहीं है, लेकिन सिर्फ वेनिला जावास्क्रिप्ट):

var getDaysArray = function(year, month) { 
    var names = [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat' ]; 
    var date = new Date(year, month - 1, 1); 
    var result = []; 
    while (date.getMonth() == month - 1) { 
    result.push(date.getDate() + "-" + names[date.getDay()]); 
    date.setDate(date.getDate() + 1); 
    } 
    return result; 
} 

उदाहरण के लिए:

js> getDaysArray(2012,2) 
["1-wed", "2-thu", "3-fri", "4-sat", "5-sun", "6-mon", "7-tue", 
"8-wed", "9-thu", "10-fri", "11-sat", "12-sun", "13-mon", "14-tue", 
"15-wed", "16-thu", "17-fri", "18-sat", "19-sun", "20-mon", "21-tue", 
"22-wed", "23-thu", "24-fri", "25-sat", "26-sun", "27-mon", "28-tue", 
"29-wed"] 

ES2015 + संस्करण:

const getDaysArray = (year, month) => { 
    const names = Object.freeze(
    [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat' ]); 
    const date = new Date(year, month - 1, 1); 
    const result = []; 
    while (date.getMonth() == month - 1) { 
    result.push(`${date.getDate()}-${names[date.getDay()]}`); 
    date.setDate(date.getDate() + 1); 
    } 
    return result; 
} 
+0

धन्यवाद! जब तक यह नौकरी करता है तब तक पल की कोई ज़रूरत नहीं है :) – ecorvo

+0

यह पूरी तरह से काम करता है। धन्यवाद – anhnt

4

पलज के साथ वैकल्पिक, मेरे लिए काम

function getDaysArrayByMonth() { 
    var daysInMonth = moment().daysInMonth(); 
    var arrDays = []; 

    while(daysInMonth) { 
    var current = moment().date(daysInMonth); 
    arrDays.push(current); 
    daysInMonth--; 
    } 

    return arrDays; 
} 

और आप जाँच कर सकते हैं

var schedule = getDaysArrayByMonth(); 
schedule.forEach(function(item) { 
    console.log(item.format("DD/MM")); 
}); 
7

भी lodash_.times का उपयोग करना:

var daysInMonth = []; 

var monthDate = moment().startOf('month'); // change to a date in the month of interest 

_.times(monthDate.daysInMonth(), function (n) { 
    daysInMonth.push(monthDate.format('D')); // your format 
    monthDate.add(1, 'day'); 
}); 
-3

moment.js संस्करण 2.1.0 के रूप में, जब आप की तरह एक तारीख तय:

moment([2012, 0, 31]).month(1).format("YYYY-MM-DD"); // 2012-02-29 

फिर आपको बस तारीख और यो को पार्स करने की आवश्यकता है आपके पास एक महीने में दिनों की संख्या है।

संबंधित मुद्दे