C#根据日期判断是否本周,根据日期,获得星期几

/// 判断选择的日期是否是本周
/// </summary>
/// <param name="someDate"></param>
/// <returns></returns>
public static bool IsThisWeek(DateTime someDate)
{
DateTime dt = DateTime.Now.Date;

DateTime nowMon = dt.AddDays(1 - (Convert.ToInt32(dt.DayOfWeek.ToString("d")) == 0 ? 7 : Convert.ToInt32(dt.DayOfWeek.ToString("d"))));

TimeSpan ts = someDate - nowMon;

if (ts.Days > 0 && ts.Days < 7)
{
return true;
}
else
{
return false;
}
}

/// <summary>根据日期,获得星期几</summary>
/// <param name="y">年</param>
/// <param name="m">月</param>
/// <param name="d">日</param>
/// <returns>星期几,1代表星期一;7代表星期日</returns>
public static int getWeekDay(int y, int m, int d)
{
if (m == 1) m = 13;
if (m == 2) m = 14;
int week = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7 + 1;
return week;
}

/// <summary>
/// 计算指定日期的星期值。星期日为0,其他为对应的星期值
/// 默认返回:int类型的星期值
/// </summary>
/// <param name="rq"> A System.DateTime</param>
public static int CaculateWeekDay(DateTime rq)
{
int y = rq.Year;
int m = rq.Month;
int d = rq.Day;
if (m == 1 || m == 2)
{
m += 12;
y--;
}
int week = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400 + 1) % 7;
return week;
}

/// <summary>
/// 计算本周起始日期(礼拜一的日期)
/// </summary>
/// <param name="someDate">该周中任意一天</param>
/// <returns>返回礼拜一日期,后面的具体时、分、秒和传入值相等</returns>
public static DateTime CalculateFirstDateOfWeek(DateTime someDate)
{
    int i = someDate.DayOfWeek - DayOfWeek.Monday;
    if (i == -1) i = 6;// i值 > = 0 ,因为枚举原因,Sunday排在最前,此时Sunday-Monday=-1,必须+7=6。
    TimeSpan ts = new TimeSpan(i, 0, 0, 0);
    return someDate.Subtract(ts);
}

/// <summary>
/// 计算本周结束日期(礼拜日的日期)
/// </summary>
/// <param name="someDate">该周中任意一天</param>
/// <returns>返回礼拜日日期,后面的具体时、分、秒和传入值相等</returns>
public static DateTime CalculateLastDateOfWeek(DateTime someDate)
{
    int i = someDate.DayOfWeek - DayOfWeek.Sunday;
    if(i != 0) i = 7 - i;// 因为枚举原因,Sunday排在最前,相减间隔要被7减。
    TimeSpan ts = new TimeSpan(i, 0, 0, 0);
    return someDate.Add(ts);
}

原文地址:https://www.cnblogs.com/zhuyilei/p/14118903.html