所以这是一个独特的情况。我有一个双滑块,我使用swift制作一个时间范围选择器,就像Kayak一样。不幸的是,我需要在00:00之间到第二天早上04:00的时间范围内。
使用我的滑块控件的86340秒刻度很容易从00:00到23:59获得它。我只需将其插入这个小功能,然后在两端/旋钮上弹出正确的范围:
func getTimeStringFromSeconds(seconds: Double) -> String {
let dcFormatter = NSDateComponentsFormatter()
dcFormatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehavior.Pad
dcFormatter.allowedUnits = [NSCalendarUnit.Hour, NSCalendarUnit.Minute]
dcFormatter.unitsStyle = NSDateComponentsFormatterUnitsStyle.Positional
return dcFormatter.stringFromTimeInterval(seconds)!
}
正如您在上面的屏幕截图中看到的,虽然我有100740秒作为比例。如何让它超过23:59,然后重置为00:00并进入第二天?如上所示,我可以进入28:00,技术上是凌晨4点,但我希望它重新开始并显示04:00,而不是28:00。对此有什么好的解决方案?
就像一张纸条一样,到目前为止,我唯一的解决办法就是让标签在0:00超过86340时通过将秒数重置为0.00来说明0:00。比例仍然是100740但是有一些数学如下使标签另有说法而不弄乱旋钮的值(upperValue):
if upperKnobLayer.highlighted {
upperValue += valueDelta
upperValue = max(min(maximumValue, upperValue), lowerValue)
var upperDouble = Double(round(upperValue))
if upperDouble > 86340.00 {
let newValue = upperDouble - 86340
upperDouble = 0.00 + newValue
}
upperTime = getTimeStringFromSeconds(upperDouble)
}
答案 0 :(得分:1)
发布您的选择器的实现会有所帮助,但通常您希望滑块值类型为NSTimeIntervals。然后你可以有一个参考日期,它将是今天午夜00:00。您可以使用NSDate(timeIntervalSince:referenceDate)然后获取一个NSDate,表示自该参考日期以来的任何日期,可以相应地格式化并显示到屏幕上。这种方式的另一个好处是,如果你的timeInterval让它溢出到第二天,那么日期的实际日期是正确的
答案 1 :(得分:1)
如何将标准化为一天的秒数。
div.rest {
width: calc(50% - 150px);
width: -webkit-calc(50% - 150px);
width: -o-calc(50% - 150px);
width: -moz-calc(50% - 150px);
}