如何通过取消每个星期日使用 Swift NSDate 在我的日期数组中有未来 5 天
How to have future 5 days in my date array using Swift NSDate by canceling every sunday
我正在尝试创建 UIPickerView,它允许用户 select 5 day.But 的拍卖日期,根据我的要求,我需要 disable/hide/not 添加与 [= 相关的日期24=]。我的意思是如果今天是 8/7/2015,我的 UIPickerView 中的数据将是
["All","08/07/2015 (Wed)","09/07/2015 (Thu)","10/07/2015 (Fri)", "11/07/2015 (Sat)","13/07/2015 (Mon)"]
如你所见,我把星期天藏在那category.And我试过寻找方法,但仍然出错..有什么帮助吗?
这是我的代码
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
var now = NSDate()
var auctionDate = [String]()
var sdfDDMMYYYYEEE = NSDateFormatter()
sdfDDMMYYYYEEE.dateFormat = "dd/MM/yyyy (EEE)"
var sdfDDMMYYYY = NSDateFormatter()
sdfDDMMYYYY.dateFormat = "dd/MM/yyyy"
var sdfEEE = NSDateFormatter()
sdfEEE.dateFormat = "EEE"
// This is how i
var startTime : NSTimeInterval = (floor(now.timeIntervalSince1970)) + 86400000
auctionDate.append("All")
for var i = 0; i < 5; i++ {
if sdfEEE.stringFromDate(now) == "Sun" {
now = now.dateByAddingTimeInterval(startTime)
i--;
continue;
}
auctionDate.append(sdfDDMMYYYYEEE.stringFromDate(now) as String)
now = now.dateByAddingTimeInterval(startTime)
}
println(auctionDate)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
我在我的控制台中得到了那个输出
[All, 07/07/2015 (Tue), 07/01/2112 (Thu), 08/04/2160 (Tue), 09/07/2208 (Sat), 09/10/2256 (Thu)]
任何帮助,Please.I 我被这个问题困了这么久。
您的代码中有几个错误。
NSDate()
和 NSTimeInterval()
使用 秒 ,而不是毫秒。 86400000 秒(大约)1000 天。
- 即使加上86400秒也是错误的做法,因为一天可能
在实行夏令时的地区有 23 或 25 小时。
- 在
now = now.dateByAddingTimeInterval(startTime)
中,您添加号码
(milli)seconds to the current date 这根本没有意义。
- 将工作日名称与 "Sun" 进行比较在大多数情况下都不起作用
语言。
综上所述,这里有一个可能的解决方案,使用适当的
NSCalendar
方法。有了嵌入式评论,它应该是
自我解释:
let cal = NSCalendar.currentCalendar()
let fmt = NSDateFormatter()
fmt.dateFormat = "dd/MM/yyyy (EEE)"
// Start with today (at midnight):
var date = cal.startOfDayForDate(NSDate())
var auctionDates = [ "All" ]
// Repeat until there are enough dates in the array:
while auctionDates.count < 6 {
// Compute weekday of date (1 == Sunday)
let weekDay = cal.component(.CalendarUnitWeekday, fromDate: date)
// Add to array if not Sunday:
if weekDay != 1 {
auctionDates.append(fmt.stringFromDate(date))
}
// Advance one day:
date = cal.dateByAddingUnit(.CalendarUnitDay, value: 1, toDate: date, options: nil)!
}
println(auctionDates)
我正在尝试创建 UIPickerView,它允许用户 select 5 day.But 的拍卖日期,根据我的要求,我需要 disable/hide/not 添加与 [= 相关的日期24=]。我的意思是如果今天是 8/7/2015,我的 UIPickerView 中的数据将是
["All","08/07/2015 (Wed)","09/07/2015 (Thu)","10/07/2015 (Fri)", "11/07/2015 (Sat)","13/07/2015 (Mon)"]
如你所见,我把星期天藏在那category.And我试过寻找方法,但仍然出错..有什么帮助吗?
这是我的代码
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
var now = NSDate()
var auctionDate = [String]()
var sdfDDMMYYYYEEE = NSDateFormatter()
sdfDDMMYYYYEEE.dateFormat = "dd/MM/yyyy (EEE)"
var sdfDDMMYYYY = NSDateFormatter()
sdfDDMMYYYY.dateFormat = "dd/MM/yyyy"
var sdfEEE = NSDateFormatter()
sdfEEE.dateFormat = "EEE"
// This is how i
var startTime : NSTimeInterval = (floor(now.timeIntervalSince1970)) + 86400000
auctionDate.append("All")
for var i = 0; i < 5; i++ {
if sdfEEE.stringFromDate(now) == "Sun" {
now = now.dateByAddingTimeInterval(startTime)
i--;
continue;
}
auctionDate.append(sdfDDMMYYYYEEE.stringFromDate(now) as String)
now = now.dateByAddingTimeInterval(startTime)
}
println(auctionDate)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
我在我的控制台中得到了那个输出
[All, 07/07/2015 (Tue), 07/01/2112 (Thu), 08/04/2160 (Tue), 09/07/2208 (Sat), 09/10/2256 (Thu)]
任何帮助,Please.I 我被这个问题困了这么久。
您的代码中有几个错误。
NSDate()
和NSTimeInterval()
使用 秒 ,而不是毫秒。 86400000 秒(大约)1000 天。- 即使加上86400秒也是错误的做法,因为一天可能 在实行夏令时的地区有 23 或 25 小时。
- 在
now = now.dateByAddingTimeInterval(startTime)
中,您添加号码 (milli)seconds to the current date 这根本没有意义。 - 将工作日名称与 "Sun" 进行比较在大多数情况下都不起作用 语言。
综上所述,这里有一个可能的解决方案,使用适当的
NSCalendar
方法。有了嵌入式评论,它应该是
自我解释:
let cal = NSCalendar.currentCalendar()
let fmt = NSDateFormatter()
fmt.dateFormat = "dd/MM/yyyy (EEE)"
// Start with today (at midnight):
var date = cal.startOfDayForDate(NSDate())
var auctionDates = [ "All" ]
// Repeat until there are enough dates in the array:
while auctionDates.count < 6 {
// Compute weekday of date (1 == Sunday)
let weekDay = cal.component(.CalendarUnitWeekday, fromDate: date)
// Add to array if not Sunday:
if weekDay != 1 {
auctionDates.append(fmt.stringFromDate(date))
}
// Advance one day:
date = cal.dateByAddingUnit(.CalendarUnitDay, value: 1, toDate: date, options: nil)!
}
println(auctionDates)