将mysql日期转换为NSDate然后检查之间的天数

时间:2015-05-21 09:44:23

标签: swift cocoa date nsdate

我在Swift中遇到NSDate问题。

  1. I JSON从我的数据库中以Y-m-d格式化的日期。它存储为名为survey_date
  2. 的字符串
  3. 然后我使用dateFormatter
  4. 将字符串转换为NSDate
  5. 我想计算出survey_date和NOW之间的天数
  6. 我的脚本中的错误是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),但看起来这是我唯一的选择(我知道它是凌乱的,我会被告知!)

2 个答案:

答案 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