【问题标题】:How to determine the begin day and the end day of a week/month?如何确定一周/一个月的开始日和结束日?
【发布时间】:2019-08-05 22:54:29
【问题描述】:

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

例如,今天是星期一,一周的第一天。我卖了 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 天,它只会给我 3 天的报告。

【问题讨论】:

  • 这应该真正解决,在进入数据库之前,通过找出当前一周的开始是什么,作为DateTime 或(最好)DateTimeOffset 问题has an answer 已经。
  • 为什么要将日期转换为查询字符串?甚至 MS Access 也有一个可行的日期类型
  • @ŇɏssaPøngjǣrdenlarp,我的日期字段数据类型是日期/时间,但我仍然遇到数据类型不匹配错误,而且我遇到了很多相同的错误,所以我对转换更满意,使确保我没有收到任何错误。
  • 不可能比较两个日期并得到数据类型不匹配错误。
  • @ŇɏssaPøngjǣrdenlarp,我也觉得很奇怪,但是即使我使用了下面的解决方案,我也没有转换为字符串,我得到了不匹配错误,直到我转换为字符串并且它起作用了。

标签: c# winforms


【解决方案1】:

在您的情况下,您需要确定一周的开始日期和一周的结束日期。一种方法是使用一个函数来告诉您自一周开始以来已经过去了多少天。就您而言,星期一是开始,因此一种简单的方法是:

 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);

将它们插入您的查询中,您应该会得到想要的结果。

【讨论】:

  • 我使用了你的代码,它完全符合我的要求,但我只是做了一点改变,我让星期一返回 1 和星期二 2 等等,因为星期一没有被算作一天本周的。输入代码后,我只是去订购了一些东西,然后回来查看报告,星期一不在,所以我只是让星期一返回 1 而不是 0 并且它起作用了。非常感谢你的帮助。但是,我也想问你,我如何才能在本月也这样做?
  • 乐于助人!很高兴听到您更新了代码以匹配您的情况。好样的!此外,添加了关于如何确定当前月份的开始和结束的 sn-p。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
相关资源
最近更新 更多