我在Swift中遇到NSDate问题。
我的脚本中的错误是endDate是没有更多上下文的模糊表达。
这是我的剧本:
var survey_date = prefs.valueForKey("SURVEY_DATE") as! String
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
var date = dateFormatter.dateFromString(survey_date) as NSDate!
let outputDate = dateFormatter.stringFromDate(date)
println(outputDate)
let start = outputDate
let end = NSDate()
let dateFormatter2 = NSDateFormatter()
dateFormatter2.dateFormat = "yyyy-MM-dd"
let startDate:NSDate = dateFormatter2.dateFromString(start)!
let endDate:NSDate = dateFormatter2.dateFromString(end)!
let cal = NSCalendar.currentCalendar()
let unit:NSCalendarUnit = .CalendarUnitDay
let components = cal.components(unit, fromDate: startDate, toDate: endDate, options: nil)
println(components)
其次,我还希望能够将日期转换为不同的格式 - 例如d m,Y。这在PHP中非常简单,但我找不到在Swift中执行此操作的方法?我不想通过JSON发送额外的数据(即创建一个$ formatted_date),但看起来这是我唯一的选择(我知道它是凌乱的,我会被告知!)
答案 0 :(得分:1)
中出现编译错误
let endDate:NSDate = dateFormatter2.dateFromString(end)!
因为使用日期而不是字符串调用dateFromString()
,
没有意义。
您的计算有点过于复杂,您可以将其缩短为
let survey_date = "2015-05-01"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
if let startDate = dateFormatter.dateFromString(survey_date) {
let endDate = NSDate()
let cal = NSCalendar.currentCalendar()
let components = cal.components(.CalendarUnitDay, fromDate: startDate, toDate: endDate, options: nil)
let days = components.day
println(days)
} else {
println("invalid input")
}
如果您想将日期转换为其他格式
(正如Leo已经在评论中所说的那样),使用stringFromDate()
第二个日期格式化程序,例如
let dateFormatter2 = NSDateFormatter()
dateFormatter2.dateFormat = "d MM, Y"
let formattedStartDate = dateFormatter2.stringFromDate(startDate)
println(formattedStartDate)
答案 1 :(得分:1)
您可能会发现这些内容很方便。我正在开发一款可以进行大量日期计算的应用,因此会调用NSCalendar
components(_:fromDate:toDate:options:)
进行大量调用。 } 方法。这感觉不像Swift一样,所以我重载了-
运算符来做日期减法:
func -(lhs: NSDate, rhs: NSDate) -> NSDateComponents
{
let components: NSCalendarUnit =
.CalendarUnitSecond |
.CalendarUnitMinute |
.CalendarUnitHour |
.CalendarUnitDay
return NSCalendar.currentCalendar().components(components,
fromDate: rhs,
toDate: lhs,
options: nil)
}
这使您可以通过简单的减法找到任意两个日期/时间之间的差异。这是一个简单的例子:
// MySQL date formatter
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
// Let's create a couple of dates that we know are one day apart
let christmas2015 = dateFormatter.dateFromString("2015-12-25")!
let christmasEve2015 = dateFormatter.dateFromString("2015-12-24")!
let difference = christmas2015 - christmasEve2015
let daysBetween = difference.day // this value is 1