将 mysql 日期转换为 NSDate 然后检查之间有多少天
Convert a mysql date to NSDate then check how many days between
我在 Swift 中遇到 NSDate 问题。
- 我 JSON 我的数据库中 Y-m-d 格式的日期。这被存储为一个名为 survey_date
的字符串
- 然后我使用 dateFormatter
将字符串转换为 NSDate
- 我想计算 survey_date 和现在
之间的天数
我的脚本中的错误是 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),但看起来这是我唯一的选择(我知道这很混乱,我会被告知!)
您在
中遇到编译器错误
let endDate:NSDate = dateFormatter2.dateFromString(end)!
因为 dateFromString()
是用 date 而不是 string 调用的,
这毫无意义。
你的计算有点复杂,可以缩短为
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()
with
第二个日期格式化程序,例如
let dateFormatter2 = NSDateFormatter()
dateFormatter2.dateFormat = "d MM, Y"
let formattedStartDate = dateFormatter2.stringFromDate(startDate)
println(formattedStartDate)
这里有一些您可能会觉得方便的东西。我正在开发一个应用程序,该应用程序会进行大量日期计算,因此需要多次调用 NSCalendar
' s 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)
}
这让您可以通过简单的减法找到任意两个 dates/times 之间的差异。这是一个简单的例子:
// 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
我在 Swift 中遇到 NSDate 问题。
- 我 JSON 我的数据库中 Y-m-d 格式的日期。这被存储为一个名为 survey_date 的字符串
- 然后我使用 dateFormatter 将字符串转换为 NSDate
- 我想计算 survey_date 和现在 之间的天数
我的脚本中的错误是 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),但看起来这是我唯一的选择(我知道这很混乱,我会被告知!)
您在
中遇到编译器错误let endDate:NSDate = dateFormatter2.dateFromString(end)!
因为 dateFromString()
是用 date 而不是 string 调用的,
这毫无意义。
你的计算有点复杂,可以缩短为
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()
with
第二个日期格式化程序,例如
let dateFormatter2 = NSDateFormatter()
dateFormatter2.dateFormat = "d MM, Y"
let formattedStartDate = dateFormatter2.stringFromDate(startDate)
println(formattedStartDate)
这里有一些您可能会觉得方便的东西。我正在开发一个应用程序,该应用程序会进行大量日期计算,因此需要多次调用 NSCalendar
' s 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)
}
这让您可以通过简单的减法找到任意两个 dates/times 之间的差异。这是一个简单的例子:
// 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