日期将无法正确显示

时间:2018-02-11 02:12:21

标签: ios swift nsdateformatter

我正在尝试制作日期显示,例如“2018年3月2日晚上10点”。我试过“MM-dd-yyyy”和“yyyy-MM-dd hh:mm:ss”,但看起来这些组合都没有得到我想要的日期。选择日期的函数是sendRequest,它正在使用的UIDatePicker。 enter image description here

 func getCurrentDateTimeFromTimeStamp(timestamp:String)->String{
    let date = NSDate(timeIntervalSince1970:Double(timestamp)!)
    let formatter = DateFormatter()
    formatter.dateFormat = "MMMM d, yyyy HH:mm a"
    return formatter.string(from: date as Date)
}

 let dateCellVar = request.timestamp
    let dateString = dateCellVar.description
    dateCell.textLabel?.text = self.getCurrentDateTimeFromTimeStamp(timestamp: dateString)

class Request {
var timestamp:Double

init(dict: [String: Any]) {
    self.timestamp = dict["timestamp"] as? Double ?? 0.0
}

 func sendRequest(){
    print("HEY:")
    guard let user = currentUser else { return }
    print("USER: \(user.firstLastName)")

    if let da = dateField.text{
        print(da)
    }
    print(timeField.text)

    print(locationField.text)
    print(messageTextView.text)

    guard let pickedDate = pickedDate else { return print("pickedDate") }
    guard let date = dateField.text else { return print("pickedDate") }
    guard let time = timeField.text else { return print("time") }
    guard let location = locationField.text else { return print("location")}

    let db = Database.database().reference()
    let ref = db.child("requests").childByAutoId()
    let data = [
        "sender": user.uid,
        "recipient": recipientUser.uid,
        "name": user.firstLastName,
        "photoURL": user.photoURL,
        "location": location,
        "date": date,
        "time": time,
        "pickedTimestamp": pickedDate.timeIntervalSince1970,
        "message": messageTextView.text ?? "",
        "status": "PENDING",
        "timestamp": [".sv": "timestamp"]
        ] as [String:Any]

    print("HEYO")
    ref.setValue(data) { error, ref in
        if error == nil {
            print("Success")
        } else {
            print("Failed")
        }
    }


}

2 个答案:

答案 0 :(得分:4)

根据您的结果,您的时间戳以毫秒为单位,而不是秒。你需要除以1000。

你也有错误的dateFormat。您希望在一小时内使用hh,而不是HHH是24小时制,对于使用a进行AM / PM时没有任何意义。您还应该避免使用dateFormat。使用dateStyletimeStyle。让格式化程序为您提供最适合用户区域设置的日期。

您的代码也进行了大量不必要的转换。您将时间戳记作为Double并将其存储为Double。但是,然后你的函数将你希望你的秒数的时间戳转换为String然后转换回Double。避免不必要地使用String

答案 1 :(得分:0)

要获得序数日,您可以使用data-iddata-id中提取Calendar

day

从那里开始,您只需使用Date对日期格式进行编码,然后放入上面提取的序数日期,如下所示:

let date = Date()

let calendar = Calendar.current
let dateComponents = calendar.component(.day, from: date)
let numberFormatter = NumberFormatter()

numberFormatter.numberStyle = .ordinal
let day = numberFormatter.string(from: dateComponents as NSNumber)

此外,您一年的问题可能源于您喂食它的数量。 timeIntervalSince1970期待整整几秒钟,所以请确保你整整一秒钟都在喂它。

  

init(timeIntervalSince1970:TimeInterval)返回日期对象   相对于1970年1月1日00:00:00 UTC由给定的初始化   秒数。

改编自this answer。此外,您可能会发现this site有助于格式化日期。