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

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

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

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Swift

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

Q&A

解決済

1回答

2211閲覧

表示された日付の始まりと終わりを取得したい

tom0708

総合スコア7

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Swift

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

0グッド

0クリップ

投稿2020/02/13 08:16

日付が変わったらtablwViewの更新がされる画面を作成しております。
データについては、Realmで管理しており、表示された日付の始まりと終わりを指定して、realmのfilterで検索を実施したいのですが、コードはあっているのですが、print()で確認したところ、取得できる時間が◯月◯日15:00に固定されてしまいます。SwiftPlayGroundでは同じ書き方で◯月◯日0時0分と取得できているので、色々調べていますが、分からなかったので質問させていただきます。
この事象についてアドバイスお願い致します。
デバッグエリアに表示された日付の値(2月13日を指定した場合)
2020-02-12 15:00:00 +0000 date1
2020-02-13 15:00:00 +0000 date2

以下関係コード載せます。
該当のコード

swift

1import UIKit 2import PlaygroundSupport 3 4var selectedDate = Date() 5 6var calendar = Calendar.current 7calendar.timeZone = NSTimeZone.local 8let date1 = calendar.startOfDay(for: selectedDate) 9let date2 = calendar.date(byAdding: .day, value: 1, to: date1)

実装中のコード全文

swift

1import UIKit 2import RealmSwift 3 4class RecordViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UINavigationControllerDelegate { 5 6 lazy var realm = try! Realm() 7 8 @IBOutlet var tableView: UITableView! 9 10//日付表示用タイトル 11 @IBOutlet var labelToday: UINavigationItem! 12//赤ちゃんの名前を表示するタイトル 13 @IBOutlet var babyName: UINavigationItem! 14//年齢表示ラベル 15 @IBOutlet var birthdayLabel: UILabel! 16//前日ボタン 17 @IBOutlet var yesterdayLabel: UIBarButtonItem! 18//翌日ボタン 19 @IBOutlet var tomorrowLabel: UIBarButtonItem! 20 21 @IBOutlet var babyImage: UIImageView! 22 23//RegistrationViewControllerで入力されたニックネームを受け取る変数 24 var name = "" 25//選択画像受取 26 var babyImageView:UIImage = UIImage() 27 28 var birthdayLabel2 = "" 29 30 var babyBirthday = Date() 31 32 var todoItems: Results<Record>! 33 34 var selectedDate = Date() 35 36 let defaults = UserDefaults.standard 37 38 let sexImage: UIImage? = nil 39 40 var now = Date().addingTimeInterval(0) 41 42 43 44 override func viewDidLoad() { 45 super.viewDidLoad() 46 47 var calendar = Calendar.current 48 calendar.timeZone = NSTimeZone.local 49 let date1 = calendar.startOfDay(for: selectedDate) 50 51 let date2 = calendar.date(byAdding: .day, value: 1, to: date1) 52 todoItems = realm.objects(Record.self).filter("date >= %@ AND date < %@", date1, date2!) 53//2020-02-12 07:40:21 +0000 時間表示形式 54 55//ライトモード設定 56 self.overrideUserInterfaceStyle = .light 57 58 self.tableView.dataSource = self 59 self.tableView.delegate = self 60 61 62//日付表示 63 labelToday.title = getToday() 64 65 birthdayLabel.text = birthdayLabel2 66 67 68//realmデータ確認用 69 print(Realm.Configuration.defaultConfiguration.fileURL!) 70 71 tableView.register(UINib(nibName: "TableViewCell", bundle: nil),forCellReuseIdentifier:"RecordCell") 72 } 73 74 75//タップすると表示の日付から−1日 76 @IBAction func buttonYesterday(_ sender: Any) { 77 let f = DateFormatter() 78 f.dateStyle = .full 79 f.timeStyle = .none 80 f.locale = Locale(identifier: "ja_JP") 81 82 selectedDate = Date(timeInterval: 60 * 60 * -24, since: selectedDate) 83 84 now = Date(timeInterval: 60 * 60 * -24, since: now) 85 86 labelToday.title = f.string(from: now) 87 88 let calendar = Calendar.current 89 let date1 = calendar.startOfDay(for: selectedDate) 90 let date2 = calendar.date(byAdding: .day, value: 1, to: date1) 91 todoItems = realm.objects(Record.self).filter("date >= %@ AND date < %@", date1, date2!) 92 print(date1,"date1") 93 print(date2!,"date2") 94 tableView.reloadData() 95 } 96//タップすると表示の日付から1日 97 @IBAction func buttonTomorrow(_ sender: Any) { 98 let f = DateFormatter() 99 f.dateStyle = .full 100 f.timeStyle = .none 101 f.locale = Locale(identifier: "ja_JP") 102 103 selectedDate = Date(timeInterval: 60 * 60 * 24, since: selectedDate) 104 105 now = Date(timeInterval: 60 * 60 * 24, since: now) 106 107 labelToday.title = f.string(from: now) 108 109 let calendar = Calendar.current 110 let date1 = calendar.startOfDay(for: selectedDate) 111 let date2 = calendar.date(byAdding: .day, value: 1, to: date1) 112 todoItems = realm.objects(Record.self).filter("date >= %@ AND date < %@", date1, date2!) 113 114 tableView.reloadData() 115 } 116//以下育児状況記録用のボタン 117 @IBAction func wakeUpButton(_ sender: Any) { 118 119 let record = Record() 120 record.date = selectedDate 121 record.title = "起きる" 122 record.nowTime = getTime() 123 record.buttonImage = UIImage(named: "smile") 124 record.save() 125 tableView.reloadData() 126 } 127 128 @IBAction func sleepButton(_ sender: Any) { 129 130 let record = Record() 131 record.date = selectedDate 132 record.title = "寝る" 133 record.nowTime = getTime() 134 record.buttonImage = UIImage(named: "sleep") 135 record.save() 136 tableView.reloadData() 137 } 138 139 @IBAction func peepButton(_ sender: Any) { 140 141 let record = Record() 142 record.date = selectedDate 143 record.title = "うんち" 144 record.nowTime = getTime() 145 record.buttonImage = UIImage(named: "peep") 146 record.save() 147 tableView.reloadData() 148 } 149 150 @IBAction func urineButton(_ sender: Any) { 151 152 let record = Record() 153 record.date = selectedDate 154 record.title = "おしっこ" 155 record.nowTime = getTime() 156 record.buttonImage = UIImage(named: "diapers") 157 record.save() 158 tableView.reloadData() 159 } 160 161 @IBAction func milkButton(_ sender: Any) { 162 163 let record = Record() 164 record.date = selectedDate 165 record.title = "ミルク" 166 record.nowTime = getTime() 167 record.buttonImage = UIImage(named: "milk") 168 record.save() 169 tableView.reloadData() 170 } 171 172 @IBAction func feedButton(_ sender: Any) { 173 174 let record = Record() 175 record.date = selectedDate 176 record.title = "授乳" 177 record.nowTime = getTime() 178 record.buttonImage = UIImage(named: "breastfeed") 179 record.save() 180 tableView.reloadData() 181 } 182 183//画面が表示される前に実行される処理 184 override func viewWillAppear(_ animated: Bool) { 185 super.viewWillAppear(animated) 186 //userDefaultsから参照(Data) 187 let sexData = defaults.data(forKey: "image") 188 //DataをImageに変換 189 let sexImage = UIImage(data: sexData!) 190 191 //入力した誕生日を取得 192 birthdayLabel.text = defaults.string(forKey: "birthdaySetting") 193 194 //入力されたニックネームを表示 195 babyName.title = defaults.string(forKey: "Name") 196 197 // babyImage.image = babyImageView 198 // 取得した性別画像を表示 199 babyImage.image = sexImage 200 201 202 var calendar = Calendar.current 203 calendar.timeZone = NSTimeZone.local 204 let date1 = calendar.startOfDay(for: selectedDate) 205 let date2 = calendar.date(byAdding: .day, value: 1, to: date1) 206 todoItems = realm.objects(Record.self).filter("date >= %@ AND date < %@", date1, date2!) 207 tableView.reloadData() 208 } 209 210//セル数宣言 211 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 212 return todoItems.count 213 } 214 215//セル表示 216 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 217 let cell = tableView.dequeueReusableCell(withIdentifier: "RecordCell", for: indexPath) as! TableViewCell 218 219 /*let calendar = Calendar.current 220 let date1 = calendar.startOfDay(for: selectedDate) 221 let date2 = calendar.date(byAdding: .day, value: 1, to: date1) 222 todoItems = realm.objects(Record.self).filter("date >= %@ AND date < %@", date1, date2!)*/ 223 // print(date1,"date1") 224 // print(date2!,"date2") 225 let object = todoItems[indexPath.row] 226 227 cell.ParentLabel.text = object.title 228 cell.TimeLabel.text = object.nowTime 229 cell.ButtonImage.image = object.buttonImage! 230 231 232/* for rd in result { 233 if rd.date >= date1 && rd.date < date2! { 234 record.title = rd.title 235 record.nowTime = rd.nowTime 236 record.buttonImage = rd.buttonImage 237 } 238 239 // cell.bindData(text: object.title, label: object.nowTime, image: object.buttonImage!) 240 }*/ 241 return cell 242 } 243 244 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 245 tableView.deselectRow(at: indexPath, animated: true) 246 } 247 248 249 func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { 250 return true 251 } 252 253 254 func tableView(_ tableView: UITableView,commit editingStyle: UITableViewCell.EditingStyle,forRowAt indexPath: IndexPath) { 255 if editingStyle == .delete{ 256 if let object = todoItems?[indexPath.row] { 257 tableView.reloadData() 258 let realm = try! Realm() 259 try! realm.write{ 260 realm.delete(object) 261 } 262 tableView.deleteRows(at: [indexPath], with: UITableView.RowAnimation.automatic) 263 } 264 } 265 } 266 267 func scrollViewDidScroll(_ scrollView: UIScrollView) { 268 return 269 } 270 271 272 func deleteTodo(Index: Int){ 273 let realm = try! Realm() 274 try! realm.write{ 275 realm.delete(todoItems[Index]) 276 } 277 } 278} 279

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

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

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

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

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

guest

回答1

0

自己解決

dateのモデル定義を文字列にして以下のコードでできました!
根本的な解決ではないかもしれませんが、やりたいことはできたので解決とします。```swift
let tmpDate = Calendar(identifier: .gregorian)
let year = tmpDate.component(.year, from: selectedDate)
let month = tmpDate.component(.month, from: selectedDate)
let day = tmpDate.component(.day, from: selectedDate)
let m = String(format: "%02d", month)
let d = String(format: "%02d", day)
let da = "(year)/(m)/(d)"
//スケジュール取得
todoItems = realm.objects(Record.self).filter("date = '(da)'")

投稿2020/02/13 12:31

tom0708

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問