我如何检查是否有任何日期介于两个日期之间?例如,我想检查当前日期是否介于12月15日和1月15日之间。
这可以是任何一年,所以我的当前日期可以是2023年12月15日,它应该返回true。如果是12月14日或任何一年的1月16日,它应该返回false。12月31日应该返回true。
这就是我所尝试的:
let now = currentDateProvider()
dateFormatter.dateFormat = "yyyy-MM-dd"
let year = Calendar.current.component(.year, from: now)
guard let start = dateFormatter.date(from: "\(year)-01-01"),
let end = dateFormatter.date(from: "\(year)-01-07") else {
return false
}
if start <= now && now <= end {
return true
}
guard let start = dateFormatter.date(from: "\(year)-12-01"),
let end = dateFormatter.date(from: "\(year)-12-31") else {
return false
}
let value = start <= now && now <= end
return value
但它似乎有点错误,因为如果我的时区是UTC +2,那么结束日期给我12月30日22:00:00,因为UTC + 2是12月31日00:00 - 2小时,它给你12月30日,而不是31日。
理想的情况下,我不想分开检查的日期,只是有一个包括检查12月15日和1月15日之间,而不是检查12月15日至12月31日和1月1日至1月7日。
3条答案
按热度按时间n3h0vuf21#
我将获取日期的月和日的日期组件,并对这些值进行简单的比较
简单测试用例
whlutmcx2#
您不能忽略年份,尤其是当年份的转折点在区间内时。由于实际上涉及到当前日期,您希望检查该日期是否在当前年的12月和下年的1月之间
我的建议是从当前日期获取年组件,然后通过将月设置为12、日设置为15来构建开始日期,并通过向指向下一年1月16日的开始日期添加一天和一个月来构建结束日期。
zmeyuzjn3#
我要赎罪!
1.没有看到您正在寻找一个考虑到您所在时区的解决方案
1.没看到你想要的东西只对间隔感兴趣,而不是在年。
我得承认,有时候我看书时没有注意到问题,特别是那些我认为很容易的问题。
希望下面的解决方案能满足你的需要。就像其他学院说的,你不可能不考虑年份,但是你可以像你一样在函数里面模拟年份。
请自己看一看,看看您是更喜欢我的解决方案,还是坚持使用您的解决方案:
我不知道如何使用XCTest进入游戏场,所以我在最后的代码中模拟了一些测试。