2014-04-28 24 views
1

這很可能是令人尷尬的簡單,但我有一個「不能做基本的數學」樣的日子。鑑於DAYOFWEEK號,找了一天的日期前一週

我有一個系統,我們根據當天的情況切斷訂單,例如週五下午4點之後,您不能訂購下一個星期日,或者星期二下午2點之後您不能訂購第二天。知道我需要說的好,我需要在週日5月4日的產物,是截止時,並將它告訴我,這是星期五5月2日。

所以我有下面的代碼不正常工作

int offset = (int)reqDate.DayOfWeek - thiscafeday.day_number; 

DateTime cutoffDateTime = reqDate.AddDays(-offset); 

其中reqDate.DayOfWeek是週日(0)和thiscafeday.day_number是週五(5)。我需要星期五的日期。 cutoffDateTime值是正確的,如果截止日期是第二天,但星期日(即DayOfWeek 0)似乎混淆了一切。我似乎常常最終得到正確的一天,但在接下來的周,而不是以前的(我想,我們由於負偏移)。

如果有人有一個簡單的方法來獲取給定當前日期在過去的一週內任意以前一天的日期,我會的幫助非常感激。

我也試着在

((7- (int)reqDate.DayOfWeek + thiscafeday.day_number) % 7) 

的變化,但不能得到這工作的。

任何幫助表示讚賞。

回答

1

您可以使用這些擴展方法:

public static class DateExtensions 
{ 
    public static DateTime Next(this DateTime from, DayOfWeek dayOfWeek) 
    { 
     int start = (int)from.DayOfWeek; 
     int wanted = (int)dayOfWeek; 
     if (wanted <= start) 
      wanted += 7; 
     return from.AddDays(wanted - start); 
    } 

    public static DateTime Previous(this DateTime from, DayOfWeek dayOfWeek) 
    { 
     int end = (int)from.DayOfWeek; 
     int wanted = (int)dayOfWeek; 
     if (wanted >= end) 
      end += 7; 
     return from.AddDays(wanted - end); 
    } 
} 


var lastFriday = DateTime.Today.Previous(DayOfWeek.Friday); 

(它可能對於需要一些適應您的具體情況)

+0

這真是太棒了,謝謝! – Dave

1

,而不是試圖計算天來抵消,你可以簡單地倒退,直到你,你想要的。

DateTime GetDay(DateTime startDate, DayOfWeek targetDay) 
{ 
    var date = startDate; 
    while (date.DayOfWeek != targetDay) 
    { 
     date = date.AddDays(-1); 
    } 
    return date; 
} 

如果您還需要補償,你也可以在以後減去日期:

DateTime startDate = new DateTime(2014, 4, 27); // Sunday 
DateTime friday = GetDay(startDate, DayOfWeek.Friday); 
int diff = (startDate - friday).Days; // subtracting DateTimes gives a TimeSpan 
Console.WriteLine(diff); // 2 
+0

感謝您的幫助蒂姆,我看着循環,雖然必須有一個「聰明而優雅」使用數字的方式,但顯然不是這次! – Dave

+0

你當然可以用數字來做。它是否最終比環路更優雅更清晰並不那麼確定。 –

相關問題