如何从两个日期获得工作周

时间:2014-02-06 08:41:03

标签: c#

让我们说,我有两个日期订单日期 - 2014年1月1日和交货日期 - 2014年6月2日。现在,如果我想计算它所花费的工作周数(订单日期 - 交货日期),我该如何在c#中进行。

5 个答案:

答案 0 :(得分:1)

如果您想要日期范围内的工作天数,可以使用:

        var from = DateTime.Today.AddDays(-10);
        var to = DateTime.Today;
        var daysOfWeek = new DayOfWeek[] { DayOfWeek.Monday, DayOfWeek.Tuesday
                                          , DayOfWeek.Wednesday, DayOfWeek.Friday
                                          , DayOfWeek.Thursday };


        var days = Enumerable.Range(0, 1 + to.Subtract(from).Days)
                             .Select((n, i) => from.AddDays(i).DayOfWeek)
                             .Where(n => daysOfWeek.Contains(n.DayOfWeek));

如果您想要一个日期范围内的周数,请使用:

        (int)((to - from).TotalDays/7)

答案 1 :(得分:0)

我假设“每周工作多少”是指“工作日多少”。这不是那么简单,因为它取决于文化,你需要考虑假期。

如果您依赖周一至周五作为工作日,您可以使用类似于c# DateTime to Add/Subtract Working Days中讨论的解决方案,计算从Order DateDelivery Date的每一天的条件持。

Q& A仍然让您了解如何确定某个地区的假期(请注意 - 在瑞士,该国的每个地区都有不同的假期!)。

更新:根据Nagaraj建议的链接,我收集到您可能也会将“周”称为块(即“许多工作周的工作周”)。如果是这样,反过来,您需要定义一周中需要多少天来考虑这一周......

答案 2 :(得分:0)

(int)((DeliveryDate-OrderDate).TotalDays/7)

答案 3 :(得分:0)

我正在使用字符串并将其转换为日期,因为我不确定您的日期和格式。相应地调整您的代码。

string orderDate = @"1/1/2014";
string deliveryDate = @"6/2/2014";

// This will give you a total number of days that passed between the two dates.
double daysPassed = Convert.ToDateTime(deliveryDate).
                    Subtract(Convert.ToDateTime(orderDate)).TotalDays;

// Use this if you want actual weeks.  This will give you a double approximate.  Change to it to an integer round it off (truncate it).
double weeksPassed = daysPassed / 7;

// Use this if you want to get an approximate number of work days in those weeks (based on 5 days a week schedule).
double workDaysPassed = weeksPassed * 5;

答案 4 :(得分:-1)

我猜你对工作日而不是几周感兴趣。您可以使用GetWeekOfYear:

http://msdn.microsoft.com/en-us/library/system.globalization.calendar.getweekofyear%28v=vs.110%29.aspx

修改

要回复评论,这里有一些代码示例:

int start = System.Globalization.CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(new DateTime(2014, 1, 14), System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
int end = System.Globalization.CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(new DateTime(2014, 2, 3), System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
int weeks = end - start;

那应该给你几周的时间。