【发布时间】:2016-02-17 19:50:34
【问题描述】:
我有一个函数:
internal func startOfNextMonth() -> NSDate? {
guard
let cal: NSCalendar = NSCalendar.currentCalendar(),
let comp: NSDateComponents = NSDateComponents() else { return nil }
comp.month = 1
comp.day = 0
comp.to12pm()
let date = cal.dateByAddingComponents(comp, toDate: self.startOfMonth()!, options: [])!
return date
}
这应该计算下个月的第一天,但它返回2016-03-02 08:00:00 UTC。
这是否与闰年有关(2 月 29 日搞砸了?)
这是我的 startOfMonth 函数供参考,以及 to12pm() 扩展:
internal func startOfMonth() -> NSDate? {
guard
let cal: NSCalendar = NSCalendar.autoupdatingCurrentCalendar(),
let comp: NSDateComponents = cal.components([.Year, .Month], fromDate: self.at12pm()!) else { return nil }
comp.to12pm()
return cal.dateFromComponents(comp)!
}
internal extension NSDateComponents {
func to12pm() {
self.hour = 12
self.minute = 0
self.second = 0
}
}
internal func at12pm() -> NSDate? {
let cal = NSCalendar.currentCalendar()
return cal.dateBySettingHour(12, minute: 0, second: 0, ofDate: self, options: [])
}
【问题讨论】:
-
1.你想让它返回UTC吗? 2.
at12pm的邮政编码。 -
1.我并不特别在意,但我使用的所有 NSDates 都是 UTC,所以只要它是一致的,就应该没关系吧? 2. 完成,哎呀。例如,
startOfMonth()返回2016-02-01 20:00:00 +0000。 -
为什么将日期设置为下午 12 点?
-
因为我正在做几个基于天的计算,并且我想确保计算的天数始终保持一致。
-
你应该使用 NSCalendar 方法 dateByAddingUnit .Month 1
标签: ios swift nsdate nscalendar nsdatecomponents