0

我想找到一个员工一个月内请的假。该代码适用于所有日期。现在,如果我想找到员工在一月份的休假,范围是:

DateTime first = Convert.ToDateTime(DateTime.Now.Month + "01" + DateTime.Now.Year);
DateTime end = Convert.ToDateTime(DateTime.Now.Month + "31" + DateTime.Now.Year);

问题是有些月份没有 31 天。有没有一种简单的方法可以分配变量 From 和 To 范围。当月份的 2 月或 4 月时会出现错误,因为它们没有 31 天。

执行搜索的代码是:

returnedRows = LeaveDS.Tables["Leave"].Select("LeaveDate >= #" + first + "# AND LeaveDate <= #" + end + "#");
4

7 回答 7

6

你可以这样做:

DateTime end = first.AddMonths(1).AddDays(-1);
于 2013-01-25T16:17:05.360 回答
3
DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month)

它会给你一个月的时间。

于 2013-01-25T16:18:04.950 回答
2

采用DateTime.DaysInMonth(int year, int month)

        int days = DateTime.DaysInMonth(2012, 2);
        int days2 = DateTime.DaysInMonth(2011, 2);

输出:

 days = 29
 days2 = 28
于 2013-01-25T16:18:56.037 回答
2

您可以通过 获取一个月中的天数DateTime.DaysInMonth(year,month),并将其用作查询的基础。

另一种方法是使用每个月的第一天,但​​将您的选择查询更改为小于结束日期。

DateTime first = Convert.ToDateTime(DateTime.Now.Month + "01" + DateTime.Now.Year);
DateTime end = first.AddMonths(1); // Becomes 01 of next month

returnedRows = LeaveDS.Tables["Leave"].Select("LeaveDate >= #" + first + "# AND LeaveDate < #" + end + "#");
于 2013-01-25T16:20:05.070 回答
1

有一个很好的方法来获取一个月中的天数,它叫做DateTime.DaysInMonth

DateTime end = new DateTime(first.Year, first.Month, DateTime.DaysInMonth(first.Year, first.Month);
于 2013-01-25T16:19:17.883 回答
0
var enddate = DateTime.Now.AddMonths(1);
DateTime end = new DateTime(enddate.Year,enddate.Month,1);
于 2013-01-25T16:17:55.813 回答
0

顺便说一句,如果您使用 .NET 3.5 或更高版本,Linq-To-DataSet 将简化和改进代码:

int month = 2; // f.e. for february
var currentCalendar = System.Globalization.CultureInfo.CurrentCulture.Calendar;
int daysInMonth = currentCalendar.GetDaysInMonth(month);
DateTime start = new DateTime(DateTime.Now.Year, month, 1);
DateTime end = new DateTime(DateTime.Now.Year, month, daysInMonth);
var filteredRows = LeaveDS.Tables["Leave"].AsEnumerable()
    .Where(r => r.Field<DateTime>("LeaveDate").Date >= start
             && r.Field<DateTime>("LeaveDate").Date <= end );
// use ToArray for an array, CopyToDataTable for a DataTable etc.
于 2013-01-25T16:27:05.313 回答