2014-02-06 34 views
2

可以說,我有兩個日期訂單日期 - 2014年1月1日和交貨日期 - 6/2/2014。現在,如果我想計算其採取的工作週數(訂單日期 - 交貨日期),我該如何在c#中完成工作。如何從兩個日期獲得工作周

+4

提供更多詳情。你如何存儲日期?你已經嘗試了什麼? – rebeliagamer

+1

http://stackoverflow.com/questions/4604199/how-to-calculate-number-of-weeks-given-2-dates –

+0

我已經嘗試過這樣 - (Delivary date - Order date).TotalDays/7。而我將輸出存儲爲int – Gulrej

回答

0

我認爲「多少工作日」意味着「多少工作日」。這不是很直接,因爲它取決於文化,你需要考慮假期。

如果通過週五作爲工作日內,您可以使用類似於在c# DateTime to Add/Subtract Working Days討論,從Order Date每天計數到Delivery Date對於該條件成立的解決方案依賴於週一

那QA仍然留給你如何確定某個地區的假期的問題(被警告 - 在瑞士的每個地區都有不同的假期!)。

更新:從Nagaraj建議的鏈接據我瞭解,你也可能指的是「周」爲塊(即「它是如何許多每週工作採取」)。如果是這樣,反過來,你將需要如何定義一個星期的許多天,必須採取採取一週考慮......

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

但是這會給出1.8或1.9種結果 – Gulrej

+0

@Gulrej您必須用Math.Round或Math對它進行四捨五入。天花板 –

-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; 

這應該給你所需要的星期。

+1

儘管此鏈接可能會回答問題,但最好在此處包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+0

@dTDesign沒有想到微軟可能會更改地址的可能性 - 你完全相信。我會記住未來的答案 – toATwork

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; 
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) 
+0

哇,這是一個絕妙的解決方案!我正在寫這篇文章。我已經測試過它,它的功能就像一個魅力。 –

相關問題