protected DateTimeOffset?FromRelationAmountTime(string relation, int amount, string size, DateTimeOffset relativeBaseTime, bool isUpperLimit) { relation = relation.ToLower(); size = size.ToLower(); if (amount < 1) { throw new ArgumentException("Time amount can't be 0."); } TimeSpan intervalSpan = Helper.GetTimeSpanFromName(size); if (intervalSpan != TimeSpan.Zero) { var totalSpan = TimeSpan.FromTicks(intervalSpan.Ticks * amount); switch (relation) { case "ago": return(isUpperLimit ? relativeBaseTime.SafeSubtract(totalSpan).Ceiling(intervalSpan).SubtractMilliseconds(1) : relativeBaseTime.SafeSubtract(totalSpan).Floor(intervalSpan)); case "from now": return(isUpperLimit ? relativeBaseTime.SafeAdd(totalSpan).Ceiling(intervalSpan).SubtractMilliseconds(1) : relativeBaseTime.SafeAdd(totalSpan).Floor(intervalSpan)); } } else if (size == "week" || size == "weeks") { switch (relation) { case "ago": return(isUpperLimit ? relativeBaseTime.SubtractWeeks(amount).EndOfDay() : relativeBaseTime.SubtractWeeks(amount).StartOfDay()); case "from now": return(isUpperLimit ? relativeBaseTime.AddWeeks(amount).EndOfDay() : relativeBaseTime.AddWeeks(amount).StartOfDay()); } } else if (size == "month" || size == "months") { switch (relation) { case "ago": return(isUpperLimit ? relativeBaseTime.SubtractMonths(amount).EndOfDay() : relativeBaseTime.SubtractMonths(amount).StartOfDay()); case "from now": return(isUpperLimit ? relativeBaseTime.AddMonths(amount).EndOfDay() : relativeBaseTime.AddMonths(amount).StartOfDay()); } } else if (size == "year" || size == "years") { switch (relation) { case "ago": return(isUpperLimit ? relativeBaseTime.SubtractYears(amount).EndOfDay() : relativeBaseTime.SubtractYears(amount).StartOfDay()); case "from now": return(isUpperLimit ? relativeBaseTime.AddYears(amount).EndOfDay() : relativeBaseTime.AddYears(amount).StartOfDay()); } } return(null); }
public void AddWeeks() { var date = new DateTimeOffset(2013, 7, 26, 0, 0, 0, DateTimeOffset.Now.Offset); Assert.AreEqual(new DateTimeOffset(2013, 8, 9, 0, 0, 0, DateTimeOffset.Now.Offset), date.AddWeeks(2)); Assert.AreEqual(new DateTimeOffset(2013, 7, 12, 0, 0, 0, DateTimeOffset.Now.Offset), date.AddWeeks(-2)); }
public static DateTimeOffset NextWeek(this DateTimeOffset date) { return(date.AddWeeks(1)); }
public static DateTimeOffset SubtractWeeks(this DateTimeOffset dateTimeOffset, double weeks) { return(dateTimeOffset.AddWeeks(-weeks)); }