【Swift】現在時刻の取り方などの日付操作まとめ

【Swift】現在時刻の取り方などの日付操作まとめ

みなさんどうもふっさんです!

今回はSwift3.0で行う日付操作に関してまとめておこうと思います。

ふっさん自身カレンダーを作っていた時にものすごく困ったので、ある程度わかりやすくまとめていきますね。

 

ちなみにこの日付操作を利用したカレンダーの実装も記事にしているので、ぜひ読んで見てください。
[kanren2 postid=”649″]

日付の取得とDateComponents

まず現在時刻の取得ですが、

これで取得することができます。

 

これに関してはググったらすぐ出てくるので困ることはないですが、日付操作をしたい場合。

この時に、ちょっと理解が難しいDateComponentsが出てきます。

 

DateComponentsについて

まずこのDateComponentsの要素についてですが、必要なものだけ書いておきます。

と言っても、数個削っただけなので、使えるのはこれだけと思ってもらっても大丈夫です!

  • .year
  • .month
  • .day
  • .hour
  • .minute
  • .second
  • .weekday
  • .weekdayOriginal
  • .weekOfMonth
  • .weekOfYear

以上の10個です。

 

上記6個に関しては見てわかると思いますが、以下を表しています。

.year         → 年

.month      → 月

.day          → 日

.hour    → 時

.minute   → 分

.second  → 秒

 

次に.weekday。

これは「日曜日が1、月曜日が2….土曜日が7となっている1〜7で曜日を表す」数字です。

 

ですので、現在3月11日(土)であれば、

.weekday = 7

となるんですね!

 

.weekdayOriginalは「現在の曜日が現在の月における何回目の曜日か」を返してくれる数字です。

 

これはわかりにくいと思いますが、現在この記事を書いているのが2017年3月11日(土)。

とすると、weekdayOriginalは2を返します。

3月でいうと2回目の土曜日だからですね。

もし3月4日であれば1回目の土曜日なので、1を返すということです。

カレンダーを確認しながら読むと理解しやすいかもしれませんね!

 

そして次に.weekOfMonth。

これは「その日がその月で何週目にある日」なのかを返す数字です。

わかりにくいですが、日を返すんではなくてその月の何週目なのかを返します。

例えば現在2017年3月11日なので、3月でいうと第二週目にあたるので、2を返します。

じゃあ3月25日だとすると、第四週目にあたるので4を返します。

その日がある週番号を返すっていう感じですかね!

 

最後に.weekOfYear。

これはさっきと似ていますが、「その日がその年の何週目にある日」なのかを返す数字です。

これも3月11日例を出すと、2017年に入った10週目の週にある日なので、10を返します。

じゃあ全く違う日で2017年7月5日でいうと2017年の27週目にある日なので、27を返すということです。

ちなみに7月5日は彼女との記念glぢあbぎあんgぁな

なんでもないです^ー^

 

ちょっとややこしくてわかりにくいと思いますが、上記のような要素がDateComponentsにはあります!

これだけの値が取得できれば、日付操作はいくらでもできますよね!

 

指定した日付の取得

これはさっきのDateComponentsを使って取得することができます。

 

このようにして日付を取得することができるんですね。すごく簡単!

 

月初・月末を取得するコード

次に月初と月末の取得。

コードから。

 

もう読んできていたらわかると思いますが、説明しておきますね!

  1. まずvar nowDate = NSDate()で現在時刻を取ってきます。
  2. 次に現在時刻の年、月、日を使って、componentsを作ってやります。
  3. そして現在時刻の日を1日に変えてやる。
  4. 最後にcomponentsを使って、日付に直す

このような手順になっています。

 

あと予備知識ですがその月初わかれば、月初が何曜日から始まるのかについても調べることができます。

なぜこうなるかはCalendar.current.ordinalityのドキュメントを読むと理解できる思います。

サクッと説明すると「firstDayのある週(weekOfMonth)から曜日(.day)を取ってくる」というような感じです。

まぁ関数を見たらなんとなくわかりますよね。

あと賢い人は「なんで.dayなの?」って思われるかもしれませんが、試してみましたが.weekdayで大丈夫そうですよ!

 

ここまで理解すれば月末も同じようにすれば取得することができますね!

コード!

月初読んでたら基本的に理解できると思うので、説明は省きますね!

案外やってみると簡単ですよね。

 

[kanren postid=”649,638″]

まとめ

ふっさんはこの記事を書きながら変なことを思い出しました。

何時何分何秒、地球が何回回った時?

小学生の時よく使われていた言葉だけど、プログラム使えば何時何分何秒まできっちり出せるんじゃね…?

小学生の時からプログラミングできたら論破できてたってことなんですよねえ。

やってみたかったですね。笑

 

とかいうどうでもいい話は置いておいて、とにかく日付操作に関してはこの記事だけで事足りると思いますので、ぜひきっちり理解してくださいね!

日付操作に関してはめちゃくちゃ利用するので、覚えておいた方が絶対いいので!

ではでは以上ふっさんでした!

 

iPhoneアプリ開発Tipsカテゴリの最新記事