我正在制作日历应用。我有一个选定日期的数组。用户之前选择了它并将它们存储在那里。
var selectedDays = [NSDate]()
当应用加载时,我必须显示这些日期,但所有内容都过于复杂,因为Firebase不接受NSDate
我有另一个数组var selectedDaysForFirebase = [String]()
,它与上面的数组相同,只有日期转换为字符串以容纳Firebase。
这是我保存所选日期的方式:
// 1. Append converted date into selectedDaysForFirebase array
let day = dateFormatter.stringFromDate(date)
selectedDaysForFirebase.append(day)
// 2. Push data to Firebase
ref.childByAppendingPath("dates").setValue(selectedDaysForFirebase)
我的Firebase具有用户身份验证。所以每个用户都拥有自己的日期小数据库。
在我的viewDidLoad
中,我必须从Firebase获取该日期数组并将其存储在我的selectedDates
数组中,该数组接受NSDate
ref.childByAppendingPath("dates").observeEventType(.Value, withBlock: { snapshot in
if let dates = snapshot.value as? NSArray {
print(dates)
// convert firebase array of dates with array of dates that only accepts NSDate
}
}, withCancelBlock: { error in
print(error.description)
})
输出:
(
"2016-04-10",
"2016-04-11",
"2016-04-12"
)
我认为有一种更好的方式来存储日期然后进行检索,我希望有人可以帮我解决这个问题。
答案 0 :(得分:7)
从双人身份获取日期:
var interval = Double()
var date = NSDate()
date = NSDate(timeIntervalSince1970: interval)
相反,从日期开始加倍:
interval = date.timeIntervalSince1970
答案 1 :(得分:7)
答案实际上取决于您使用日期的方式。
'数字'无法存储在Firebase中;任何数值首先(通过Firebase)转换为NSNumber进行存储。见Understanding Data
您需要确定如何使用日期以及需要多少粒度。在某些情况下
2016年4月6日
就足够了,但有时候你可能还需要更多
2016-04-06 14:00:00
我建议只将它们存储为字符串,因为它们是可排序的,易于操作,可以带入NSDate对象或从NSDate对象中取出。
这里有一些示例代码,用于将NSDate转换为格式化字符串,类似于时间戳,然后可以将其作为字符串存储在Firebase中。
NSDateFormatter *dateFormat = [NSDateFormatter new];
[dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"];
NSString *dateString = [dateFormat stringFromDate:[NSDate date]];
NSLog(@"%@",dateString);
以及从格式化字符串到NSDate的另一种方式
NSDate *d = [NSDate new];
d = [dateFormat dateFromString:dateString];
NSLog(@"the date %@", d);
最重要的是:保持一致。无论如何,每次在代码中都这样做。
哦 - 另一件事。阵列'第数组应该谨慎使用,并且只能在Firebase中的特定用例情况下使用。由于您无法访问特定索引或能够更改,添加或删除单个索引,因此使用它们可能具有挑战性。
这是一个更好的结构
my_dates
date_0
date_stamp: 2016-04-06
date_1
date_stamp: 2016-04-07
使用childByAutoId生成日期键(date_0,date_1)。
答案 2 :(得分:0)
由于firebase是一个文档db,基于json我强烈建议使用ISO 8601格式的日期时间。这是一种格式:
2012-04-23T18:25:43.511Z
在这篇文章中你可以找到一个很好的解释原因:
答案 3 :(得分:0)
快捷键4:
终于明白了。
将其保存到Firebase
let date = DateFormatter.localizedString(from: Date(), dateStyle: .short, timeStyle: .none)
根据需要更改dateStyle和timeStyle
将可变日期保存到Firebase数据库