Ios 在数组中查找最大和最小日期
我有一个类似的数组Ios 在数组中查找最大和最小日期,ios,swift,nsdate,Ios,Swift,Nsdate,我有一个类似的数组 "11 Aug 2015", "24 Sep 2014", "25 Aug 2014", "07 Aug 2014", "07 Aug 2014" 我想在里面找到最长和最短的日期 modifieddateArray.valueForKeyPath("@max.self") modifieddateArray.valu
"11 Aug 2015",
"24 Sep 2014",
"25 Aug 2014",
"07 Aug 2014",
"07 Aug 2014"
我想在里面找到最长和最短的日期
modifieddateArray.valueForKeyPath("@max.self")
modifieddateArray.valueForKeyPath("@min.self")
我使用了上面的函数,它给出了
截至2014年8月25日的最大值
截至2014年8月7日
但最长日期为2015年8月11日,最短日期为2014年9月7日
它考虑的第一个值大于25,至少为07。我怎样才能解决这个问题
提前感谢这肯定不是最有效的方法,但非常简单,编写代码也很有趣:
var dates = ["11 Aug 2015",
"24 Sep 2014",
"25 Aug 2014",
"07 Aug 2014",
"07 Aug 2014"]
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
var monthsNum = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]
func convertToInt (date : String) -> Int {
var arr = split(date) {$0 == " "}
var c = 1
for month in months {
if (arr[1] == month) {
if (c < 10) {
return (arr[2]+"0"+String(c)+arr[0]).toInt()!
}
else {
return (arr[2]+String(c)+arr[0]).toInt()!
}
}
c++
}
return 0
}
func convertToString (date : Int) -> String {
var dateString = String(date) as NSString
var year = dateString.substringWithRange(NSRange(location: 0, length: 4))
var month = dateString.substringWithRange(NSRange(location: 4, length: 2))
var day = dateString.substringWithRange(NSRange(location: 6, length: 2))
var c = 0
for curMonth in monthsNum {
if (curMonth == month) {
return year+" "+months[c]+" "+day
}
c++
}
return ""
}
var newDates = [Int]()
for date in dates {
newDates.append(convertToInt(date))
}
println(convertToString(maxElement(newDates)))
println(convertToString(minElement(newDates)))
var日期=[“2015年8月11日”,
“2014年9月24日”,
“2014年8月25日”,
“2014年8月7日”,
“2014年8月7日”]
风险值月份=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”]
变量monthsNum=[“01”、“02”、“03”、“04”、“05”、“06”、“07”、“08”、“09”、“10”、“11”、“12”]
func转换项(日期:字符串)->Int{
var arr=split(日期){$0==“”}
变量c=1
月复一月{
如果(arr[1]==月){
如果(c<10){
返回(arr[2]+“0”+字符串(c)+arr[0]).toInt()!
}
否则{
返回(arr[2]+字符串(c)+arr[0]).toInt()!
}
}
C++
}
返回0
}
func convertToString(日期:Int)->字符串{
var dateString=字符串(日期)作为NSString
var year=dateString.substringWithRange(NSRange(位置:0,长度:4))
var month=dateString.substringWithRange(NSRange(位置:4,长度:2))
var day=dateString.substringWithRange(NSRange(位置:6,长度:2))
var c=0
在monthsNum的curMonth{
如果(curMonth==月){
返回年份+“”+月份[c]+“”+天
}
C++
}
返回“”
}
var newDates=[Int]()
日期中的日期{
newDates.append(转换(日期))
}
println(convertToString(maxElement(newDates)))
println(convertToString(minElement(newDates)))
通过使用Swift强大的内置功能:
//运算符重载方法
func>(左:NSDate,右:NSDate)->Bool{
返回lhs.compare(rhs)=NSComparisonResult.OrderedAscending
}
func Bool{
返回lhs.compare(rhs)=NSComparisonResult.OrderedDescending
}
//迄今为止的字符串
func dateFromString(dateStr:String)->NSDate{
让dateFormatter=NSDateFormatter()
dateFormatter.dateFormat=“dd LLL yyyy”
//Eric D的建议,强制区域设置为en_en
dateFormatter.locale=NSLocale(localeIdentifier:“en_en”)
返回dateFormatter.dateFromString(dateStr)!
}
//日期字符串
func stringFromDate(日期:NSDate)->字符串{
让dateFormatter=NSDateFormatter()
dateFormatter.dateFormat=“dd LLL yyyy”
//Eric D的建议,强制区域设置为en_en
dateFormatter.locale=NSLocale(localeIdentifier:“en_en”)
return dateFormatter.stringFromDate(日期)
}
//字符串日期数组
风险值日期=[“2015年8月11日”,
“2014年9月24日”,
“2014年8月25日”,
“2014年8月7日”,
“2014年8月7日”]
//将字符串映射到NSDate
var dateInstances=dates.map({dateFromString($0)})
//找到Max
让maxVal=stringFromDate(dateInstances.reduce(dateInstances[0]){$0>$1?$1:$0})
//找敏
让minVal=stringFromDate(dateInstances.reduce(dateInstances[0]){$0<$1?$1:$0})
游乐场输出:
我是这样做的
var itemsArray ["24 Aug 2014","29 Jul 1990","06 Jan 2050","18 OCT 2014","24 Aug 2019"]
for item in modifieddateArray {
var maxDate2 : NSDate = dateFormatter.dateFromString(item as! String)! //as! NSDate
var value : Int = Int(NSDate().timeIntervalSinceDate(maxDate2))
itemsArray.addObject(value)
}
//println(itemsArray)
var minDateNum: AnyObject! = itemsArray.valueForKeyPath("@max.self")
var maxDateNum: AnyObject! = itemsArray.valueForKeyPath("@min.self")
//println("\(maxDate, minDate)")
var indexMax = itemsArray.indexOfObject(maxDateNum!)
var indexMIn = itemsArray.indexOfObject(minDateNum!)
//println("\(indexMax, indexMIn)")
maxDate = modifieddateArray.objectAtIndex(indexMax)
minDate = modifieddateArray.objectAtIndex(indexMIn)
//println("\(maxDate, minDate)")
计算时间间隔并找到最大值作为最小日期,最小值作为最大日期您需要将此字符串格式的日期转换为
NSDate
对象,然后在其上运行最大/最小日期。检查此链接:感谢dude的主意。在“字符串到日期”中,它将与英语以外的其他语言环境崩溃(例如,因为'Aug'仅在英语中有效)。为了防止出现这种情况,请根据字符串1强制区域设置。在这种情况下:dateFormatter.locale=NSLocale(localeidentier:“en_en”)
@EricD。谢谢你的建议,这是一个非常好的观点。我立即添加了它:)这不仅是“不是最有效的方法”但在处理语言环境
和利用Swift强大的功能时容易失败。硬编码日期值和名称是个坏主意。
var itemsArray ["24 Aug 2014","29 Jul 1990","06 Jan 2050","18 OCT 2014","24 Aug 2019"]
for item in modifieddateArray {
var maxDate2 : NSDate = dateFormatter.dateFromString(item as! String)! //as! NSDate
var value : Int = Int(NSDate().timeIntervalSinceDate(maxDate2))
itemsArray.addObject(value)
}
//println(itemsArray)
var minDateNum: AnyObject! = itemsArray.valueForKeyPath("@max.self")
var maxDateNum: AnyObject! = itemsArray.valueForKeyPath("@min.self")
//println("\(maxDate, minDate)")
var indexMax = itemsArray.indexOfObject(maxDateNum!)
var indexMIn = itemsArray.indexOfObject(minDateNum!)
//println("\(indexMax, indexMIn)")
maxDate = modifieddateArray.objectAtIndex(indexMax)
minDate = modifieddateArray.objectAtIndex(indexMIn)
//println("\(maxDate, minDate)")