web-dev-qa-db-ja.com

ifステートメントを使用できるように日付をTimeIntervalに変換する方法

これは私のコードです:

if let date = messages?.date{
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "h:mm a"

            //let elapseTimeInSeconds = NSDate.timeIntervalSince(date)
            let elapseTimeInSeconds = Date(timeIntervalSinceNow: (date as? Date))

            let secondsInDays: TimeInterval = 60 * 60 * 24

            if elapseTimeInSeconds > secondsInDays {

                dateFormatter.dateFormat = "EEE"
            } else if elapseTimeInSeconds > 7 * secondsInDays {

                dateFormatter.dateFormat = "MM/dd/yy"
            }

            timeLabel.text = dateFormatter.string(from: date as Date)
        }

これはエラーです:

タイプ「日付」の値を変換できませんか?期待される引数タイプ 'TimeInterval'(別名 'Double')に

エラーはこの行にあります:

let elapseTimeInSeconds = Date(timeIntervalSinceNow: (date as? Date))

私は知っていることを試しましたが、何もうまくいきませんでした。助けてください。

9
CRey

timeIntervalSinceNow のプロパティDateから直接アクセスできます。また、SwiftでNSDateを使用する必要はありません。 = 3 DateDateFormatterおよびdate(from:)メソッドを直接使用__Date?_ではなく_NSDate?_のインスタンスを返す.

_let timeInterval = date.timeIntervalSinceNow
_

また、メソッドtimeIntervalSince(_:)を使用して、2つの日付の間でTimeIntervalを取得できます。

_let timeInterval = date1.timeIntervalSince(date2)
_
17
Nirav D

Swift 3.

このコードを書く必要があります:

let elapseTimeInSeconds = Date().timeIntervalSince(date as Date) 

Strong!!! Date() or NSDate().timeIntervalSince(date as Date)
4
Anton Russia