2016-04-04 36 views
0

我試圖根據當天的情況顯示某些東西正在打開的時間。事情是這樣的:根據當天顯示文本

Opening Hours 
**Monday: 8:00-17:00** 
Tuesday: 8:00-17:00 
Wednesday: 8:00-17:00 
Thursday: 8:00-17:00 
Friday: 8:00-17:00 
Saturday: 8:00-13:00 
Sunday: closed 

或者乾脆顯示

Monday: 8:00-17:00 

我的假設是使用switch語句,但我需要做找出今天是什麼日子?

回答

1

另一種解決辦法是:

import Foundation 

let today = NSDate() 
let dateFormatter = NSDateFormatter() 
let currentDay = NSCalendar.currentCalendar().component(.Weekday, fromDate:today); 

dateFormatter.dateFormat = "EEEE" 
let dayOfWeekString = dateFormatter.stringFromDate(today) 

switch currentDay 
{ 
case 2,3,4,5: 
    print("\(dayOfWeekString): 8:00 - 17:00") 

case 6: 
    print("\(dayOfWeekString): 8:00 - 13:00") 

default: 
    print("\(dayOfWeekString): closed") 
} 
1

您可以使用component(_:fromDate:)來獲取當前日期的星期幾。這將是這樣的:

let currentDay = NSCalendar.currentCalendar().component(.Weekday, fromDate:NSDate()); 
基於您獲得 currentDay

,可以提供正確的開放時間。

+0

@Sulthan,謝謝你是正確的日子是在這個月的一天... – sergio

1

您可以利用NSCalendar.Weekday單位作爲整數(週日至週六爲1 ... 7作爲公曆)。

如果您知道星期幾爲Int,而不是使用switch語句,則可以在不同的開放時間使用[Int: String]字典。

let calendar = NSCalendar.currentCalendar() 
let today = calendar.component(.Weekday, fromDate: NSDate()) 
    // Gregorian calendar: sunday = 0, monday = 1, ... 

let openingHours: [Int: String] = [1: "Sunday: closed", 2: "Monday: 8:00-17:00", 3: "Tuesday: 8:00-17:00"] // ... 

print("Opening hours:\n\(openingHours[today] ?? "")") 
/* Opening hours: 
    Monday: 8:00-17:00 */ 

另一種方法是創建一個計算屬性擴展NSDate()返回當前工作日作爲String

extension NSDate { 
    var weekday : String { 
     let formatter = NSDateFormatter() 
     formatter.dateFormat = "EEEE" 
     return formatter.stringFromDate(self) 
    } 
} 

這可以用[String: String]字典被容易地用於保持所述一組weekday : opening hours

/* example usage */ 
let openingHours: [String: String] = 
    ["Sunday": "closed", 
    "Monday": "8:00-17:00", 
    "Tuesday": "8:00-17:00"] // ... 

let today = NSDate().weekday 
print("Opening hours:\n\(today): \(openingHours[today] ?? "")") 
/* Opening hours: 
    Monday: 8:00-17:00 */ 
0

,而不是與switch語句中去,我寧願一個更通用的解決方案。這也是利用元組和類型別名來增強代碼表現力和可讀性的一個很好的演示。

typealias Time = (start: Int, end: Int) 
// starting with Sunday 
let openTimes: [Time] = [(0,0), (9,17), (9,17), (9,17), (9,17), (9,17), (9,12)] 

let flags : NSCalendarUnit = [.Hour, .Weekday] 

func isOpenAtTime(date: NSDate) -> Bool { 
    let time = NSCalendar.currentCalendar().components(flags, fromDate: date) 
    let openingHours = openTimes[time.weekday - 1] 
    let hour = time.hour 
    return hour >= openingHours.start && hour <= openingHours.end 
} 

你也可能想要處理一些邊緣情況,但你明白了。
通過使用分鐘而不是小時,您可以使用更精細的時間進行此項工作。