私は現在の時刻にタイムスタンプを更新する赤いボタンをクリックするアプリを作っています - >ボタンが緑色に変わります>タイムスタンプの12時間後にもう一度赤色になり、>サイクルが続行されます。ここに私のコードです:タイムスタンプを作成する場所と、ユーザーがアプリケーションを閉じて再オープンした後に参照する方法
var timestampHour = 8
var timestampDay = 30
func getCurrentTime() {
let user = FIRAuth.auth()?.currentUser?.uid
var timeToFirebase = 0
var timeToDayEnd = 0
let currentHour = Calendar.current.component(.hour, from: Date())
let currentDay = Calendar.current.component(.day, from: Date())
//self.nameLabel.text = String(currentHour) + " " + String(currentHour)
if (currentDay - timestampDay >= 2) {
self.ref?.child("users").child(user!).child("timeToWatch").setValue(0)
self.ref?.child("users").child(user!).child("streakStatus").setValue("n")
}
else if (abs(currentDay - timestampDay) == 1) {
timeToDayEnd = 24 - timestampHour
timeToFirebase = timeToDayEnd + currentHour
if (timeToFirebase >= 12) {
self.ref?.child("users").child(user!).child("timeToWatch").setValue(0)
self.ref?.child("users").child(user!).child("streakStatus").setValue("n")
}
else {
self.ref?.child("users").child(user!).child("timeToWatch").setValue(timeToFirebase)
}
}
else {
timeToFirebase = currentHour - timestampHour
if (timeToFirebase >= 12) {
self.ref?.child("users").child(user!).child("timeToWatch").setValue(0)
self.ref?.child("users").child(user!).child("streakStatus").setValue("n")
}
else {
self.ref?.child("users").child(user!).child("timeToWatch").setValue(timeToFirebase)
}
}
}
私は1つの時間と別の時間の違いを見つける方法を見つけ出し、それに応じて行動することができました。しかし、ユーザーが最初にアプリケーションを開いたときにタイムスタンプを作成し、ユーザーがタイムスタンプの12時間後に現在のタイムスタンプにアプリを開くと、そのタイムスタンプを更新するにはどうすればよいですか?私はタイムスタンプを作る方法について全面的に混乱しています。
質問に無関係ですが、コードに潜在的なバグがあります。 currentHourとcurrentDayを取得する2つの行は、 'Date()'への2つの別々の呼び出しを使用します。つまり、ある日付からその日までの時間を別の日付から取得します。真夜中にそのコードが呼び出されると、その時間と間違った(次の)日に23を得ることができる非常に小さなチャンスがあります。共通の 'Date'インスタンスを使用するか、2回の別々の呼び出しの代わりに1回の呼び出しで両方のコンポーネントを取得します。 – rmaddy