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

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

问题描述:

在我使用此npm的angularjs-DatePicker之前。如何在angularjs中获取明智的开始日期和结束日期

在这里,我可以选择,这意味着周起始日期结束日期我不得不领域没有fromdate之日起picker.But现在的日期和TODATE应显示在任何日期挑那一周。

例如:在日历中01-08-2017从Tue开始,因此每当选择从01到05的任何日期时,这两个字段应显示为FromDate为01,TODate为06,并且每当用户选择2017年3月31日,两个字段应显示为7月30日和31日。

我有一个想法,以实现从FROM日期日历的TODATE控制DOTNET的onchange事件为类似下面的代码

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

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

谢谢

+0

如果你必须在javascript中做很多日期操作,我推荐使用[moment.js](https://momentjs.com/) – devqon

+0

从你的例子来判断:你想选择所选日期的那一周适合英寸但是一周的开始和结束应该是在同一个月,总是在星期日开始。是对的吗? – Salketer

+0

@Salketer是的。但不是强制性的星期日作为默认即使星期一我们保持也没有问题。 –

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

这里:

//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正确的它将使用它们的时间戳来比较日期。

+0

感谢您快速回答。让我试试这个。 –

在JavaScript中有非常好的库来处理日期操作。

https://github.com/datejs/Datejs

有一种方法

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

使用这些方法,你可以得到的开始和结束的基础上,本周一周的日期。

我希望这会有所帮助。

+0

这有点可以接受,但是当每个星期的星期在tue结束时,那么从你写的这个函数中,它会显示下个月的日期为星期五的endDate。在这种情况下,它应该显示开始日期为太阳和结束日期为tue本身 –

+0

如果可能,请尝试在小提琴中显示,以便我可以轻松地将我的场景与您联系,谢谢您的回答。 –

+0

嗨查兰,可能是我无法清楚地理解这个问题。你到底需要什么。也许你可以写一些输入和期望,以便我能理解。 – Ashvin777

我想这里没有指令或过滤器,你需要为自己创建一个。您可以参考日期对象date-time-object

您可以使用库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'); 
+0

这很好,但我的情况不是关于星期的格式。当用户在DatePicker中选择任何日期时,它应显示该星期startdate和endDate –

+0

weekStart将具有值“8月7日”,并且weekEnd将具有“8月13日”。希望这是你想要的,对吧? –

这里不需要角度指令,你可以使用下面的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);