【问题标题】:How to get start and end of the week in swift? [duplicate]如何快速开始和结束一周? [复制]
【发布时间】:2018-03-06 06:34:56
【问题描述】:

如何快速获得一周的开始和结束? 这是我的代码

extension Date {
    var startOfWeek: Date? {
        let gregorian = Calendar(identifier: .gregorian)
        guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
        return gregorian.date(byAdding: .day, value: 1, to: sunday)
    }

    var endOfWeek: Date? {
        let gregorian = Calendar(identifier: .gregorian)
        guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
        return gregorian.date(byAdding: .day, value: 7, to: sunday)
    }
}

我是这样打电话的

let startWeek = Date().startOfWeek
let endWeek = Date().endOfWeek
print(startWeek!)
print(endWeek!)
var dateFormat1 = DateFormatter()
dateFormat1.dateFormat = "dd-MM-yy"
let startWeek2 = dateFormat1.string(from: startWeek!)
var dateFormat12 = DateFormatter()
dateFormat12.dateFormat = "dd-MM-yy"
let endWeek2 = dateFormat12.string(from: endWeek!)
print(startWeek2)
print(endWeek2)

和输出

2017-09-24 18:30:00 +0000
2017-09-30 18:30:00 +0000
25-09-17
01-10-17

【问题讨论】:

  • 怎么了?请包括对预期行为和实际行为的描述,不要只显示您当前的输出......
  • 在我的输出中看到,在添加日期格式化程序日期从 24-09-2017 到 25-09-2017 增加之后

标签: swift date time


【解决方案1】:

您的代码运行良好。如果您要在 Playground 中运行代码,您可以看到实际的 Date 对象,而不是字符串表示形式。即使您没有指定DateFormatter,在幕后,当执行print(Date()) 时,Swift 使用DateFormatter 来打印Date 对象,因此该值将是相对时间而不是绝对时间点由Date 对象提供。

在 Playground 中,您可以看到实际的 startOfWeek"Sep 25, 2017 at 12:00 AM",而 endOfWeek"Oct 1, 2017 at 12:00 AM",这是当前一周的正确值。

不要使用print(Date()) 来检查Date 对象的正确性,因为如您所见,由于使用了底层DateFormatters,它会产生意想不到的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2016-02-03
    • 2020-11-17
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多