我想切换时间洗涤器以执行 15 分钟间隔
Posted
技术标签:
【中文标题】我想切换时间洗涤器以执行 15 分钟间隔【英文标题】:I want to Switch Time scrubber to do 15 min intervals 【发布时间】:2015-11-23 14:32:58 【问题描述】:请建议我每隔 15 分钟去一次。 例如:4:00、4:15、4:30、4:45 等等。
@IBAction func sliderMoved(sender: UISlider)
let slot = Double(sender.value)
let slotDate = self.timeFromSlot(slot)
print(timeFormatter.stringFromDate(slotDate!))
private func timeFromSlot(slot:Double) -> NSDate?
let cal = NSCalendar.currentCalendar()
let unit:NSCalendarUnit = [.Year, .Month, .Day, .Hour, .Minute, .Second]
let comps = cal.components(unit, fromDate: NSDate())
comps.hour = Int((slot % (24 * 3600)) / 3600)
comps.minute = Int(slot % 3600 / 60)
comps.second = 0
let startedDate = cal.dateFromComponents(comps)!
return startedDate
我有 sliderMoved,起点是上午 8:00,终点是晚上 9:00 我设置了滑块最小值 28,800 和最大值 75,600,当我滑动滑块时,值会随着我的 timeFromSlot 方法和更改后的值而改变我在 8:01 8:02 8:03 之间进入 .. 我想像这样更改值 8:00 8:15 8:30。
【问题讨论】:
请定义您要达到的目标。你想每 15 分钟增加一次 UISlider 的值吗?您想每隔 15 分钟将一个时间值填充到另一个 UISlider 吗? 是的,我想每 15 分钟增加一次 UISlider 的值。像这样 4:00, 4:15, 4:30, 4:45 等等 我无法理解您的问题。你有一个滑块。你有一个 sliderMoved 方法。你想用滑块中的值做 something 。究竟是什么?您希望用户的更改“快速”为 15 分钟值,例如 4:00、4:15 等?因此,如果用户将滑块推进一点点,则没有变化,值为 4:00,但如果他再改变一点,新值将捕捉到 4:15?您希望滑块允许的最小和最大时间是多少?或者您是说您希望滑块中的值范围每 15 分钟更改一次? 他想要一个滑块,从当天上午 12:00 到晚上 11:45,每个小时都有 4 个增量 @Nik 请注意,更改夏令时时一天可能没有 24 小时 【参考方案1】:对于您的情况,最好使用某些部分缩放。试试下面的代码。我相信这很简单。
import UIKit
class ViewController: UIViewController
@IBOutlet weak var slider: UISlider!
@IBOutlet weak var label: UILabel!
let ticksCount: Float = 13*4 // 15mins intervals count from 8am till 9pm
let calendar = NSCalendar.currentCalendar()
let todayDate = NSDate()
override func viewDidLoad()
super.viewDidLoad()
slider.minimumValue = 0
slider.maximumValue = ticksCount
@IBAction func onValueChanged(slider: UISlider)
let minutesFromDayStart = 8 * 60 + Int(slider.value) * 15 // total minutes from day start, assuming we use intervals from 8am
let timeSlotDate = dateWithTimeSlotForDate(todayDate, minutesFromDayStart: minutesFromDayStart)
showDate(timeSlotDate)
private func showDate(date: NSDate)
let df = NSDateFormatter()
df.dateStyle = .MediumStyle
df.timeStyle = .MediumStyle
label.text = df.stringFromDate(date)
private func dateWithTimeSlotForDate(date: NSDate, minutesFromDayStart: Int) -> NSDate
let dayStart = dayStartDateForDate(date)
return calendar.dateByAddingUnit(.Minute, value: minutesFromDayStart, toDate: dayStart, options: NSCalendarOptions(rawValue: 0))!
private func dayStartDateForDate(date: NSDate) -> NSDate
return calendar.startOfDayForDate(date)
【讨论】:
非常感谢你的朋友,完美的解决方案【参考方案2】:应该是这样的
yourSlider.continuous = false
@IBAction func sliderMoved(sender: UISlider)
let slot = Double(sender.value)
let slotDate = self.timeFromSlot(slot)
print(timeFormatter.stringFromDate(slotDate!))
if (sender.value >= 28800 && sender.value < your next interval 1)
sender.value = 28800
else if (sender.value >= your next interval 1 && sender.value < your next interval 2)
sender.value = your next interval 1
else if ....
【讨论】:
以上是关于我想切换时间洗涤器以执行 15 分钟间隔的主要内容,如果未能解决你的问题,请参考以下文章
如何计算从上午 8:00 到晚上 8:00 以 15 分钟为间隔的可用时间?
mongoDB:$dateToString 格式以 15 分钟间隔显示时间