我试图计算与当月第一天相对应的Date
(NSDate
)实例(我不关心时间)。
我正在使用此代码(Swift 3):
let gregorian = Calendar(identifier: .gregorian)
let today = Date()
var dateComponents = gregorian.dateComponents([.era, .year, .month], from: today)
dateComponents.day = 1
guard let firstDayOfTheMonth = gregorian.date(from: dateComponents) else {
return
}
在调试器上,today
为我提供了Date 2016-08-18 06:52:39 UTC
的正确值。但是,firstDayOfTheMonth
会提供:Date 2016-07-31 15:00:00 UTC
,即 上个月的最后一天。
显然我已经关闭了一个,但无法弄清楚原因。
更糟糕的是,当我试图获得工作日时,我得到正确的值2(星期一,8月1日):
// Sun = 1, Mon = 2, Wed = 3, ...
guard let firstWeekDay = gregorian.dateComponents([.weekday], from: firstDayOfTheMonth).weekday else {
return
}
...所以, 发生了什么?