如何在angularjs中获得明智的开始和结束日期

时间:2017-08-07 06:46:13

标签: javascript jquery angularjs date datepicker

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

在这里,我可以从日期选择器中选择日期。但是现在我必须将字段设置为 FromDate ToDate ,这意味着一周 StartDate < / strong>和 EndDate 应该显示该周的任何日期选择。

Ex:就像在日历中01-08-2017从星期二开始,所以每当从01到05选择任何日期时,两个字段应该显示为FromDate为01并且Todate显示为06,并且每当用户选择31时都显示相同的日期-07-2017两个字段应显示为7月30日和31日。

我有想法从DotNet中的FromDate Calender控件onchange事件中实现ToDate,就像下面提到的代码一样

Convert.ToDouble(objstart.DayOfWeek)).ToString("dd-MM-yyyy")

但是如何在angularjs中实现这个用例。

由于

5 个答案:

答案 0 :(得分:3)

好的,我所做的就是计算不同的日期,并根据一周的开始或结束取最小/最大值。

下面:

&#13;
&#13;
//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));
&#13;
&#13;
&#13;

诀窍是使用日期,找到所有可能的开始和结束日期,然后选择正确的Math.min和Math.max,它将使用时间戳比较日期。

答案 1 :(得分:0)

JavaScript中有很好的库来处理日期操作。

https://github.com/datejs/Datejs

有一种方法

Date.parse('next friday')       // Returns the date of the next Friday.
Date.parse('last monday') 

使用这些方法,您可以根据当前周来获取一周的开始和结束日期。

我希望它会有所帮助。

答案 2 :(得分:0)

您可以使用库moment轻松实现此目的。这个库中有很多有用的功能。

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');

答案 3 :(得分:0)

此处不需要angular指令,您可以使用下面的JavaScript扩展。

 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);

您的代码可能如下所示

{{1}}

答案 4 :(得分:-1)

我猜这里没有指令或过滤器,你需要自己创建一个。你可以从date-time-object

中引用日期对象