如何将日期范围转换为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)
}
}
}
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)
OP需要一个日期字符串数组 –
“现在,我想通过这个日期到字符串格式” Dmitry
'[“2017- 10-02“,”2017-10-03“,”2017-10-04“,”2017-10-05“,”2017-10-06“,”2017-10-07“,”2017-10- 08“,”2017-10-09“]'看起来不像一个字符串 –
谢谢!这工作正常,但'''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
@IosDeveloper尝试更新后的答案 – Krunal
'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