2016-11-10 1 views
-2

STARTTIME = 10:00 утра EndTime = 1:00 вечерКак сделать 30 интервалов времени минуты в быстром 2.3

Теперь я хочу, чтобы разделить время в интервале 30 минут, как

10:00 AM 10:30 AM 11:00 AM 11:30 AM .......... до 01:00 PM.

Я попытался как

let startDate : NSDate! = NSDate() 
    let time1 : NSDate = startDate.dateByAddingTimeInterval((60*60)/2) 
    let time2 : NSDate = time1.dateByAddingTimeInterval((60*60)/2) 
    let time3 : NSDate = time2.dateByAddingTimeInterval((60*60)/2) 
    let time4 : NSDate = time3.dateByAddingTimeInterval((60*60)/2) 
func makeTimeInterval(startTime:String ,endTime:String) -> String 
     { 

      let timeFormat = DateFormatter() 
      timeFormat.dateFormat = "hh:mm a" 
      var fromTime:NSDate = (timeFormat.date(from:startTime) 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 

     } 

Попробованная те вещи, и я получил как 10: 10,10: 40..etc как сделать 30 мин раунд интервала как 10: 00,10: 30 ... и т.д.

заранее спасибо

+0

Почему минус? Могли бы вы объяснить ? – iPhone25

ответ

2

Используйте приведенную ниже функцию, если пользователь вводит в любое время меньше, чем 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 

} 
0

Вы можете использовать NSDateComponents класс. Этот класс позволяет получить некоторые единицы даты. Вы можете получить минутные и часовые значения с даты и в течение минут до ближайшего «хорошего» значения (иногда также должны быть часы изменения).
После этого вы можете получить новую дату с новыми значениями часов и минут. Не забывайте о часовом поясе.

 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]; 

Некоторые объяснения. NSDate не содержит компонентов даты. Компоненты даты зависят от текущего callendar. Также значения компонентов зависят от текущего часового пояса. Если вы создаете NSCalendar с идентификатором, вы получите календарь в текущем time zone. Часовой пояс должен совпадать с часовым поясом, который вы используете для displaying даты для пользователя.

P.S.
Вы можете сделать это только на дату начала.

+0

у вас есть какой-либо пример кода – iPhone25

+0

Я не использую swift. Я могу добавить Objective-C код, это простой код. –

+0

Я обновил свой ответ –

0

Вы можете пользователь Calendar Components для установки минут 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") 
Смежные вопросы