質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

1371閲覧

Firebase Realtime Databaseで指定の時刻を記録したい

midomurasaki

総合スコア46

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2018/02/21 09:36

Xcode 9
Swift 4
でiOS アプリを開発しています。

Firebase Realtime Databaseへの記録について質問です。
ServerValue.timestamp()
でサーバーのタイムスタンプを記録できますが、
これに指定時間を加えて記録する方法はないでしょうか?

やりたいイメージとしては下記のような感じです。

swift

1let path = "maguro" 2let ref = Database.database().reference() 3// 指定時間 4let shoumiKigen: TimeInterval = 60 * 60 5 6 7// サーバーの現在の時刻から指定時間後を設定したい(この書き方だともちろんエラー) 8let value = ["limit": ServerValue.timestamp() + shoumiKigen] 9 10 11ref.child(path).childByAutoId().setValue(value) { error, databaseReference in 12// 略 13}

一度ServerValue.timestamp()で記録した後に数値を取りに行き、
加算して再度書き込む、、、といった力技でやれなくもなさそうですが、、、

スマートな方法をご存知でしたらご教示ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

よくわかりませんが、普通に考えたら、
iPhone側で現在時刻を取得して、
加工を加え、それをFirebaseに登録すればいいのではないでしょうか?
ズレが生じる可能性もありますが、、、

または、再度使う際にその一定時間を加えたものを使いたい
と言うことだとすれば、取り出してから加えて使用すると言うのが
一般的な気がします。

挙げた2パターンでは後者が現実的な気がします。
どうでしょう?


→midomurasakiさん、コメントありがとうございます。

iPhoneで時刻を手動で変更できると言うことを想定しておりませんでした。

確認して見たところ、手動で変更をられ、加えたら、
programのDate()も手動設定に合わさるようになっておりました。

この時代、時間を手動設定している人は少ないですが、
想定しないといけないバグですね。

となると、簡単な方法は新たなクラスを作成することですね。
ネット接続で正しい日付データを取得。その時のクライアントの時刻を取得。
誤差あれば、ネット接続+クライアントの時刻取得時からの経過時間で真の正しい時刻を計算
なければ、そのままクライアントの時刻を返す
でどうでしょう?

自分のアプリにもそれをかませなければいけないなと気付かせていただきました。
変更を考えねばいけないですね。swiftが純正でそう言うことしてくれればいいのに。。。

と、書いたところで、ひょっとしてと検索をかけたら、3行で解決できる方法が下記に記載されておりました。
https://qiita.com/kazu0620/items/64ed22b42649c6ef6ce4

内容は詳細に読んで試してないですが、
ご参考になれば幸いです。

投稿2018/06/02 15:52

編集2018/06/03 00:12
hameji

総合スコア1380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

midomurasaki

2018/06/02 23:00

例えば期限のあるアイテムなんかを管理したい場合を考えてみてください。 クライアント側のデバイス時刻はユーザーで簡単に操作できてしまいますよね。
midomurasaki

2018/07/31 01:35

追記ありがとうございます。 ご紹介いただいたリンク先の方法は不正な時刻操作に非常に有効そうですね。 大変参考になりました。 ですが、今回の質問である「指定時間を加えて記録する」ことの解決方法とは異なりますため、ベストアンサーに至らないことをご了承ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問