如何处理 [NSDate] 和 Firebase
How to deal with [NSDate] and Firebase
我正在制作日历应用程序。我有一组选定的日期。用户之前选择它并存储在那里。
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"
)
我认为有一种更好的方法来存储日期然后检索它,我希望有人可以帮助我。
从双人中获取日期:
var interval = Double()
var date = NSDate()
date = NSDate(timeIntervalSince1970: interval)
反过来,从日期开始加倍:
interval = date.timeIntervalSince1970
答案实际上取决于您如何使用日期。
'numbers' 无法存储在 Firebase 中;任何数值首先(通过 Firebase)转换为 NSNumber 进行存储。参见 Understanding Data
您需要确定您将如何使用您的日期以及需要多少粒度。在某些情况下
2016-04-06
足够了,但有时您可能需要更多
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
日期键(date_0、date_1)是使用 childByAutoId 生成的。
由于 firebase 是一个文档数据库,json 基于我强烈建议使用 ISO 8601 格式的日期时间。这是这样的格式:
2012-04-23T18:25:43.511Z
在这个post中你可以找到一个很好的解释为什么:
The "right" JSON date format
Swift 4:
终于想通了。
将此保存到 firebase
let date = DateFormatter.localizedString(from: Date(), dateStyle: .short, timeStyle: .none)
根据需要更改日期样式和时间样式
将可变日期保存到 firebase DB
我正在制作日历应用程序。我有一组选定的日期。用户之前选择它并存储在那里。
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"
)
我认为有一种更好的方法来存储日期然后检索它,我希望有人可以帮助我。
从双人中获取日期:
var interval = Double()
var date = NSDate()
date = NSDate(timeIntervalSince1970: interval)
反过来,从日期开始加倍:
interval = date.timeIntervalSince1970
答案实际上取决于您如何使用日期。
'numbers' 无法存储在 Firebase 中;任何数值首先(通过 Firebase)转换为 NSNumber 进行存储。参见 Understanding Data
您需要确定您将如何使用您的日期以及需要多少粒度。在某些情况下
2016-04-06
足够了,但有时您可能需要更多
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
日期键(date_0、date_1)是使用 childByAutoId 生成的。
由于 firebase 是一个文档数据库,json 基于我强烈建议使用 ISO 8601 格式的日期时间。这是这样的格式:
2012-04-23T18:25:43.511Z
在这个post中你可以找到一个很好的解释为什么:
The "right" JSON date format
Swift 4:
终于想通了。
将此保存到 firebase
let date = DateFormatter.localizedString(from: Date(), dateStyle: .short, timeStyle: .none)
根据需要更改日期样式和时间样式
将可变日期保存到 firebase DB