![](/img/trans.png)
[英]How to get Start and End date given the week number in jQuery datepicker
[英]How to get the Week wise Start and End date in angularjs
在我從此npm使用angularjs-DatePicker之前。
在這里,我可以從日期選擇器中選擇日期。但是現在我必須將字段設置為FromDate和ToDate ,這意味着在該周中選擇任何日期時,應該顯示StartDate和EndDate這周。
例如:與日歷01 / 01-2017中的“開始於星期二”相同,因此,只要選擇“ 01至05”中的任何日期,則這兩個字段應分別顯示為FromDate和01,以及TODate和06,並且用戶選擇31-07- 2017年,兩個字段應顯示為7月30日和31日。
我有一個想法從DoDNet中的FromDate Calender控件onchange事件實現ToDate,如下面提到的代碼
Convert.ToDouble(objstart.DayOfWeek)).ToString("dd-MM-yyyy")
但是如何在angularjs中實現這個用例。
謝謝
好的,所以我要做的是計算不同的日期,並根據一周的開始或結束采用最小/最大。
這里:
//Use the date received, UTC to prevent timezone making dates shift var pickedDate = new Date("08-03-2017UTC"); var startSunday = new Date(pickedDate); startSunday.setDate(pickedDate.getDate() - pickedDate.getDay()); var startMonth = new Date(pickedDate); startMonth.setDate(1); var startDate = Math.max(startMonth,startSunday); console.log("Start:" , new Date(startDate)); var endSaturday = new Date(pickedDate); endSaturday.setDate(pickedDate.getDate() + (7-pickedDate.getDay())); var endMonth = new Date(pickedDate); endMonth.setMonth(pickedDate.getMonth()+1);//Add a month endMonth.setDate(0);// to select last day of previous month. var endDate = Math.min(endMonth,endSaturday); console.log("End" , new Date(endDate));
訣竅是使用日期,找到所有可能的開始和結束日期,然后使用Math.min和Math.max選擇正確的日期,這將使用時間戳比較日期。
JavaScript中提供了很好的庫來處理日期操作。
https://github.com/datejs/Datejs
有辦法
Date.parse('next friday') // Returns the date of the next Friday.
Date.parse('last monday')
使用這些方法,您可以基於當前星期獲取星期的開始和結束日期。
我希望這會有所幫助。
您可以簡單地使用圖書館時刻來實現這一點 。 這個庫中有很多有用的功能。
var selectedDate = moment('Mon Aug 10 2017');
//If you want to get the ISO week format(Monday to Sunday)
var weekStart = selectedDate.clone().startOf('isoweek').format('MMM Do');
var weekEnd = selectedDate.clone().endOf('isoweek').format('MMM Do');
//If you want to get the Sunday to Saturday week format
var weekStart = selectedDate.clone().startOf('week').format('MMM Do');
var weekEnd = selectedDate.clone().endOf('week').format('MMM Do');
這里不需要angular指令,您可以使用下面的JavaScript擴展。
//get week from date
Date.prototype.getWeekNumber = function (weekstart) {
var target = new Date(this.valueOf());
// Set default for weekstart and clamp to useful range
if (weekstart === undefined) weekstart = 1;
weekstart %= 7;
// Replaced offset of (6) with (7 - weekstart)
var dayNr = (this.getDay() + 7 - weekstart) % 7;
target.setDate(target.getDate() - dayNr + 0);//0 means friday
var firstDay = target.valueOf();
target.setMonth(0, 1);
if (target.getDay() !== 4) {
target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);
}
return 1 + Math.ceil((firstDay - target) / 604800000);;
};
//get date rance of week
Date.prototype.getDateRangeOfWeek = function (weekNo, weekstart) {
var d1 = this;
var firstDayOfWeek = eval(d1.getDay() - weekstart);
d1.setDate(d1.getDate() - firstDayOfWeek);
var weekNoToday = d1.getWeekNumber(weekstart);
var weeksInTheFuture = eval(weekNo - weekNoToday);
var date1 = angular.copy(d1);
date1.setDate(date1.getDate() + eval(7 * weeksInTheFuture));
if (d1.getFullYear() === date1.getFullYear()) {
d1.setDate(d1.getDate() + eval(7 * weeksInTheFuture));
}
var rangeIsFrom = eval(d1.getMonth() + 1) + "/" + d1.getDate() + "/" + d1.getFullYear();
d1.setDate(d1.getDate() + 6);
var rangeIsTo = eval(d1.getMonth() + 1) + "/" + d1.getDate() + "/" + d1.getFullYear();
return { startDate: rangeIsFrom, endDate: rangeIsTo }
};
您的代碼可以如下所示
var startdate = '01-08-2017'
var weekList = [];
var year = startdate.getFullYear();
var onejan = new Date(year, 0, 1);//first january is the first week of the year
var weekstart = onejan.getDay();
weekNumber = startdate.getWeekNumber(weekstart);
//generate week number
var wkNumber = weekNumber;
var weekDateRange = onejan.getDateRangeOfWeek(wkNumber, weekstart);
var wk = {
value: wkNumber
, text: 'Week' + wkNumber.toString()
, weekStartDate: new Date(weekDateRange.startDate)
, weekEndDate: new Date(weekDateRange.endDate)
};
weekList.push(wk);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.