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

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

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

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

Q&A

解決済

1回答

974閲覧

swift SNS時刻形式

tosi_1211

総合スコア138

Swift

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

0グッド

0クリップ

投稿2016/08/23 15:53

swiftである時間をNSDate()で保存しておいて、取り出して表示する際にその時間を表示させたいです。

形式としては

現在時刻から60秒以内なら、
〜秒前

現在時刻から60分以内なら、
〜分前

現在時刻から24時間以内なら、
〜時間前

現在時刻から365日以内なら、
〜日前

現在時刻から1年以降なら、
〜年〜月〜日

という形式にしたいのですが調べてもなかなかいい記事がありません。
この実装のアドバイスを頂きたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

とりあえず以下をPlaygroundに貼り付けて動きを確認してみてください。
※ 細かい動作確認はしてません。

swift

1let startDate = NSDate() 2let endDate = NSDate(timeIntervalSinceNow: (60 * 60 * 24 * 400)) 3 4// 60 * 60 * 24 * 400 => 1年1月4日 5// 60 * 60 * 24 * 50 => 50日前 6// 60 * 60 => 1時間前 7// 60 => 1分前 8// 59 => 59秒前 9 10 11let cal = NSCalendar.currentCalendar() 12 13let unitFlags1: NSCalendarUnit = [.Year, .Month, .Day, .Hour, .Minute, .Second] 14let unitFlags2: NSCalendarUnit = [.Day] 15let components1 = cal.components(unitFlags1, fromDate: startDate, toDate: endDate, options: NSCalendarOptions()) 16let components2 = cal.components(unitFlags2, fromDate: startDate, toDate: endDate, options: NSCalendarOptions()) 17 18var result = "" 19if components1.year > 0 { 20 result = String(components1.year) + "年" + String(components1.month) + "月" + String(components1.day) + "日" 21} else if components1.month > 0 || components1.day > 0 { 22 result = String(components2.day) + "日前" 23} else if components1.hour > 0 { 24 result = String(components1.hour) + "時間前" 25} else if components1.minute > 0 { 26 result = String(components1.minute) + "分前" 27} else { 28 result = String(components1.second) + "秒前" 29} 30 31result 32//=> 結果出力

投稿2016/08/23 19:54

_Kentarou

総合スコア8490

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

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

tosi_1211

2016/08/24 04:41

こんなにしっかりしたコードをわざわざありがとうございます。 NSCalendarというクラスをつかえば実現できるんですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問