【问题标题】:specify current week based on day of week asp.net mvc 5根据 asp.net mvc 5 的星期几指定当前星期
【发布时间】:2016-03-08 09:05:56
【问题描述】:

目前,我正在尝试根据星期几进行查询,从该周的数据库中获取电影。 所以一个电影周是从周四到下周三。 当它是星期天,我只想要从星期天到星期三的电影。 如果是周二,我只想要周二到周三的电影等。 我真的很纠结在 asp 中你能做什么和不能做什么?

到目前为止,这是我的代码:

public IEnumerable<Viewing> GetUpcomingWeekViews()
    {
        var viewingList1 = _efdbContext.Viewing.ToList();

        DateTime currentDate = DateTime.Now.Date;
        var viewingList = _efdbContext.Viewing.ToList();

        DateTime startOfWeek = DateTime.Now.

        return viewingList.Where(v => (
            v.StartTime.Date == currentDate.Date) &&
            (v.StartTime.TimeOfDay > currentDate.TimeOfDay)
        ).OrderBy(v => v.StartTime);
    }

【问题讨论】:

标签: asp.net asp.net-mvc


【解决方案1】:

使用DateTimeDayOfWeek 属性:

var date = DateTime.Now;
var currentWeekday = (int)date.DayOfWeek;
const int wednesday = 3; // sunday is 0

var offset = 0; 
// if today is before wednesday, go to next wednesday
if (currentWeekday < wednesday) {
    offset = wednesday - currentWeekday;
}
// if today is wednesday, add a whole week till next wednesday
if(currentWeekday == wednesday) {
    offset = 7;
}
// if today is after wednesday, go to wednesday in a week
if(currentWeekday > wednesday) {
    offset = wednesday - currentWeekday + 7;
}

var nextWednesday = date.AddDays(offset);

Fiddle

【讨论】:

    【解决方案2】:

    首先使用DateOfWeek 计算从当前日期到所需日期的偏移量

    public int CalculateOffset(DayOfWeek current, DayOfWeek desired) {
        // f( c, d ) = [7 - (c - d)] mod 7
        // f( c, d ) = [7 - c + d] mod 7
        // c is current day of week and 0 <= c < 7
        // d is desired day of the week and 0 <= d < 7
        int c = (int)current;
        int d = (int)desired;
        int offset = (7 - c + d) % 7;
        return offset == 0 ? 7 : offset;
    }
    

    并将该偏移量添加到当前DateTimeDate

    public IEnumerable<Viewing> GetUpcomingWeekViews(DayOfWeek desiredDayOfWeek = DayOfWeek.Thursday) {
        DateTime minStartTime = DateTime.Now;
        var currentDayOfWeek = minStartTime.DayOfWeek;
    
        int offset = CalculateOffset(currentDayOfWeek, desiredDayOfWeek);
    
        DateTime maxStartTime = minStartTime.Date.AddDays(offset);
    
        var viewingList = dbContext.Viewing.ToList();
    
        return viewingList
            .Where(v => minStartTime <= v.StartTime && v.StartTime < maxStartTime)
            .OrderBy(v => v.StartTime);
    }
    

    【讨论】:

      猜你喜欢
      • 2017-11-07
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 2011-01-26
      • 2021-06-29
      • 1970-01-01
      相关资源
      最近更新 更多