如何将日期范围转换为swift 3中的字符串?

问题描述:

如何将日期转换为字符串格式?如何将日期范围转换为swift 3中的字符串?

我得到两个日期之间的日期(从结束日期)。我就是用这个下面方法

class Dates { 
static func printDatesBetweenInterval(_ startDate: Date, _ endDate: Date) { 
    var startDate = startDate 
    let calendar = Calendar.current 

    let fmt = DateFormatter() 
    fmt.dateFormat = "yyyy-MM-dd" 

    while startDate <= endDate { 
     print(fmt.string(from: startDate)) 
     startDate = calendar.date(byAdding: .day, value: 1, to: startDate)! 
    } 
} 

static func dateFromString(_ dateString: String) -> Date { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd" 

    return dateFormatter.date(from: dateString)! 
}} 

和打印日期这里

Dates.printDatesBetweenInterval(Dates.dateFromString("2017-10-02"), Dates.dateFromString("2017-10-9")) 

结果:

2017-10-02 2017-10-03 2017-10-04 2017-10-05 2017-10-06 2017-10-07 2017-10-08 2017-10-09 

现在,我想通过这个日期为字符串格式日历(我使用FSCalendar库到应用程序)。我想要这种格式 例如:

["2017-10-02", "2017-10-03", "2017-10-04", "2017-10-05", "2017-10-06", "2017-10-07", "2017-10-08", "2017-10-09"] 

任何人都可以指导我。由于

返回日期字符串数组从你的功能,如:

class Dates { 
static func printDatesBetweenInterval(_ startDate: Date, _ endDate: Date) -> [String] { 
    var startDate = startDate 
    let calendar = Calendar.current 

    let fmt = DateFormatter() 
    fmt.dateFormat = "yyyy-MM-dd" 

    var arrayDateString = [String]() 

    while startDate <= endDate { 
     let stringDate = fmt.string(from: startDate) 
     print("stringDate - \(stringDate)") 
     arrayDateString.append(stringDate) 
     startDate = calendar.date(byAdding: .day, value: 1, to: startDate)! 
    } 

    return arrayDateString 
} 

static func dateFromString(_ dateString: String) -> Date { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd" 

    return dateFormatter.date(from: dateString)! 
}} 

现在,打印字符串数组

let dateStringArray = Dates.printDatesBetweenInterval(Dates.dateFromString("2017-10-02"), Dates.dateFromString("2017-10-9")) 

print("dateStringArray - \(dateStringArray)") 

编辑:现在
,如你所说,你已经数据格式如下:

let dataArray = [ 
{ "hlddate": "07-Aug", "frmdt": "07-Aug-2017", "todt": "07-Aug-2017" }, 
{ "hlddate": "15-Aug", "frmdt": "15-Aug-2017", "todt": "15-Aug-2017" }, 
{ "hlddate": "10-Oct", "frmdt": "10-Oct-2017","todt": "31-Oct-2017" } 
] 

尝试用以下溶液(复制 - 粘贴,dataAray和类结构和见结果):

class Dates { 

static func dateFromString(dateString: String, webResponseDateFormat: String = "yyyy-MM-dd") -> Date? { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = webResponseDateFormat 
    return dateFormatter.date(from: dateString) 
}} 

static func printDatesBetweenInterval(startDate: Date, endDate: Date, requiredDateFormat: String = "yyyy-MM-dd") -> [String] { 
    var startDate = startDate 
    let calendar = Calendar.current 

    let fmt = DateFormatter() 
    fmt.dateFormat = requiredDateFormat 

    var arrayDateString = [String]() 

    while startDate <= endDate { 
     let stringDate = fmt.string(from: startDate) 
     print("stringDate - \(stringDate)") 
     arrayDateString.append(stringDate) 
     startDate = calendar.date(byAdding: .day, value: 1, to: startDate)! 
    } 

    return arrayDateString 
} 


if let stringDateArray = dataArray as? [[String : String]] { 

    for arrayElement in stringDateArray { 

     if let startDateString = arrayElement["frmdt"], let startDate = Dates.dateFromString(dateString: startDateString, webResponseDateFormat: "dd-MMM-yyyy"), let endDateString = arrayElement["todt"], let endDate = Dates.dateFromString(dateString: endDateString, webResponseDateFormat: "dd-MMM-yyyy") { 

      let dateStringArray = Dates.printDatesBetweenInterval(startDate: startDate, endDate: endDate,) 

      print("\n\n**\ndateStringArray - \(dateStringArray)") 
     } 
    } 

} 

最后更新

// Actual data structure 
let dataArray = ["07-8-2017","08-08-2017","10-09-2017","20-10-2017",21-10-2017","23-10-2017", etc..] 

使用上述方法并改变在服务器响应部和获取数据结果。

if let Streams = jsonDict["data"] as! [AnyObject]? { 

    for arrayElement in Streams { 

     if let startDateString = arrayElement["frmdt"] { 
      self.somedateFromString = self.convertStringToDate(string: startDateString as! String) 

      if let endDateString = arrayElement["todt"] { 
       self.somedateEndString = self.convertStringToDate(string: endDateString as! String) 
      } 

    self.presentdays = Dates.printDatesBetweenInterval(Dates.dateFromString(self.somedateFromString), Dates.dateFromString(self.somedateEndString)) 

     self.totalHolidays.append(contentsOf: self.presentdays) 

    } 
    } 
} 
+0

谢谢!这工作正常,但'''data':[{“hlddate”:“07-Aug”,“frmdt”:“2017年8月7日”,“todt”:“2017年8月7日”},{ “hlddate”:“15-Aug”,“frmdt”:“2017年8月15日”,“todt”:“2017年8月15日”},{“hlddate”:“10月10日”,“frmdt”: “10-Oct-2017”,“todt”:“2017年10月31日”}]''这是我从服务器获得的回应。以及如何将单个数组传递给日历并请引导我。 – IosDeveloper

+0

@IosDeveloper尝试更新后的答案 – Krunal

+0

'let dataArray =“{”hlddate“:”07-Aug“,”frmdt“:”2017年8月7日“,”todt“:”2017年8月7日“}, {“hlddate”:“15-Aug”,“frmdt”:“15-Aug-2017”,“todt”:“2017年8月15日”}, {“hlddate”:“10-10月” frmdt“:”10-Oct-2017“,”todt“:”2017年10月31日“} ]'。不,我需要像这种格式一样采用一组所有日期。例如: - 'let dataArray = [“07-08-2017”,“15-08-2017”,“10-10-2017”,“11-10-2017”,“12-10-2017”,“13 -10-2017“,--------,”30-10-2017“,”31-10-2017“] – IosDeveloper

static func getDatesStringBetweenInterval(_ startDate: Date, _ endDate: Date)-> String { 
     var retval = "[" 

     var startDate = startDate 
     let calendar = Calendar.current 

     let fmt = DateFormatter() 
     fmt.dateFormat = "yyyy-MM-dd" 

     while startDate <= endDate { 
      if startDate < endDate { 
       retval.append("\"\(fmt.string(from: startDate))\", ") 
      } else { 
       retval.append("\"\(fmt.string(from: startDate))\"") 
      } 
      startDate = calendar.date(byAdding: .day, value: 1, to: startDate)! 
     } 
     retval.append("]") 

     return retval 
    } 

用法:

let aDate = Dates.dateFromString("2017-01-01") 
let bDate = Dates.dateFromString("2017-01-05") 
let datesString = Dates.getDatesStringBetweenInterval(aDate, bDate) 
print(datesString) 
+1

OP需要一个日期字符串数组 –

+0

“现在,我想通过这个日期到字符串格式” Dmitry

+1

'[“2017- 10-02“,”2017-10-03“,”2017-10-04“,”2017-10-05“,”2017-10-06“,”2017-10-07“,”2017-10- 08“,”2017-10-09“]'看起来不像一个字符串 –