如何获取一个月日历视图的第一天和最后一天(周日-周六)

Posted

技术标签:

【中文标题】如何获取一个月日历视图的第一天和最后一天(周日-周六)【英文标题】:How to get the first and last day of a month calendar view (sunday-saturday) 【发布时间】:2014-08-10 22:13:59 【问题描述】:

我有一个日历,它的第一周从 星期日 开始,到 星期六 结束。

现在我只能禁用日历当月的日子,因为我不知道日历中的第一天和最后一天。

我现在使用的代码非常简单:

private List<DateTime> GetDisabledDates(DateTime fromDate, DateTime toDate)

// right now fromDate and toDate are the start and end days in a month

var disabledDates = SearchDates(fromDate, toDate);

return disabledDates;


因此,考虑到这一周从周日开始到周六结束,我需要在日历月中显示第一天和最后一天。

关于如何从特定月份动态获取第一个和最后一个(黄色标记的日期)的任何线索?考虑日历配置?

【问题讨论】:

这是 ASP.net 吗? WebForms 还是 MVC? 我需要在我的控制器中生成数据。 【参考方案1】:

在这个视图的第一天,应该这样做

//Using UTC to counter daylight saving problems
var month = new DateTime(2014, 8, 1, 0, 0, 0, DateTimeKind.Utc); 
var firstInView = month.Subtract(TimeSpan.FromDays((int) month.DayOfWeek));

对于剩余的天数,您只需计算 (7 * NumRows) - (DaysOfCurrentMonth + DaysOfPreviousMonth) 中的剩余金额,其中 DaysOfPreviousMonth 再次是本月第一天的 DayOfWeek 属性。

【讨论】:

试一试,firstInView 不给我 2014 年 7 月 27 日。 想一想,示例目前是当地时间,可能存在时区问题。最好在 UTC 中尝试以摆脱夏令时,我将编辑答案。【参考方案2】:

适合我的解决方案:

int totalCalendarDays = 42; // matrix 7 x 6

// set the first month day
DateTime firstDayMonth = new DateTime(date.Year, date.Month, 1);

 // set the lastmonth day
DateTime lastDayMonth = new DateTime(date.Year, date.Month, DateTime.DaysInMonth(date.Year, date.Month));

// now get the first day week of the first day month (0-6 Sun-Sat)
byte firstDayWeek = (byte) firstDayMonth.DayOfWeek;

// now get the first day week of the last day month (0-6 Sun-Sat)
byte lastDayWeek = (byte) lastDayMonth.DayOfWeek;

// now the first day show in calendar is the first day month minus the days to 0 (sunday)
DateTime firstDayCalendar = firstDayMonth.Subtract(TimeSpan.FromDays(firstDayWeek));
int tempDays = (lastDayMonth - firstDayCalendar).Days;

DateTime lastDayCalendar = lastDayMonth.Add(TimeSpan.FromDays(totalCalendarDays - tempDays - 1));

也许是一个更好的方法:)

【讨论】:

【参考方案3】:

这是我的建议,将年份和月份定义为参数:

public DateTime[] GetMonthDisplayLimits(int year, int month)

    int lastDay = DateTime.DaysInMonth(year, month);
    var firstDayInMonth = new DateTime(year, month, 1);
    var lastDayInMonth = new DateTime(year, month, lastDay);

    var firstDayInView = firstDayInMonth.AddDays(-1 * (int) firstDayInMonth.DayOfWeek);
    var lastDayInView = lastDayInMonth.AddDays((int) (6 - lastDayInMonth.DayOfWeek));

    return new DateTime[]  firstDayInView, lastDayInView ;


DateTime[] monthDisplayLimits = GetMonthDisplayLimits(2014, 8);

var firstDayInView = monthDisplayLimits[0];
var lastDayInView  = monthDisplayLimits[1];

由于“DayOfWeek”是一个介于 0 和 6 之间的值,因此这种方法将第一个工作日向下舍入,最后一个工作日向上舍入。

【讨论】:

以上是关于如何获取一个月日历视图的第一天和最后一天(周日-周六)的主要内容,如果未能解决你的问题,请参考以下文章

js 获取当前月和当前周的第一天和最后一天

js-显示指定周数的周一和周日,指定月份的第一天和最后一天-----------个人百度 整理的

显示(日历)周的第一天和最后一天

如何获得一个月内每周的第一天和最后一天?

在 SQL Server Reporting Services (VB.Net) 中查找上一个日历月的第一天和最后一天

java获取当月的第一天和最后一天,获取本周的第一天和最后一天