swift - 循环自日期以来的天/周/月/年(swift)
问题描述
我正在开发一个财务应用程序,用户可以在其中设置每日/每周/每月/每年的限制。
我想创建一个显示这些限制的表:分组,从用户添加限制的日期到当前日期
今天是 2020 年 5 月 1 日
例子
用户在2020 年 4 月 15 日添加了“每周限制”
然后我想显示以下单元格:
2020 年 4 月 13 日 - 2020 年 4 月 19 日 (第一周)
2020年4月20日-2020年4月26日 (第二周)
2020 年 4 月 27 日 - 2020 年 5 月 3 日 (第三周)
示例 2
用户在2020 年 1 月 10 日添加了“每月限制”
然后我想显示以下单元格:
- 一月 (第一个月)
- 二月 (第二个月)
- 三月 (第三个月)
- 四月 (第四个月)
- 五月 (第五个月)
每日/每年的限制也是如此。
我怎么能做到这一点?
class Spare {
static let shared = Spare()
var limits : [Limit] = [] // Here do I store the limits
func tableGenerateLimits() -> [Limit] {
// ???
}
}
class Limit : NSObject {
var id : Double
var date : Date
var value : Int
var type : LimitType = .weekly
init(id : Double? = nil, date : Date, value: Int, type : LimitType){
self.id = id ?? NSDate().timeIntervalSince1970
self.date = date
self.value = value
self.type = type
super.init()
}
}
我完全迷失了
解决方案
首先,您可以创建一个Date()
对象,然后使用一个Calendar
对象来获取所有这些计算所需的值。
let date = Date()
let calendar = Calendar.current
var year = 0
var month = 0
var day = 0
然后,您可以通过执行此类操作获得特定的返回日期。
let toDate = Calendar.current.date(byAdding: .day, value: someDayFutureOrPast, to date)
一旦你将你的特定日期存储为一个变量,你就可以简单地把它从calendar
类似的东西中取出来。
let year = calendar.component(.year, from: toDate!)
let month = calendar.component(.month, from: toDate!)
let day = calendar.component(.day, from: toDate!)
由于您正在使用单元格,因此您需要放置一种方法来从您的tableView(cellForRowAt...)
方法中的某个地方或任何适合您的地方获取它。
这是一种可以得到你想要的东西的方法。为简单起见,我返回了一个元组,但您可以根据需要对其进行转换。对任何语法错误表示歉意。我不在我的 Mac 上,也不在我的 atm 附近。
func getDate(dateFromCurrent: Int) -> (Int, Int, Int) {
let date = Date()
let calendar = Calendar.current
var year = 0
var month = 0
var day = 0
let toDate = Calendar.current.date(byAdding: .day, value: someDayFutureOrPast, to date)
return (calendar.component(.year, from: toDate!),
calendar.component(.month, from: toDate!),
calendar.component(.day, from: toDate!)
}
注意您可以BACK IN TIME
通过将 更改someDayFutureOrPast
为负整数来进行。
推荐阅读
- swift - 如何在 Swift 中将双元音符号字符分成对应的两个字母?
- json - 如果内容混合,则显示来自 JSON 的值
- javascript - 功能 setState 和道具
- python - 如何将视图中的参数传递到 django 中的 modelForm 中?
- python - Numpy - 将 3D 数组(100,100,3)与 2D 数组(100,100)相乘
- javascript - 编写 reactJS 网页标记的所有选项有哪些?
- python - Django,使用字典列表的响应
- react-native - 我正在尝试安装 axios 但发生了这样的错误
- javascript - odoo 11 不加载 javascript 代码
- reactjs - 从 material-ui 日期选择器中删除年份