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

标签 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 中,要么同时使用两者。在任何可能的情况下。

谢谢....!!

最佳答案

这在 SQL 中很难做到,但考虑到您用 NSDateComponents 标记了它,看起来您知道所需的基本技术。使用 NSCalendar 提供的 NSDateComponents 方法:

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

  • 使用 1 月、1 日和先前确定的年份的组成部分并调用 dateFromComponents: 来计算第 1 季度的开始时间。

  • 现在循环:

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

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

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

这些是基本步骤。

关于ios - 查找每个季度中两个日期之间的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28861586/

相关文章:

ios - UITableView Swift 3.0 底部刷新控件的创建方法

iphone - 如何使用 MKStoreKit 恢复购买

iphone - 自动调整 UITextView 和 UIScrollView 的大小

iphone - 有没有办法调整 UIModalTransitionStyle 速度/持续时间?

sql - 将 AUTO INCREMENT 列添加到 Sqlite View

SQL 表不遵守其唯一约束

ios - UITableView 行动画持续时间和完成回调

ios - 保持 UNNotificationContent 几秒钟

ios - AppCode 中的 Xcode 对象类型弹出等效项?

android - SQLite 数据库在 Android 设备上创建失败,/data/data/<package> 没有 rw 权限