我正在尝试制作日期显示,例如“2018年3月2日晚上10点”。我试过“MM-dd-yyyy”和“yyyy-MM-dd hh:mm:ss”,但看起来这些组合都没有得到我想要的日期。选择日期的函数是sendRequest,它正在使用的UIDatePicker。
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")
}
}
}
答案 0 :(得分:4)
根据您的结果,您的时间戳以毫秒为单位,而不是秒。你需要除以1000。
你也有错误的dateFormat
。您希望在一小时内使用hh
,而不是HH
。 H
是24小时制,对于使用a
进行AM / PM时没有任何意义。您还应该避免使用dateFormat
。使用dateStyle
和timeStyle
。让格式化程序为您提供最适合用户区域设置的日期。
您的代码也进行了大量不必要的转换。您将时间戳记作为Double
并将其存储为Double
。但是,然后你的函数将你希望你的秒数的时间戳转换为String
然后转换回Double
。避免不必要地使用String
。
答案 1 :(得分:0)
要获得序数日,您可以使用data-id
从data-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有助于格式化日期。