如何获取一个月日历视图的第一天和最后一天(周日-周六)
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-显示指定周数的周一和周日,指定月份的第一天和最后一天-----------个人百度 整理的