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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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回答

1829閲覧

カレンダーで表示する為の日付を取得したい

Ka_ya_

総合スコア31

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グッド

0クリップ

投稿2020/05/28 13:01

編集2020/05/29 02:10

質問失礼します。

コレクションビューを使用してカレンダーを作成する為に、
カレンダーに表示させる一ヶ月分の日付を配列として取得したいです。

下記のURLを参考にコードを試してみたのですが、
月の初日を取得するメソッドfirstDateOfMonth()で日付を1日に設定した後、
再びcalendarのdateに戻そうとすると日付が1日戻ってprintされてしまいます。

何故日付が戻ってしまうのかという事と、
どうして日付を設定後に再度calendarクラスとして
let firstDateMonth = calendar.date(from: components)
とコードを記載しなければいけないのかが分かりませんでした。

どなたかご教授いただけますと嬉しいです。
よろしくお願い致します。

https://qiita.com/sakuran/items/3c2c9f22cbcbf4aff731

Swift

1class DateManager { 2 3 //表示する月の日付けを格納する配列 4 var currentMonthOfDates = [Date]() 5 //現在の日付 6 var selectedDate = Date() 7 //セルの列数(一週間の日付) 8 let daysPerWeek: Int = 7 9 //セルの合計数 10 var numberOfItems: Int! 11 //カレンダーの生成 12 let calendar = Calendar.current 13 14 //その月に必要なセルの数を算出するメソッド 15 func daysAcquisition() -> Int { 16 //その月から週の情報を取得している?? 17 let rangeOfWeeks = calendar.range(of: .weekOfMonth, in: .month, for: firstDateOfMonth()) 18 //月が持つ週の数を取得する 19 let numberOfWeeks = rangeOfWeeks?.count 20 //週の数×列の数で必要なセルの数を算出する 21 numberOfItems = numberOfWeeks! * daysPerWeek 22 //セルの合計数 23 return numberOfItems 24 } 25 26 //その月の初日を取得する 27 func firstDateOfMonth() -> Date { 28 //現在の日付を生成 29 var components = calendar.dateComponents([.year, .month, .day],from: selectedDate) 30 //日付を一日に設定する 31 components.day = 1 32 //year: 2020 month: 5 day: 1 isLeapMonth: false とプリントされている 33 print(components) 34 //一日に設定した日付をカレンダーのデータに戻す 35 let firstDateMonth = calendar.date(from: components) 36 //Optional(2020-04-30 15:00:00 +0000)と日付がズレてプリントされる 37 print(firstDateMonth as Any) 38 39 return firstDateMonth! 40 } 41 42 //表示する日にちの取得 43 func dateForCellAtIndexPath(numberOfItems: Int) { 44 // 「月の初日が週の何日目か」で曜日を計算する 45 let ordinalityOfFirstDay = calendar.ordinality(of: .day, in: .weekOfMonth, for: firstDateOfMonth()) 46 //曜日から1を引けばセルのindexPathとの差分が計算できる 47 let sabun = (ordinalityOfFirstDay! - 1) 48 //月の初日から差分の日数を引いた日付けからカレンダーが開始するので、indexPathの数だけ繰り返して必要な日付のデータを配列に保存する 49 for day in 0 ... numberOfItems { 50 let currentday = calendar.date(byAdding: .day, value: -sabun + day, to: firstDateOfMonth())! 51 currentMonthOfDates.append(currentday) 52 } 53 print(currentMonthOfDates) 54 } 55}

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

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

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

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

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

guest

回答1

0

自己解決

Date型にはタイムゾーンがない為、printしても適応されない様です。
フォーマットしてprintすると、正常に日付が取得出来ている事を確認出来ました。

投稿2020/05/29 07:52

Ka_ya_

総合スコア31

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問