我怎樣才能得到一個星期使用JavaScript一個月的日子?在JavaScript中顯示一個月的一個星期數字的日期?
例如:
週數,月份和年份將由用戶給出。
可以說是2週數,12個月和2012年。
現在我想所得日期爲3,4,5,6,7,8,9
在此先感謝。
我怎樣才能得到一個星期使用JavaScript一個月的日子?在JavaScript中顯示一個月的一個星期數字的日期?
例如:
週數,月份和年份將由用戶給出。
可以說是2週數,12個月和2012年。
現在我想所得日期爲3,4,5,6,7,8,9
在此先感謝。
當在JavaScript中日期的工作,它通常是得心應手地使用圖書館做一些艱難的工作適合你 - 例如Moment.js:http://momentjs.com/
隨着moment.js,爲您的方案中,您可以通過啓動創造你想要的一年的開始。然後添加對應於您想要的星期的週數。然後,您可以循環設置每週的星期幾(Sun,Mon等),並在循環過程中將每週的每一天的日期緩存到列表中。
E.g:
var datesOfWeek = [];
var workingDate = moment(new Date(year, 1, 1));
workingDate.add('weeks', week);
for(var dayOfWeek = 0; dayOfWeek < 7; dayOfWeek++) {
workingDate.day(dayOfWeek);
datesOfWeek.push(workingDate.toDate());
}
既然你已經決定重新定義一個星期的開始,你來了更嚴厲的,但既然你問這個問題,我很好奇弄明白。以下是我想出了:
function getDatesByWeekNumber(year, month, weekNum, firstWeekDay) {
var ret = [];
firstWeekDay = firstWeekDay || 0;
var lastWeekDay = 7 + firstWeekDay;
var tempDate = new Date(year, month, 1);
console.log("tempDate: " + tempDate);
var daysInThisMonth = daysInMonth(year, month);
console.log("daysInThisMonth : " + daysInThisMonth);
console.log("lastWeekDay: " + (7 + firstWeekDay));
// Finds the first day of the week looking for
var curMonth = tempDate.getMonth();
var curYear = tempDate.getFullYear();
var weekCounter = 0;
while (weekCounter < weekNum-1 && (curMonth === month && curYear === year)) {
var dayCounter = 0;
var dayPerWeekCounter = tempDate.getDay();
// No more than 7 days No more than virtual last day Same month/year
while ((dayCounter < 7) && (dayPerWeekCounter < lastWeekDay) && (curMonth === month && curYear === year)) {
tempDate.setDate(tempDate.getDate() + 1);
dayPerWeekCounter++;
dayCounter++;
curMonth = tempDate.getMonth();
curYear = tempDate.getFullYear();
}
curMonth = tempDate.getMonth();
curYear = tempDate.getFullYear();
}
console.log("First day of found week: " + tempDate);
if (tempDate.getMonth() === month && tempDate.getFullYear() === year) {
// Finds each day in week specified that doesn't go out of bounds
var dayCounter = 0;
var dayPerWeekCounter = tempDate.getDay();
var dayPerMonthCounter = tempDate.getDate();
// No more than 7 days No more than virtual last day Not past end of month
while ((dayCounter < 7) && (dayPerWeekCounter < lastWeekDay) && (dayPerMonthCounter <= daysInThisMonth)) {
var cur = tempDate.getDate();
ret.push(cur);
tempDate.setDate(cur + 1);
dayCounter++;
dayPerWeekCounter++;
dayPerMonthCounter++;
}
}
return ret;
}
function copyDate(orig) {
return new Date(orig.getTime());
}
function daysInMonth(year, month) {
return new Date(year, month+1, 0).getDate();
}
var the_dates = getDatesByWeekNumber(2012, 11, 2, 1);
console.log("########FINAL ANSWER: " + JSON.stringify(the_dates));
我敢肯定有一個更好的方式做我做什麼,所以不要對我大喊大叫。試圖弄清楚這個問題,我的腦子已經夠炸了。對不起,如果變量名稱很奇怪 - 有很多i
,j
和k
,所以我認爲最好不要使用它們......也許它會。我盡我所能測試了很多場景,但我找不到任何不能工作的地方,但我確信有些事情會出錯。
有幾件事情需要注意:
我決定遵循的Javascript Date
約定 - 個月從0開始,0周開學的日子,與1月份開始的日子所以,如果你想要月,你傳遞在11.
就像我說的,你已經重新定義了一週的開始,所以我通過使用第四個參數(從0開始)進行了定製。例如,如果星期一是一週中的第一天(就像它似乎與您一樣),您可以使用1
。它是可選的,如果您忽略它或將其傳遞給錯誤值,則默認爲0
。
第三個參數是您正在查找的月份的星期數(從1開始)。例如,如果你正在尋找第三週,你會使用3
。
它有「安全」檢查,以確保它不會返回月份以外的天數(如果您查看的那一週類似於「28,29,30,31 ... 1,2 ,3「 - 它不會抓住最後3個。此外,它似乎適用於本月初(如本月)的情況,第一天是在本週中旬,而您想要第一週。
所以它會返回的最多的項目是7(一個完整的,有效的一週)。但很少有可能返回。
*「我怎樣才能得到...」*希望你會開始寫一些代碼。 –
在JavaScript中處理日期時,通常使用庫來爲您做一些辛苦的工作 - 例如Moment.js:http://momentjs.com/對於您的場景,您可以從以下版本開始:創造你想要的一年的開始。然後添加對應於您想要的星期的週數。然後,您可以循環設置每週的星期幾(Sun,Mon等),並在循環過程中將每週的每一天的日期緩存到列表中。 –
你對「週數」的定義是什麼?我會說,12月的第二週從8號開始...... – nnnnnn