Ios 如何在swift 2.3中设置30分钟的时间间隔
开始时间=上午10:00 结束时间=下午1:00 现在我想把时间分成30分钟的间隔,就像 上午10:00上午10:30上午11:00上午11:30。。。。。。。。。。直到下午1点 我试着 我试过这些东西,得到了10:10,10:40…等等 如何进行30分钟的间歇,如10:00、10:30…等 提前感谢您可以使用课堂。此类允许获取一些日期单位。您可以从日期中获取分钟和小时值,并将分钟四舍五入到最接近的“良好”值(有时您还应该更改小时)。Ios 如何在swift 2.3中设置30分钟的时间间隔,ios,swift,time,nsdate,Ios,Swift,Time,Nsdate,开始时间=上午10:00 结束时间=下午1:00 现在我想把时间分成30分钟的间隔,就像 上午10:00上午10:30上午11:00上午11:30。。。。。。。。。。直到下午1点 我试着 我试过这些东西,得到了10:10,10:40…等等 如何进行30分钟的间歇,如10:00、10:30…等 提前感谢您可以使用课堂。此类允许获取一些日期单位。您可以从日期中获取分钟和小时值,并将分钟四舍五入到最接近的“良好”值(有时您还应该更改小时)。 之后,您可以使用小时和分钟的新值获取新日期。 别忘了时区
之后,您可以使用小时和分钟的新值获取新日期。 别忘了时区
NSDate* date = [NSDate date]; //start date
NSCalendar* calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents* components = [calendar components:(NSCalendarUnitMinute | NSCalendarUnitHour) fromDate:date];
NSInteger minutes = [components minute];
NSInteger hours = [components hour];
NSInteger nearestGoodMinutes = [self _nearestGoodMinutesForMinutes:minutes];
BOOL shouldIncHours = [self _shouldINcHoursForMinutes:minutes];
if (shouldIncHours)
{
hours++;
}
NSDate* dateWithGoodHours = [calendar dateBySettingUnit:NSCalendarUnitHour value:hours ofDate:date options:kNilOptions];
NSDate* goodDate = [calendar dateBySettingUnit:NSCalendarUnitMinute value:nearestGoodMinutes ofDate:dateWithGoodHours options:kNilOptions];
一些解释。不包含任何日期组件。日期组件取决于当前日期。组件的值也取决于当前时区。若您使用标识符创建NSCalendar,您将获得当前日历。时区应与您用于向用户发送日期的时区相同
附加说明您只能在开始日期执行此操作。您可以使用日历组件设置分钟00,然后计算时间间隔:
func getIntervals(start: String, end: String)->[Date]{
let formatter = DateFormatter()
formatter.dateFormat = "hh:mm a"
var fromDate = formatter.date(from: start)!
let calendar = Calendar(identifier: .gregorian)
let component = calendar.dateComponents([.hour, .minute], from: fromDate)
fromDate = calendar.date(bySettingHour: component.hour!, minute: 0, second: 0, of: fromDate)!
let thirtyMin: TimeInterval = 1800
let endDate = formatter.date(from: end)!
var intervals = Int(endDate.timeIntervalSince(fromDate)/thirtyMin)
intervals = intervals < 0 ? 0 : intervals
var dates = [Date]()
for x in 0...intervals{
let date = fromDate.addingTimeInterval(TimeInterval(x)*thirtyMin)
dates.append(date)
}
return dates
}
let timeIntervals = getIntervals(start: "10:10 am", end: "1:40 pm")
func getInterval(开始:字符串,结束:字符串)->[日期]{
let formatter=DateFormatter()
formatter.dateFormat=“hh:mm a”
var fromDate=formatter.date(from:start)!
let calendar=日历(标识符:。公历)
让component=calendar.dateComponents([.hour,.minute],from:fromDate)
fromDate=calendar.date(通过设置小时:component.hour!,分钟:0,秒:0,of:fromDate)!
设三分钟:时间间隔=1800
让endDate=formatter.date(from:end)!
var间隔=整数(结束日期.时间间隔自(起始日期)/第三分钟)
间隔=间隔<0?0:间隔
变量日期=[日期]()
对于0…间隔中的x{
设date=fromDate.addingTimeInterval(时间间隔(x)*thirtyMin)
日期。附加(日期)
}
返回日期
}
let timeinterval=GetInterval(开始:“上午10:10”,结束:“下午1:40”)
如果用户输入的时间少于30分钟,则使用以下功能,然后从下一个30分钟开始,例如10:20,从10:30开始。如果用户给出的时间大于30,则每个时间都是00,例如10:45,从11:00开始
func makeTimeInterval(startTime:String ,endTime:String) -> String
{
var arr = startTime.components(separatedBy: " ")[0].components(separatedBy: ":")
let str = arr[1] as String
if (Int(str)! > 0 && Int(str)! < 30){
arr[1] = "00"
}
else if(Int(str)! > 30){
arr[1] = "30"
}
let startT:String = "\(arr.joined(separator: ":")) \(startTime.components(separatedBy: " ")[1])"
let timeFormat = DateFormatter()
timeFormat.dateFormat = "hh:mm a"
var fromTime:NSDate = (timeFormat.date(from:startT) as NSDate?)!
let toTime:NSDate = (timeFormat.date(from:endTime) as NSDate?)!
var dateByAddingThirtyMinute : NSDate!
let timeinterval : TimeInterval = toTime.timeIntervalSince(fromTime as Date)
let numberOfIntervals : Double = timeinterval / 3600;
var formattedDateString : String!
for _ in stride(from: 0, to: Int(numberOfIntervals * 2), by: 1)
{
dateByAddingThirtyMinute = fromTime.addingTimeInterval(1800)
fromTime = dateByAddingThirtyMinute
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm a"
formattedDateString = dateFormatter.string(from: dateByAddingThirtyMinute! as Date) as String?
print("Time after 30 min = \(formattedDateString)")
}
return formattedDateString
}
func makeTimeInterval(开始时间:String,结束时间:String)->String
{
var arr=startTime.components(分隔符:)[0]。components(分隔符::)
将str=arr[1]设为字符串
如果(Int(str)!>0&&Int(str)!<30){
arr[1]=“00”
}
如果(整数(str)!>30,则为else{
arr[1]=“30”
}
让startT:String=“\(arr.joined(separator::”)\(startTime.components(separatedBy:)[1])”
让timeFormat=DateFormatter()
timeFormat.dateFormat=“hh:mm a”
var fromTime:NSDate=(timeFormat.date(from:startT)作为NSDate?)!
让toTime:NSDate=(timeFormat.date(from:endTime)作为NSDate?)!
var DATE通过添加第分钟:NSDate!
let timeinterval:timeinterval=toTime.timeIntervalSince(fromTime作为日期)
让NumberOfInterval:Double=时间间隔/3600;
var formattedDateString:String!
对于步幅(从:0到:Int(NumberOfInterval*2),由:1)
{
DateByAddingThirtMinute=fromTime.addingTimeInterval(1800)
fromTime=datebyaddingthirtimute
让dateFormatter=dateFormatter()
dateFormatter.dateFormat=“hh:mm a”
formattedDateString=dateFormatter.string(from:dateByAddingThirtMinute!as Date)作为字符串?
打印(“30分钟后的时间=\(formattedDateString)”)
}
返回格式化的日期字符串
}
参考这篇文章为什么减号?你能解释一下吗?我不用斯威夫特。我可以添加Objective-C代码,很简单的代码。
func getIntervals(start: String, end: String)->[Date]{
let formatter = DateFormatter()
formatter.dateFormat = "hh:mm a"
var fromDate = formatter.date(from: start)!
let calendar = Calendar(identifier: .gregorian)
let component = calendar.dateComponents([.hour, .minute], from: fromDate)
fromDate = calendar.date(bySettingHour: component.hour!, minute: 0, second: 0, of: fromDate)!
let thirtyMin: TimeInterval = 1800
let endDate = formatter.date(from: end)!
var intervals = Int(endDate.timeIntervalSince(fromDate)/thirtyMin)
intervals = intervals < 0 ? 0 : intervals
var dates = [Date]()
for x in 0...intervals{
let date = fromDate.addingTimeInterval(TimeInterval(x)*thirtyMin)
dates.append(date)
}
return dates
}
let timeIntervals = getIntervals(start: "10:10 am", end: "1:40 pm")
func makeTimeInterval(startTime:String ,endTime:String) -> String
{
var arr = startTime.components(separatedBy: " ")[0].components(separatedBy: ":")
let str = arr[1] as String
if (Int(str)! > 0 && Int(str)! < 30){
arr[1] = "00"
}
else if(Int(str)! > 30){
arr[1] = "30"
}
let startT:String = "\(arr.joined(separator: ":")) \(startTime.components(separatedBy: " ")[1])"
let timeFormat = DateFormatter()
timeFormat.dateFormat = "hh:mm a"
var fromTime:NSDate = (timeFormat.date(from:startT) as NSDate?)!
let toTime:NSDate = (timeFormat.date(from:endTime) as NSDate?)!
var dateByAddingThirtyMinute : NSDate!
let timeinterval : TimeInterval = toTime.timeIntervalSince(fromTime as Date)
let numberOfIntervals : Double = timeinterval / 3600;
var formattedDateString : String!
for _ in stride(from: 0, to: Int(numberOfIntervals * 2), by: 1)
{
dateByAddingThirtyMinute = fromTime.addingTimeInterval(1800)
fromTime = dateByAddingThirtyMinute
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm a"
formattedDateString = dateFormatter.string(from: dateByAddingThirtyMinute! as Date) as String?
print("Time after 30 min = \(formattedDateString)")
}
return formattedDateString
}
func format(minute: Int) {
let h = minute / 60
let m = minute % 60
timeLabel.text = "\(h.padZero()):\(m.padZero())"
}
private extension Int {
func padZero() -> String {
return String(format: "%02d", self)
}
}