Rasche Konvertierung von Zeit zu Zeit

In Swift5, wir haben RelativeDateTimeFormatter

Vor Swift5:


Ich versuche, zu konvertieren und zu mal vor, was ich tun möchte, ist:

von 1 bis 15 Sekunden wird es sagen, " Nur jetzt "

von 60 Minuten bis 119 Minuten, wird sagen, " vor einer Stunde "

von 24 Stunden bis 47 Stunden wird es sagen, " Gestern "

ab 7 Tage bis 7 Tage und 23 Stunden wird es sagen, " vor einer Woche "

Ich bin mir nicht sicher über meine zu zählen, wenn ich falsch fühlen Sie sich frei, um es zu beheben für mich

Hier ist der code

    extension NSDate {

    struct Date {
        static let timeFormatter: NSDateFormatter = {
            let df = NSDateFormatter()
            df.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
            df.dateFormat = "h:mm a"
            return df
            }()
    }
    var time: String { return Date.timeFormatter.stringFromDate(self) }

    var year:    Int { return NSCalendar.autoupdatingCurrentCalendar().component(.Year,   fromDate: self) }
    var month:   Int { return NSCalendar.autoupdatingCurrentCalendar().component(.Month,  fromDate: self) }
    var day:     Int { return NSCalendar.autoupdatingCurrentCalendar().component(.Day,    fromDate: self) }
    var hour:     Int { return NSCalendar.autoupdatingCurrentCalendar().component(.Hour,    fromDate: self) }
    var minute:     Int { return NSCalendar.autoupdatingCurrentCalendar().component(.Minute,    fromDate: self) }
    var second:     Int { return NSCalendar.autoupdatingCurrentCalendar().component(.Second,    fromDate: self) }


    struct DateComponents {
        static let formatter: NSDateComponentsFormatter = {
            let dcFormatter = NSDateComponentsFormatter()
            dcFormatter.calendar = NSCalendar(identifier: NSCalendarIdentifierISO8601)!
            dcFormatter.unitsStyle = .Full
            dcFormatter.maximumUnitCount = 1
            dcFormatter.zeroFormattingBehavior = .Default
            dcFormatter.allowsFractionalUnits = false
            dcFormatter.allowedUnits = [.Year, .Month, .Weekday, .Day, .Hour, .Minute, .Second]
            return dcFormatter
            }()
    }

    var elapsedTime: String {


        if isecond(NSDate()) {
            return "Just now"

        }

        if ishour(NSDate()) {
           return "an hour ago"

        }
        if isyesterday(NSDate()) {
            return "Yesterday"
        }
        if isweek(NSDate()) {

            return "a week ago"
        }




        return (DateComponents.formatter.stringFromTimeInterval(NSDate().timeIntervalSinceDate(self)) ?? "") + " ago"
    }
    func isyesterday(date: NSDate) -> Bool {
        return  NSCalendar.autoupdatingCurrentCalendar().isDate(self, inSameDayAsDate: date.yesterday)
    }
    var yesterday: NSDate {
        return  NSCalendar.autoupdatingCurrentCalendar().dateWithEra(1, year: year, month: month, day: day-1, hour: 0, minute: 0, second: 0, nanosecond: 0)!
    }



    func isweek(date: NSDate) -> Bool {
        return  NSCalendar.autoupdatingCurrentCalendar().isDate(self, inSameDayAsDate: date.weekago)
    }
    var weekago: NSDate {
        return  NSCalendar.autoupdatingCurrentCalendar().dateWithEra(1, year: year, month: month, day: day-7, hour: 0, minute: 0, second: 0, nanosecond: 0)!
    }

    func isecond(date: NSDate) -> Bool {
        return  NSCalendar.autoupdatingCurrentCalendar().isDate(self, inSameDayAsDate: date.secondsago)
    }
    var secondsago: NSDate {
        return  NSCalendar.autoupdatingCurrentCalendar().dateWithEra(1, year: year, month: month, day: 0, hour: 0, minute: 0, second: second-15, nanosecond: 0)!
    }

    func ishour(date: NSDate) -> Bool {
        return  NSCalendar.autoupdatingCurrentCalendar().isDate(self, inSameDayAsDate: date.hourago)
    }
    var hourago: NSDate {
        return  NSCalendar.autoupdatingCurrentCalendar().dateWithEra(1, year: year, month: month, day: 0, hour: hour-1, minute: minute-1, second: 0, nanosecond: 0)!
    }
}

hier, was ich in meiner app :
Rasche Konvertierung von Zeit zu Zeit

Anführungszeichen, die "vor einer Stunde" , "Nur jetzt", etc nicht angezeigt, nur "Gestern" und ich bin mir nicht sicher, ob es von 7 Tage und 23 Stunden nur!

und hier ist meine erste Frage link : Swift, Wie zu konvertieren Analysieren createdAt Zeit zu Zeit?

Mir bitte helfen, korrigieren Sie den code,
Dank @Leo Dabus für den code.

  • Wer von Ihnen positiv bewertet werden, diese Frage??? "hilf mir fix den code" - in welcher Weise, Sie zeigen nur Codes, ist es nicht funktioniert, abstürzt, compiler-Fehler, Laufzeitfehler, funktioniert nicht wie erwartet?
  • original-Frage und Antwort: stackoverflow.com/questions/34439560/...
  • Sorry, der code funktioniert, es gibt keine crash-oder compiler-Fehler, aber den code nicht zählen, wie ich es erwartet
  • Was ist es dann tun, im Gegensatz zu dem, was Sie erwarten, geben ein paar (!!!) Beispiel input - /output-Szenarien
  • seine irgendwie schwer, mich zum Beispiel, dass, ich glaube es zählen auch, aber nicht mit meinen Zitaten auf Zeit, wie wenn die Zeit ist zwischen 1-16secs nicht zeigen, "Einfach jetzt"
  • Was ist es dann zeigen, zeigen einige Eingabe-und die Ausgabe -, wo ist das problem dabei? Was sind Sie Einsenden, was da raus kommt? Was würden Sie kommen wollen, haben Sie versucht, Debuggen? Hinzugefügt log-Anweisungen?
  • warum haben Sie sich einiges ändern read-only berechneten Eigenschaften wie var isDateInToday: Bool { return NSCalendar.autoupdatingCurrentCalendar().isDateInToday(self) } var isDateInYesterday: Bool { return NSCalendar.autoupdatingCurrentCalendar().isDateInYesterday(self) } ?
  • Sie Bearbeiten sollte Ihre Frage und zeigen nur die elapsedTime Teil der Frage und poste einen link zu der anderen Frage/Antwort
  • Dank Frage bearbeitet, Und ich weiß nicht, was ich verändert habe in den code, weil ich versuche, es zu tun

InformationsquelleAutor Salah | 2015-12-24
Schreibe einen Kommentar