【问题标题】:How do I determine if a date lies between current week dates?如何确定日期是否介于当前星期日期之间?
【发布时间】:2014-02-06 09:11:52
【问题描述】:

在 C# 中,

我们如何检查特定日期与周日期?

例如:2014 年 6 月 2 日

当前周数:02/02/2014 - 08/02/2014

所以这个日期是在上周......

【问题讨论】:

  • 你觉得一周是怎么开始的?在星期天?星期一?
  • 您的要求不是 100% 清楚。你能提供更详细的描述吗?
  • 可能重复:stackoverflow.com/questions/21599895/…(问题的同一作者)

标签: c#


【解决方案1】:

使用这个检查(最后一个参数是可选的,如果你想总是从fromDate开始1周,你不需要使用最后一个参数):

 public static bool DateInside(DateTime checkDate, 
     DateTime fromDate, DateTime? lastDate = null)
 {
     DateTime toDate = lastDate != null ? lastDate.Value : fromDate.AddDays(6d);
     return checkDate >= fromDate && checkDate <= toDate;
 }

调用使用:

bool isDateInside = DateInside(new DateTime(2014, 02, 06), 
     new DateTime(2014, 02, 02)); // return true

然后先搜索 :) 答案也在此处:How to check whether C# DateTime is within a range

如果你想检查日期是否在同一周内,那么你可以使用这个:

public static bool DateInsideOneWeek(DateTime checkDate, DateTime referenceDate)
{
    // get first day of week from your actual culture info, 
    DayOfWeek firstWeekDay = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
    // or you can set exactly what you want: firstWeekDay = DayOfWeek.Monday;
    // calculate first day of week from your reference date
    DateTime startDateOfWeek = referenceDate;
    while(startDateOfWeek.DayOfWeek != firstWeekDay)
    { startDateOfWeek = startDateOfWeek.AddDays(-1d); }
    // fist day of week is find, then find last day of reference week
    DateTime endDateOfWeek = startDateOfWeek.AddDays(6d);
    // and check if checkDate is inside this period
    return checkDate >= startDateOfWeek && checkDate <= endDateOfWeek;
}

我的文化信息中的实际一周从 2014 年 2 月 3 日星期一开始(所以对我来说是 2 月 3 日到 2 月 9 日之间的那一周)。如果我检查参考日期(第二个参数)为今天(2014 年 2 月 6 日)的任何日期,我会得到以下结果:

For 2014-Feb-02 (Sunday before this week): false
For 2014-Feb-03 (Monday inside this week): true
For 2014-Feb-06 (Today  inside this week): true
For 2014-Feb-09 (Sunday inside this week): true
For 2014-Feb-10 (Monday next        week): false

您可以调用此方法来检查一个日期是否与参考日期在同一周内,如下所示:

DateInsideOneWeek(new DateTime(2014, 02, 02), new DateTime(2014, 02, 06));

您可以使用以下代码找到当前一周的开始和结束日期

DateTime startDateOfWeek = DateTime.Now.Date; // start with actual date
while(startDateOfWeek.DayOfWeek != DayOfWeek.Monday) // set first day of week in your country
{ startDateOfWeek = startDateOfWeek.AddDays(-1d); } // after this while loop you get first day of actual week
DateTime endDateOfWeek = startDateOfWeek.AddDays(6d); // you just find last week day

这是你想要的吗?

【讨论】:

  • 我们如何找到当前周日期?然后检查相应的日期与周日期?
  • 我扩展了我认为你想要的答案。请检查这是否是您想要的,如果不是,请修改您的问题并解释它。
【解决方案2】:

public bool isBetween(DateTime input, DateTime date1, DateTime date2)
    {
        if (input > date1 && input < date2)
            return true;
        else
            return false;
    }

?

输入=您的日期 date1 & date2 = 一周的开始和结束

【讨论】:

  • 仅在上面举例。我们需要先找到所有当前工作日,然后需要检查相应的给定日期?
  • 是的,但这是非常简单的任务。您可以获得一周中的当前日期,并从中可以计算开始日期和结束日期
【解决方案3】:

怎么样:

bool inRange = (date >= lowerDate && date <= upperDate);

【讨论】:

  • 我认为 OP 希望得到给定的日期有哪些周(以及本周开始和结束的日期是什么)。当然问题根本不清楚..
  • @SonerGönül - 可能。目前还不是 100% 清楚要问什么 :-(
【解决方案4】:

这是另一个解决方案:)

public static class DateExtensions
{
    private static void Swap<T>(ref T one, ref T two)
    {
        var temp = one;
        one = two;
        two = temp;
    }

    public static bool IsFromSameWeek(this DateTime first, DateTime second, DayOfWeek firstDayOfWeek = DayOfWeek.Monday)
    {
        // sort dates
        if (first > second)
        {
            Swap(ref first, ref second);
        }

        var daysDiff = (second - first).TotalDays;
        if (daysDiff >= 7)
        {
            return false;
        }

        const int TotalDaysInWeek = 7;
        var adjustedDayOfWeekFirst = (int)first.DayOfWeek + (first.DayOfWeek < firstDayOfWeek ? TotalDaysInWeek : 0);
        var adjustedDayOfWeekSecond = (int)second.DayOfWeek + (second.DayOfWeek < firstDayOfWeek ? TotalDaysInWeek : 0);

        return adjustedDayOfWeekSecond >= adjustedDayOfWeekFirst;
    }
}

更新:它的性能似乎比@Atiris 解决方案至少好两倍 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多