public static int DaysSince(this DateTime d, DateTime since) { int days = 0; if (d.HasValue() && since.HasValue()) { days = int.Parse(Math.Ceiling(d.DayEnd().Subtract(since.DayStart()).TotalDays).ToString()); } return days; }
public async Task<TripDistanceStats> GetStats (DateTime now) { using (var connection = await GrabConnection ().ConfigureAwait (false)) { if (!connection.Table<BikeTrip> ().Any ()) return new TripDistanceStats (); return await Task.Run (() => new TripDistanceStats { Daily = FetchStatsFromDate (connection, now.DayStart ()), Weekly = FetchStatsFromDate (connection, now.WeekStart ()), Monthly = FetchStatsFromDate (connection, now.MonthStart ()), PrevDay = FetchStatsBetweenDates (connection, now.DayStart ().PreviousDay (), now.DayStart ()), PrevWeek = FetchStatsBetweenDates (connection, now.WeekStart ().PreviousWeek (), now.WeekStart ()), PrevMonth = FetchStatsBetweenDates (connection, now.MonthStart ().PreviousMonth (), now.MonthStart ()), }).ConfigureAwait (false); } }
public static bool IsBetween(this DateTime d, DateTime start, DateTime end) { return d >= start.DayStart() && d <= end.DayEnd(); }
public async Task<Dictionary<AggregatedStatsKey, double>> GetAggregatedStats (DateTime now) { var result = new Dictionary<AggregatedStatsKey, double> (); using (var connection = await GrabConnection ().ConfigureAwait (false)) { if (!connection.Table<BikeTrip> ().Any ()) return result; var dayStart = now.DayStart ().ToUniversalTime (); var weekStart = now.WeekStart ().ToUniversalTime (); var monthStart = now.MonthStart ().ToUniversalTime (); now = now.ToUniversalTime (); await Task.Run (() => { result[AggregatedStatsKey.DailyThisWeek] = connection.ExecuteScalar<double> (DayAverageQuery, weekStart, now, (int)(now - weekStart).TotalDays + 1); result[AggregatedStatsKey.DailyThisMonth] = connection.ExecuteScalar<double> (DayAverageQuery, monthStart, now, (int)(now - monthStart).TotalDays + 1); result[AggregatedStatsKey.BestTripToday] = connection.ExecuteScalar<double> (BestTripQuery, dayStart, now); result[AggregatedStatsKey.BestTripInWeek] = connection.ExecuteScalar<double> (BestTripQuery, weekStart, now); result[AggregatedStatsKey.BestTripInMonth] = connection.ExecuteScalar<double> (BestTripQuery, monthStart, now); result[AggregatedStatsKey.MeanTripToday] = connection.ExecuteScalar<double> (BestTripQuery, dayStart, now); result[AggregatedStatsKey.MeanTripInWeek] = connection.ExecuteScalar<double> (BestTripQuery, weekStart, now); result[AggregatedStatsKey.MeanTripInMonth] = connection.ExecuteScalar<double> (BestTripQuery, monthStart, now); }).ConfigureAwait (false); return result; } }