4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SwiftAdvent Calendar 2019

Day 19

【Swift4】DateManager【iOS】

Last updated at Posted at 2018-01-09

日付操作支援クラスです。まだまだ見た目がイケてなかったりしますがとりあえずリリース。

github => DateManager

Requirements

  • iOS 9 and later
  • Swift 4.0 and Later

備考

  • 今のところポップアップカレンダーに関してはポートレイトのみサポートです。
  • リファクタリング前であり強制アンラップ箇所がいくつかあります。

インストール

DateManager.swiftの1ファイルをプロジェクトに追加するだけです。
githubからどうぞ。

使い方

  • インスタンスの際、日付情報を指定します。日付情報はDate型かString型(RFC3339) で指定します。
let dm = DateManager(base:Date())
let dm2 = DateManager(base:"2018-04-10T01:00:00Z")
  • 年、月、日、曜日、時間、分、秒、個別の取得が可能です。
print(dm.baseDate.toStringWithCurrentLocale())
        
print(dm.getYear()!)
print(dm.getMonth()!)
print(dm.getDay()!)
print(dm.getWeek()!)
print(dm.getWeekJ()!)
print(dm.getHour()!)
print(dm.getMinute()!)
print(dm.getSecond()!)

/* output
2018-01-09 18:23:51
2018
1
9
Tuesday
火曜日
18
23
51
*/
  • 日付の操作ができます。名前が"add"で始まるメソッドは算出後の日付により生成されたDateManagerのインスタンスを返しますので、メソッドチェーンを利用できます。
let dm = DateManager(base:Date())

let date1 = dm.addMonth(1).toString()
let date2 = dm.addYear(-2).addMonth(3).toString()
let date3 = dm.addDay(2).addYear(10).addWeek(3).toString(style:["dateStyle":.full])
  • 基準日(baseDateプロパティ)が属す月のカレンダーデータを作成できます。
let calComps = dm.createCalendarComponents()
print(dm.baseDate)
print(calComps.targetMonth)
print(calComps.date)
print(calComps.weekJ)

/* output
2018-01-09 08:54:26 +0000
2018.01
["2018-01-01", "2018-01-02", "2018-01-03", "2018-01-04", "2018-01-05", "2018-01-06", "2018-01-07", "2018-01-08", "2018-01-09", "2018-01-10", "2018-01-11", "2018-01-12", "2018-01-13", "2018-01-14", "2018-01-15", "2018-01-16", "2018-01-17", "2018-01-18", "2018-01-19", "2018-01-20", "2018-01-21", "2018-01-22", "2018-01-23", "2018-01-24", "2018-01-25", "2018-01-26", "2018-01-27", "2018-01-28", "2018-01-29", "2018-01-30", "2018-01-31", "2018-02-01", "2018-02-02", "2018-02-03", "2018-02-04"]
["月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日", "日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日", "日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日", "日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日", "日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日", "日曜日"]
*/

カレンダーデータ(CalendarComponents)のデータ構造

var date:[String]           // 日付
var full:[String]           // 日付情報(フルフォーマット)
var fullJ:[String]          // 日付情報(ja/フルフォーマット)
var day:[String]            // 日
var week:[String]           // 曜日(英語)
var weekJ:[String]          // 曜日(日本語)
var month:[String]          // 月(英語)
var monthJ:[String]         // 月(日本語)
var year:[String]           // 年
var numberOfWeek:[Int]      // 第N週
var targetMonth:String      // カレンダー対象月
var targetYear:Int          // カレンダー対象年
var gengou:String           // カレンター対象元号
var numberOfWeeks:Int       // 週数
var numberOfCells:Int       // マス数
var previousMonth:String    // 前月
var nextMonth:String        // 翌月
  • ポップアップカレンダー呼び出し
// デリゲートを設定
dm.popupCalendarDelegate = self

// ポップアップカレンダーを表示
dm.popupCalendar(completion: { () in
    // 表示後に何か処理をする場合ここに書く
})

カレンダーセル選択時の処理を定義

// PopupCalendarDelegateを批准し、calendarSelected()を定義
extension YourViewController:PopupCalendarDelegate {
    func calendarSelected(_ data: PopupCalendarCell,calendar:UICollectionView) {
        
        // your operation
        
        // calendar close. ** don't call removeFromSuperview! **
        //calendar.close()
    }
}

Sample

dm2.gif

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?