【问题标题】:Logical Query to calculate weeks计算周数的逻辑查询
【发布时间】:2013-05-14 10:41:06
【问题描述】:

我要求用户在某个应用程序中输入开始和结束日期。然后我计算没有。这两个日期之间的周数。

我想获取在给定时间段内每周创建的文档。 我无法实现一个逻辑来帮助我获取第一周、第二周、第三周等等。

我将使用它作为数据库的输入,然后创建图形。我使用 php 作为服务器端语言。任何人都可以向我推荐算法。

例如:

Start date: 20/07/2012

End Date: 19/02/2013.

Total no. of days: 214.

Total no. of weeks: 30 (30 weeks and 4 days)

我想获取 20/07/2012 到 27/07/2012 的时间段,没有。在此期间的 Docs。至 2013 年 2 月 15 日。

【问题讨论】:

标签: php logic weblogic week-number


【解决方案1】:

这里没有看到您的数据库结构是您需要的示例

SELECT YEAR(doc_created) AS report_year, WEEKOFYEAR(doc_created) AS report_week, COUNT(*) AS doc_count
FROM documents
WHERE doc_created BETWEEN '2012-07-20' AND '2013-07-19'
GROUP BY YEAR(doc_created), WEEKOFYEAR(doc_created)

按weekofyear 分组是不够的,因为期间可能与下一年重叠,所以我们还应该包括年份。

possible results:  
year  week  docs  
2012  1     4  
2012  3     1  
2013  1     65  
2013  2     4  

如您所见,如果我们只使用周数,2012 年第 1 周将与 2013 年第 1 周重叠。

为您的表格/图表使用参考(周年)和金额(文档)
例如2012wk1 是 4,2012wk3 是 1

【讨论】:

  • 我已经处理了数据库元素,我需要算法来在我创建的图形图像中实现这些细节。现在我只能打印一天内选择的文档数。
  • 上述查询将给出report_year, report_week, doc_count每周,因此不需要算法,只需将数字插入网格或图像即可。 (查看phpchart.net
【解决方案2】:
Try this code:



     $start_date    =   "20-07-2012";
    $end_date   =   "20-08-2012 ";

    while($start_date){
        if(strtotime($start_date) > strtotime($end_date)){
            exit;
        }
        $start_date =   strtotime("+7 day", strtotime($start_date));
        $start_date =   date("d-m-Y", $start_date);
        echo $start_date;
        echo "<br/>";
    }

【讨论】:

  • strtotime() 在英国日期无法正常工作。如果可能,它将假定它是美国。所以 01-03-2012 将给出 3 月 3 日而不是 3 月 1 日。
  • 使用 exit 来停止 while 循环?你是认真的吗?!
猜你喜欢
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
相关资源
最近更新 更多