如何减去两天或几周的日期?

Rob*_*Rob 2 c# datetime

我正在寻找一个可以输入2个日期的函数:

从这样开始:

         public static String getDaysOrWeeksFromDateDiff(DateTime first, DateTime second)
        {
    //this function will substract the date from the other and result days if < 8 and weeks if > 7

return "1 week";
        }
Run Code Online (Sandbox Code Playgroud)

我在下面尝试过这个功能,但它给了我一个负面的日期(我在计算中错过了一年的某种方式)

 public static String getDaysOrWeeksFromDateDiff(DateTime first, DateTime second)
    {
        var cal = new GregorianCalendar(GregorianCalendarTypes.Localized);
        var weeknr = cal.GetWeekOfYear(first, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
        var weeknr2 = cal.GetWeekOfYear(second, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
        String strReturnValue;
        if (weeknr == weeknr2)
        {
            var dagen = first.Day - second.Day;
            strReturnValue = (dagen == 0 ? "today" : (dagen == 1 ? "1 day" : dagen + " days"));
        }
        else
        {
            strReturnValue = (weeknr - weeknr2 == 1 ? "1 week" : weeknr - weeknr2 + " weeks");
        }
        return strReturnValue;
    }
Run Code Online (Sandbox Code Playgroud)

Hei*_*nzi 5

您可以直接减去日期:

TimeSpan difference = second - first;
Run Code Online (Sandbox Code Playgroud)

这将返回一个TimeSpan对象,您可以轻松查询该对象,例如

if (difference.Days >= 8) ...
Run Code Online (Sandbox Code Playgroud)

将数量转换Days为周数应该是一项微不足道的练习,因为每周都有7天......

(注意,它Days会以整数形式给出天数,而TotalDays包括小数天数.)

  • 你应该使用`Math.Abs​​(difference.Days)`如果你不在乎`first`>`second`并且你不想要否定结果. (3认同)