查找每个季度两个日期之间的天数

时间:2015-03-04 18:00:36

标签: ios iphone sqlite nsdate nsdatecomponents

我在表格中有两个日期列(SQLITE)

现在我需要的是找到这两个日期之间每个季度出现的天数

For example let's say,

start_Date = 12-Jan-2015
end_Date = 13-Jul-2015

So result should be like:

Quarter 1 = 79 days
Quarter 2 = 91 days
Quarter 3 = 13 days
Quarter 4 = 0 days

我试过下面的查询

SELECT CASE WHEN cast(strftime('%%m', end_date) as integer) BETWEEN 1 AND 3 THEN 'Q1' WHEN cast(strftime('%%m', end_date) as integer) BETWEEN 4 and 6 THEN 'Q2' WHEN cast(strftime('%%m', end_date) as integer) BETWEEN 7 and 9 THEN 'Q3' ELSE 'Q4' END as Quarter, sum(julianday(end_date) - julianday(start_date) + 1) AS Total FROM table WHERE end_date BETWEEN '2015-01-01 00:00:00' AND '2015-12-31 00:00:00' GROUP BY Quarter

但问题是它会在考虑end_date的季度显示所有日子。因此,如果end_date的月份为4,则所有日期将显示在第3季度。

欢迎任何建议。要么是sqlite查询,要么是ios SDK或两者都使用。在任何情况下都可能。

...谢谢!!

1 个答案:

答案 0 :(得分:1)

这在SQL中很难做到,但鉴于您使用NSDateComponents标记了这一点,看起来您已经了解了所需的基本技术。使用NSDateComponents提供的NSCalendar方法:

  • 使用component:fromDate:获取年份。

  • 使用月份1,日期1和之前确定的年份并调用dateFromComponents:来计算Q1的开始。

  • 现在循环:

    • 使用dateByAddingUnit(或dateByAddingComponents,如果您需要支持较旧的操作系统版本),在季度开始时添加三个月来计算下一季度的开始。

    • 查看开始日期和结束日期,将它们与季度的开始和结束进行比较,以确定此特定季度发生的天数(您可以使用components:fromDate:toDate:options:来计算天数)。

    • 在下一季度重复此操作。

这些是基本步骤。