簡體   English   中英

如何在angularjs中獲取周明智的開始和結束日期

[英]How to get the Week wise Start and End date in angularjs

在我從此npm使用angularjs-DatePicker之前。

在這里,我可以從日期選擇器中選擇日期。但是現在我必須將字段設置為FromDateToDate ,這意味着在該周中選擇任何日期時,應該顯示StartDateEndDate這周。

例如:與日歷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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM