[解決済み】Swiftで2つのDate(月/日/時間/分/秒)の差を取得する。
2022-04-16 12:33:49
質問
現在の日付を
NSDate()
の日付と、PHPの
time();
の呼び出しは、例えば
NSDate(timeIntervalSinceReferenceDate: 1417147270)
. 2つの日付の時間差を求めるにはどうしたらいいのでしょうか。2つの日付を比較する関数を用意し
if(seconds > 60)
を実行すると、分を返します。
if(minutes > 60)
は時間を返し
if(hours > 24)
は日数などを返します。
どのようにすればいいのでしょうか?
EDIT: 現在受け入れられている回答は、私がやりたかったことをまさに実現しています。2つの日付の間の時間を取得するための簡単な使用方法として、私はそれをお勧めします。
time()
関数が使用します。PHPに特に詳しくない方は、1970年1月1日からの秒単位の時間です。これはPHPのバックエンドにとって有益なものです。NodeJSのようなバックエンドを使用している場合は、以下に示すような他のオプションを検討するとよいでしょう。
解決するには?
Xcode 8.3 - Swift 3.1 またはそれ以降
Calendarを使って、以下のように日付計算を行う拡張機能を作成することができます。
extension Date {
/// Returns the amount of years from another date
func years(from date: Date) -> Int {
return Calendar.current.dateComponents([.year], from: date, to: self).year ?? 0
}
/// Returns the amount of months from another date
func months(from date: Date) -> Int {
return Calendar.current.dateComponents([.month], from: date, to: self).month ?? 0
}
/// Returns the amount of weeks from another date
func weeks(from date: Date) -> Int {
return Calendar.current.dateComponents([.weekOfMonth], from: date, to: self).weekOfMonth ?? 0
}
/// Returns the amount of days from another date
func days(from date: Date) -> Int {
return Calendar.current.dateComponents([.day], from: date, to: self).day ?? 0
}
/// Returns the amount of hours from another date
func hours(from date: Date) -> Int {
return Calendar.current.dateComponents([.hour], from: date, to: self).hour ?? 0
}
/// Returns the amount of minutes from another date
func minutes(from date: Date) -> Int {
return Calendar.current.dateComponents([.minute], from: date, to: self).minute ?? 0
}
/// Returns the amount of seconds from another date
func seconds(from date: Date) -> Int {
return Calendar.current.dateComponents([.second], from: date, to: self).second ?? 0
}
/// Returns the a custom time interval description from another date
func offset(from date: Date) -> String {
if years(from: date) > 0 { return "\(years(from: date))y" }
if months(from: date) > 0 { return "\(months(from: date))M" }
if weeks(from: date) > 0 { return "\(weeks(from: date))w" }
if days(from: date) > 0 { return "\(days(from: date))d" }
if hours(from: date) > 0 { return "\(hours(from: date))h" }
if minutes(from: date) > 0 { return "\(minutes(from: date))m" }
if seconds(from: date) > 0 { return "\(seconds(from: date))s" }
return ""
}
}
Date Components Formatterを使用する
let dateComponentsFormatter = DateComponentsFormatter()
dateComponentsFormatter.allowedUnits = [.second, .minute, .hour, .day, .weekOfMonth, .month, .year]
dateComponentsFormatter.maximumUnitCount = 1
dateComponentsFormatter.unitsStyle = .full
dateComponentsFormatter.string(from: Date(), to: Date(timeIntervalSinceNow: 4000000)) // "1 month"
let date1 = DateComponents(calendar: .current, year: 2014, month: 11, day: 28, hour: 5, minute: 9).date!
let date2 = DateComponents(calendar: .current, year: 2015, month: 8, day: 28, hour: 5, minute: 9).date!
let years = date2.years(from: date1) // 0
let months = date2.months(from: date1) // 9
let weeks = date2.weeks(from: date1) // 39
let days = date2.days(from: date1) // 273
let hours = date2.hours(from: date1) // 6,553
let minutes = date2.minutes(from: date1) // 393,180
let seconds = date2.seconds(from: date1) // 23,590,800
let timeOffset = date2.offset(from: date1) // "9M"
let date3 = DateComponents(calendar: .current, year: 2014, month: 11, day: 28, hour: 5, minute: 9).date!
let date4 = DateComponents(calendar: .current, year: 2015, month: 11, day: 28, hour: 5, minute: 9).date!
let timeOffset2 = date4.offset(from: date3) // "1y"
let date5 = DateComponents(calendar: .current, year: 2017, month: 4, day: 28).date!
let now = Date()
let timeOffset3 = now.offset(from: date5) // "1w"
関連
-
[解決済み] Xcode 9の問題を修正しました。"iPhoneはビジー状態です。iPhoneのデバッガーサポートを準備中"
-
[解決済み] 指定されたホスト名を持つサーバーが見つからなかった
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] 2つの日付の差(日数)を計算する?
-
[解決済み] 2つの日付の間の日数を計算する方法
-
[解決済み] Moment Jsで2つの日付の時差を取得する
-
[解決済み] Ruby on Railsで、DateTime、Timestamp、Time、Dateの違いは何ですか?
-
[解決済み] Java 8: 2つのLocalDateTimeの複数単位での差分
-
[解決済み】Joda-Timeの2つの日付の間の日数について
-
[解決済み】2つの日付の時差を秒単位で取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"宣言はファイルスコープでのみ有効 "について
-
[解決済み] ペン先を読み込んだが、「表示」コンセントが設定されていない
-
[解決済み] 基本的なUIButtonをプログラムで作成するには?
-
[解決済み] Xcodeのロギング。"Metal API Validation Enabled"
-
[解決済み] Xcodeで "No such module "というエラーが出るが、フレームワークはある
-
[解決済み] UICollectionView: 非Nilのレイアウトパラメータで初期化する必要があります。
-
[解決済み] swift3におけるセレクタ
-
[解決済み] Xcodeで実行ファイルが無効なエンタイトルメントで署名されてしまう
-
[解決済み] Xcode 4のBundle creator OS Type code ?
-
[解決済み] React native - connection has no connection handler エラーの意味?