给定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)。我需要星期五的日期。如果截止日期是第二天,但周日(即第0周的第几天)似乎把一切都搞砸了,那么cutoffDateTime值是正确的。我似乎经常会得到正确的一天,但下一周,而不是前一周(我想这是由于负偏移)。

如果有人有一个简单的方法,在给定当前日期的情况下,在过去一周内获得前一个任意日期,我将非常感谢您的帮助。

我也尝试了的变体

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

但也不能让它发挥作用。

感谢您的帮助。

您可以使用以下扩展方法:

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

(可能需要根据您的具体情况进行一些调整)

与其试图计算要抵消的天数,不如简单地后退一步,直到到达您想要的位置。

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

相关内容

  • 没有找到相关文章

最新更新