【问题标题】:Swift: Format a a start and end date into a single stringSwift:将开始和结束日期格式化为单个字符串
【发布时间】:2018-06-12 20:24:12
【问题描述】:

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

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 原生的 DateFormatter 的简单方法?

有没有流行的 pod 可以帮助解决这个问题?

完成这种格式化的最佳做法是什么?

【问题讨论】:

  • 我会为此查看DateComponentsclass,请参阅Apple documentation
  • 使用DateIntervalFormatter。但首先从您的字符串中创建两个 Date 实例。
  • DateIntervalFormatterdateStyle = .longtimeStyle = .none 应该让您非常接近您想要的。

标签: ios swift nsdateformatter date-formatting


【解决方案1】:

这是我的答案:

   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)
    }

}

【讨论】:

  • 这并不像它可能的那样有用,因为toDate(withFormat:) 不是标准方法。
  • 我已经添加了函数 toDate(withFormat format: String)
猜你喜欢
  • 1970-01-01
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2017-10-10
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
相关资源
最近更新 更多