Ios Swift:将开始和结束日期格式化为单个字符串

Ios Swift:将开始和结束日期格式化为单个字符串,ios,swift,nsdateformatter,date-formatting,Ios,Swift,Nsdateformatter,Date Formatting,我有两个字符串格式的日期: let startDate = "2018-06-14" let endDate = "2018-06-17" 我想将它们一起格式化如下: 2018年6月14日至17日 但是,如果开始日期和结束日期位于不同的月份,则其格式应如下所示: 2018年6月29日至7月1日 如果开始和结束日期在不同的年份,则其格式应如下所示: 2018年12月29日至2019年1月1日 有没有一种简单的方法可以使用Swift的原生日期格式化程序来实现这一点 有没有一个流行的豆荚可以帮上忙

我有两个字符串格式的日期:

let startDate = "2018-06-14"
let endDate = "2018-06-17"
我想将它们一起格式化如下:

2018年6月14日至17日

但是,如果开始日期和结束日期位于不同的月份,则其格式应如下所示:

2018年6月29日至7月1日

如果开始和结束日期在不同的年份,则其格式应如下所示:

2018年12月29日至2019年1月1日

有没有一种简单的方法可以使用Swift的原生
日期格式化程序来实现这一点

有没有一个流行的豆荚可以帮上忙

完成此格式设置的最佳实践是什么?

以下是我的答案:

   if let startDate = startDateString.toDate(withFormat: "yyyy-MM-dd"),
        let endDate = endDateString.toDate(withFormat: "yyyy-MM-dd") {
        let formatter = DateIntervalFormatter()
        formatter.dateStyle = .long
        formatter.timeStyle = .none
        dateLabel.text = formatter.string(from: startDate, to: endDate)
    }
这个扩展:

extension String {

    func toDate(withFormat format: String) -> Date? {
        let formatter = DateFormatter()
        formatter.dateFormat = format
        formatter.locale = Locale(identifier: "en_US_POSIX")
        return formatter.date(from: self)
    }

}

为此,我将研究
DateComponents
类,请参阅。使用
DateIntervalFormatter
。但是首先从字符串中创建两个
Date
实例。一个
DateIntervalFormatter
timeStyle=.long
timeStyle=.none
应该可以让你非常接近你想要的。这并没有那么有用,因为
toDate(withFormat:)
不是标准方法。我已添加函数toDate(withFormat:String)