如何确定一个星期/一个月的开始日期和结束日期?

时间:2019-08-04 23:35:10

标签: c# winforms

在我的餐馆POS软件应用程序中,餐馆老板可以使用一种表格来获取其销售的每日,每周,每月和自定义报告,以及该期间的总收入时间和售出商品的数量。现在,对于日报表和自定义报表,我没有问题,但是对于周报表和月报表,我不知道如何获取当前周或月的已售商品报表。我在Google上进行了很多搜索,但是找不到解决我问题的方法。

例如,今天是星期一,一周的第一天。我卖了30个汉堡和一些比萨饼。三天后,我想查看当前一周(即从星期一开始)的销售报告。从上周的同一天到当日,我的应用程序都会向我提供报告。这是我用于每周报告的代码。

Connection.Open();
OleDbCommand Cmnd = new OleDbCommand("SELECT SomeFields FROM Table WHERE [Date] between @Date2 and @Date1",Connection);

Cmnd.Parameters.Add("@Date2", DateTime.Now.AddDays(-7).ToShortDateString());
Cmnd.Parameters.Add("@Date1", DateTime.Now.ToShortDateString());

 OleDbDataAdapter GetList = new OleDbDataAdapter(Cmnd);
                DataTable DataT = new DataTable();
                GetList.Fill(DataT);
                Datagridview.DataSource = DataT;
Connection.Close();

现在,这段代码为我提供了过去7天到今天的销售报告,但是我想要的只是获取当前一周的销售报告。因此,如果是一周中的第三天,它将只给我3天的报告。

1 个答案:

答案 0 :(得分:0)

根据您的情况,您需要确定一周的开始日期和一周的结束日期。一种方法是拥有一个函数,该函数将告诉您自一周开始以来已经过去了多少天。在您的情况下,星期一是开始,所以一种简单的方法是:

 private int DaysSinceBeginOfWeek(DateTime dt)
    {
        switch (dt.DayOfWeek)
        {
            case DayOfWeek.Monday:
                return 0;
            case DayOfWeek.Tuesday:
                return 1;
            case DayOfWeek.Wednesday:
                return 2;
            case DayOfWeek.Thursday:
                return 3;
            case DayOfWeek.Friday:
                return 4;
            case DayOfWeek.Saturday:
                return 5;
            case DayOfWeek.Sunday:
                return 6;
        }
        throw new Exception("impossible happened");
    }

然后使用它来确定一周的开始和结束日期。喜欢:

 var beginOfWeek = DateTime.Now.AddDays(-1 * DaysSinceBeginOfWeek(DateTime.Now));
 var endOfWeek = beginOfWeek.AddDays(6);

要查找月份的开始和结束,可以执行以下操作:

 var firstOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
 var endOfMonth = firstOfMonth.AddMonths(1).AddDays(-1);

将它们插入查询中,您将获得所需的结果。