我有一段基本上分为两部分的代码:
第1部分:用户使用UIDatePicker
设置日期。例如,用户从当前日期开始提前1天选择。所以选定的新日期是5/19/16而不是5/18/16。
第1部分代码
let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale.currentLocale()
var dateString = "May-19-2016"
dateFormatter.dateFormat = "MMMM-dd-yyyy"
var due_date = dateFormatter.dateFromString(dateString)!
第2部分:我创建了一个代码,用于计算从所选日期到当前日期剩余的天数。在这个例子中,我的代码以某种方式在明天前0天说。以下是第二部分的代码:
第二部分:
func computeDates(dueDate:NSDate)-> Int {
let currentDate = NSDate()
// Adding days to currentDate
let daysToAdd = 1
// Adding on Unit to the current instance
let calculateDate = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.Day, value: daysToAdd, toDate: currentDate, options: NSCalendarOptions.init(rawValue: 0))
// Figure out many days from may 3rd
let cal = NSCalendar.currentCalendar()
let unit = NSCalendarUnit.Day
let components = cal.components(unit, fromDate: currentDate, toDate: dueDate, options: [])
let countLeft = components.day
return countLeft
}
print("Days left: \(computeDates(due_date)) ")
// Tests
let calc_date = computeDates(due_date)
if calc_date <= -1 {
print("Yesterday")
} else if calc_date == 0 {
print("Today")
} else if calc_date > 1 {
print("Tomorrow")
}
在第1部分示例中,我使用了一个静态日期来测试此代码。在这一部分,我提前一天在2016年5月19日。在if语句的下面的第二部分中,它以某种方式说我还剩0天,而且从我想要做的事情来看,它假设在明天19日之前还有1天。
另一个例子,如果我将19变为20,我希望它从现在开始说明&#34;在2天内#34; 。
现在,如果我回复那一天,可以说,5月15日(过去),那么if语句就会说出过期或过去。
我该如何解决这个问题?
答案 0 :(得分:0)
您应该考虑NSDate
是一个从2001年开始运行的结构。这意味着,如果您选择&#34;日期&#34; 它包含< em>&#34;日期和时间&#34; 。所有您需要做的,以便计算某些&#34;日期&#34; 之间的正确天数是截断时间组件。
但如果你只需要检查提供的日期是昨天,今天还是明天,NSCalendar
有一个方法可以达到这个目的:
目标-C:
- (BOOL)isDateInToday:(NSDate *)date NS_AVAILABLE(10_9, 8_0);
- (BOOL)isDateInYesterday:(NSDate *)date NS_AVAILABLE(10_9, 8_0);
- (BOOL)isDateInTomorrow:(NSDate *)date NS_AVAILABLE(10_9, 8_0);
和斯威夫特:
@available(OSX 10.9, *)
public func isDateInYesterday(date: NSDate) -> Bool
@available(OSX 10.9, *)
public func isDateInTomorrow(date: NSDate) -> Bool
@available(OSX 10.9, *)
public func isDateInWeekend(date: NSDate) -> Bool
答案 1 :(得分:0)
您可以使用switch语句来处理不同的情况,例如
func computeDates(dueDate:NSDate) -> Int
{
let difference = NSCalendar.currentCalendar().components(.Day, fromDate: NSDate(), toDate:dueDate , options:[])
return difference.day
}
let dueDate = NSDate().dateByAddingTimeInterval(200000)
let day = computeDates(dueDate)
switch day {
case 2..<1000: print("In \(day) days")
case 1: print("1 day left before tomorrow")
case 0 : print("today")
case -1 : print("1 day left after yesterday")
default: print("\(abs(day)) days left")
}