这可能很简单,但我今天有点"不会做基础数学"。
我有一个系统,我们根据当天的情况切断订单,所以例如,周五下午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