Pobierz dzień tygodnia za pomocą NSDate

90

Stworzyłem metodę, która ma przyjmować ciąg znaków w postaci „RRRR-MM-DD” i wypluwać int, który reprezentuje pozycję dat w odniesieniu do tygodnia, w którym się ona znajduje (niezależnie od tego, czy nakłada się na miesiące). Na przykład niedziela = 1 poniedziałek = 2 i tak dalej.

Oto mój kod:

    func getDayOfWeek(today:String)->Int{

    var formatter:NSDateFormatter = NSDateFormatter()
    formatter.dateFormat = "YYYY-MM-DD"
    var todayDate:NSDate = formatter.dateFromString(today)!
    var myCalendar:NSCalendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)
    var myComponents = myCalendar.components(NSCalendarUnit.WeekdayOrdinalCalendarUnit, fromDate: todayDate)
    var weekDay = myComponents.weekdayOrdinal
    return weekDay
}

Wiem, że NSCalendarUnit.WeekdayOrdinalCalendarto źle, ale próbowałem, myślę, że najbardziej logiczne kombinacje. A także bawić się myComponents.weekdayOrdinalnp. Używanymi mycomponents.daylub .weekday.

Oto moje opcje użycia:

static var EraCalendarUnit: NSCalendarUnit { get }
static var YearCalendarUnit: NSCalendarUnit { get }
static var MonthCalendarUnit: NSCalendarUnit { get }
static var DayCalendarUnit: NSCalendarUnit { get }
static var HourCalendarUnit: NSCalendarUnit { get }
static var MinuteCalendarUnit: NSCalendarUnit { get }
static var SecondCalendarUnit: NSCalendarUnit { get }
static var WeekCalendarUnit: NSCalendarUnit { get }
static var WeekdayCalendarUnit: NSCalendarUnit { get }
static var WeekdayOrdinalCalendarUnit: NSCalendarUnit { get }
static var QuarterCalendarUnit: NSCalendarUnit { get }
static var WeekOfMonthCalendarUnit: NSCalendarUnit { get }
static var WeekOfYearCalendarUnit: NSCalendarUnit { get }
static var YearForWeekOfYearCalendarUnit: NSCalendarUnit { get }
static var CalendarCalendarUnit: NSCalendarUnit { get }
static var TimeZoneCalendarUnit: NSCalendarUnit { get }

Nie jest to dla mnie jasne, ponieważ nie ma opcji DayOfWeekUnit (lub czegoś podobnego).

boidkan
źródło
1
Zobacz: Formatowanie dat i godzin w ICU w celu formatowania znaków.
zaph
1
@Suhaib Jeśli spojrzysz na moje tagi, zobaczysz, że Swift, a nie Objective-C. Ponadto kod jest w Swift 2.
boidkan
wypróbuj następujące „EEEE” w swoim formacie daty
Alexandros

Odpowiedzi:

118

To, czego szukasz (jeśli dobrze rozumiem pytanie), to NSCalendarUnit.CalendarUnitWeekday. Odpowiednia właściwość NSDateComponentsis weekday.

Zwróć również uwagę, że format daty jest nieprawidłowy (pełną specyfikację można znaleźć tutaj: http://unicode.org/reports/tr35/tr35-6.html ).

Funkcję można nieco uprościć, korzystając z automatycznego wnioskowania o typie, a także często używasz zmiennych, w których stałe są wystarczające. Ponadto funkcja powinna zwracać wartość opcjonalną, która dotyczy nil nieprawidłowego ciągu wejściowego.

Zaktualizowany kod dla Swift 3 i nowszych:

func getDayOfWeek(_ today:String) -> Int? {
    let formatter  = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd"
    guard let todayDate = formatter.date(from: today) else { return nil }
    let myCalendar = Calendar(identifier: .gregorian)
    let weekDay = myCalendar.component(.weekday, from: todayDate)
    return weekDay
}

Przykład:

if let weekday = getDayOfWeek("2014-08-27") {
    print(weekday)
} else {
    print("bad input")
}

Oryginalna odpowiedź na Swift 2:

func getDayOfWeek(today:String)->Int? {

    let formatter  = NSDateFormatter()
    formatter.dateFormat = "yyyy-MM-dd"
    if let todayDate = formatter.dateFromString(today) {
        let myCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
        let myComponents = myCalendar.components(.Weekday, fromDate: todayDate)
        let weekDay = myComponents.weekday
        return weekDay
    } else {
        return nil
    }
}
Martin R.
źródło
Tak, to format był tym, co mnie zawiodło. Otrzymywałem 2 zamiast 4, gdy próbowałem WeekdayCalendarUnit i byłem bardzo zdezorientowany! Dzięki za link, przeczytam o tym.
boidkan
1
Wiem, że nie jest to część oryginalnego pytania, ale byłoby to dobre miejsce na zwrócenie opcjonalnej wartości Int w przypadku, gdy przekazana data nie ma prawidłowego formatu lub jest w jakiś sposób nieprawidłowa.
Mike S
1
Nie powinno func getDayOfWeek(today:String)->Int?. Jeśli wymusisz rozpakowanie opcjonalnego, nadal się zawiesza, prawda?
MA
1
@HAS: Masz całkowitą rację, dzięki! - Nie zawiesił się w moim przypadku testowym, ponieważ przypisanie opcjonalne if let ...działa również z niejawnie rozpakowanymi opcjami.
Martin R
1
Dziękuję Marting. Aby Twoja odpowiedź była piękniejsza, możesz ją edytować, aby usunąć kod Swift 2 i zachować kod Swift 3. Następnie dodaj na końcu notatkę mówiącą: „Jeśli potrzebujesz kodu do Swift 2, sprawdź poprzednią edycję” lub coś podobnego
Suhaib
155

Swift 3 i 4

Pobieranie numeru dnia tygodnia jest znacznie uproszczone w języku Swift 3, ponieważ DateComponentsnie jest już opcjonalne. Tutaj jest jako rozszerzenie:

extension Date {
    func dayNumberOfWeek() -> Int? {
        return Calendar.current.dateComponents([.weekday], from: self).weekday 
    }
}

// returns an integer from 1 - 7, with 1 being Sunday and 7 being Saturday
print(Date().dayNumberOfWeek()!) // 4

Jeśli szukałeś pisemnej, zlokalizowanej wersji dnia tygodnia:

extension Date {
    func dayOfWeek() -> String? {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "EEEE"
        return dateFormatter.string(from: self).capitalized 
        // or use capitalized(with: locale) if you want
    }
}

print(Date().dayOfWeek()!) // Wednesday
brandonscript
źródło
1
Może byłoby to bardziej jasne, gdyby umieścić aDate.dayOfWeek () w sekcji Użycie.
boidkan
1
Zwróć uwagę, że chodziło o to, jak uzyskać dzień tygodnia z ciągu znaków w postaci „RRRR-MM-DD”. Oczywiście upraszcza to, jeśli masz już NSDate.
Martin R
4
Warto chyba wspomnieć, że jeśli używasz go np. widoku tabeli, może spowolnić przewijanie, ponieważ tworzenie DateFormatter jest dość kosztowne. Jeśli masz zamiar używać go bardzo często, warto np. utwórz jedną instancję i podaj ją podczas obliczania do wszystkich wywołań funkcji.
Żyj
Absolutnie. W takim przypadku przydatna byłaby nawet procedura obsługi tablicy, w której można by uruchomić funkcję na tablicy danych.
brandonscript
1
prostsza byłaby po prostu odpowiedź @ david72 poniżej: Calendar.current.component (.weekday, from: Date ())
Adam Smaka,
37

Jeśli chcesz, aby pełne „niedziela”, „poniedziałek”, „wtorek”, „środa” itp.

EDYCJA: W rzeczywistości istnieje wbudowany format, który zwraca zlokalizowane nazwy dni:

extension NSDate {
    func dayOfTheWeek() -> String? {        
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "EEEE"
        return dateFormatter.stringFromDate(self)
    }
}

Moje poprzednie rozwiązanie (tylko w języku angielskim):

extension NSDate {

    func dayOfTheWeek() -> String? {
        let weekdays = [
            "Sunday",
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday"
        ]

        let calendar: NSCalendar = NSCalendar.currentCalendar()
        let components: NSDateComponents = calendar.components(.Weekday, fromDate: self)
        return weekdays[components.weekday - 1]
    }
}

Nie musisz rozpakowywać kalendarza i komponentów, gwarantuje je szkielet podstawy.

Stosowanie:

print(myDate.dayOfTheWeek())
Matjan
źródło
5
EEEEE i EEEEEE podaje krótkie formy dni, np. Śr., Czw., Pt.
Matjan.
1
Lub użyj właściwości shortWeekdaySymbols Calendar, aby całkowicie uniknąć tworzenia DateFormatter.
mikepj
22

Prosta odpowiedź (szybka 3):

Calendar.current.component(.weekday, from: Date())
david72
źródło
11

W moim przypadku szukałem ciągu trzech liter na każdy dzień. Zmodyfikowałem funkcję @Martin R w następujący sposób:

func getDayOfWeekString(today:String)->String? {
    let formatter  = NSDateFormatter()
    formatter.dateFormat = "yyyy-MM-dd"
    if let todayDate = formatter.dateFromString(today) {
        let myCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
        let myComponents = myCalendar.components(.Weekday, fromDate: todayDate)
        let weekDay = myComponents.weekday
        switch weekDay {
        case 1:
            return "Sun"
        case 2:
            return "Mon"
        case 3:
            return "Tue"
        case 4:
            return "Wed"
        case 5:
            return "Thu"
        case 6:
            return "Fri"
        case 7:
            return "Sat"
        default:
            print("Error fetching days")
            return "Day"
        }
    } else {
        return nil
    }
}
Tr0yJ
źródło
2
Możesz użyć EEE jakodateFormat
mrvincenzo
10

Jest łatwiejszy sposób. Po prostu przekaż datę ciągu do następującej funkcji, poda Ci nazwę dnia :)

func getDayNameBy(stringDate: String) -> String
    {
        let df  = NSDateFormatter()
        df.dateFormat = "YYYY-MM-dd"
        let date = df.dateFromString(stringDate)!
        df.dateFormat = "EEEE"
        return df.stringFromDate(date);
    }
Hamid
źródło
2
szukał „EEE”. thanx
anoo_radha
9
extension Date {

var weekdayName: String {
    let formatter = DateFormatter(); formatter.dateFormat = "E"
    return formatter.string(from: self as Date)
}

var weekdayNameFull: String {
    let formatter = DateFormatter(); formatter.dateFormat = "EEEE"
    return formatter.string(from: self as Date)
}
var monthName: String {
    let formatter = DateFormatter(); formatter.dateFormat = "MMM"
    return formatter.string(from: self as Date)
}
var OnlyYear: String {
    let formatter = DateFormatter(); formatter.dateFormat = "YYYY"
    return formatter.string(from: self as Date)
}
var period: String {
    let formatter = DateFormatter(); formatter.dateFormat = "a"
    return formatter.string(from: self as Date)
}
var timeOnly: String {
    let formatter = DateFormatter(); formatter.dateFormat = "hh : mm"
    return formatter.string(from: self as Date)
}
var timeWithPeriod: String {
    let formatter = DateFormatter(); formatter.dateFormat = "hh : mm a"
    return formatter.string(from: self as Date)
}

var DatewithMonth: String {
    let formatter = DateFormatter(); formatter.dateStyle = .medium ;        return formatter.string(from: self as Date)
}
}

użycie let weekday = Date (). weekdayName

Akash Shindhe
źródło
8

Swift 3 Rozszerzenie daty

extension Date {
    var weekdayOrdinal: Int {
        return Calendar.current.component(.weekday, from: self)
    }
}
pytający
źródło
Dodałem ważny punkt do Twojej odpowiedzi, która jest aktualną odpowiedzią tutaj. Oczywiście możesz się zrelaksować, jeśli nie lubisz! :) Pozdrawiam
Fattie
pytanie zadawane o liczbę całkowitą
quemeful
6

Możesz użyć tej tabeli date_formats do konwersji daty na różne formaty. Mój najkrótszy kod:

func getDayOfWeek(today: String) -> Int{
    let formatter:NSDateFormatter = NSDateFormatter()
    formatter.dateFormat = "yyyy-MM-dd"
    let todayDate = formatter.dateFromString(today)
    formatter.dateFormat = "e" // "eeee" -> Friday
    let weekDay = formatter.stringFromDate(todayDate!)
    return Int(weekDay)!
}
getDayOfWeek("2015-12-18") // 6
qwerty-reloader
źródło
Dziękuję bardzo. To jest to, czego szukałem formatter.dateFormat = "eeee" // "eeee" -> Piątek
Mohammed Abunada
4

SWIFT 5 - Dzień tygodnia

    extension Date {

        var dayofTheWeek: String {
             let dayNumber = Calendar.current.component(.weekday, from: self)
             // day number starts from 1 but array count from 0
             return daysOfTheWeek[dayNumber - 1]
        }

        private var daysOfTheWeek: [String] {
             return  ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
        }
     }

Przedłużenie daty na podstawie odpowiedzi Fattiego

Dili
źródło
3

Praktyczne rozwiązanie ...

Należy pamiętać, że wyniki to liczby całkowite od 1 do 7.

(Nie od zera do szóstej).

let trivialDayStringsORDINAL = ["", "SUN","MON","TUE","WED","THU","FRI","SAT"]
// note that zero is not used

i wtedy ...

let dow = Calendar.current.component(.weekday, from: someDate)
print( trivialDayStringsORDINAL[dow] )
Fattie
źródło
3

Tutaj jest już wiele odpowiedzi, ale myślę, że jest inny, być może lepszy, sposób zrobienia tego przy użyciu odpowiednich Calendarinterfejsów API.

Sugerowałbym pobranie dnia tygodnia przy użyciu weekdaySymbolswłaściwości Calendar( docs ) w rozszerzeniu do Date:

extension Date {

    /// Returns the day of the week as a `String`, e.g. "Monday"
    var dayOfWeek: String {
        let calendar = Calendar.autoupdatingCurrent
        return calendar.weekdaySymbols[calendar.component(.weekday, from: self) - 1]
    }
}

Wymaga to inicjalizacji Datepierwszego, co zrobiłbym za pomocą niestandardowego DateFormatter:

extension DateFormatter {

    /// returns a `DateFormatter` with the format "yyyy-MM-dd".
    static var standardDate: DateFormatter {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd"
        return formatter
    }
}

Można to następnie wywołać za pomocą:

DateFormatter.standardDate.date(from: "2018-09-18")!.dayOfWeek

Dlaczego wolę to:

  1. dayOfWeek nie musi przejmować się strefami czasowymi, ponieważ używany jest kalendarz użytkownika, niektóre inne rozwiązania tutaj pokażą nieprawidłowy dzień, ponieważ strefy czasowe nie są brane pod uwagę.
  2. Jest bardzo prawdopodobne, że będziesz musiał używać dat w tym samym formacie w innych miejscach, więc dlaczego nie utworzyć pliku wielokrotnego użytku DateFormatteri zamiast tego użyć go?
  3. weekdaySymbols jest zlokalizowany dla Ciebie.
  4. weekDaySymbolsmożna zastąpić innymi opcjami, takimi jak shortWeekdaySymbols„Pon”, „Wto” itp.

Uwaga: w tym przykładzie DateFormatternie uwzględniono również stref czasowych ani lokalizacji, musisz ustawić je zgodnie z potrzebami. Jeśli daty są zawsze dokładne, rozważ ustawienie strefy czasowej TimeZone(secondsFromGMT: 0).

Leon
źródło
1
To zdumiewające, że jest to jedyna odpowiedź, która wspomina weekdaySymbols, dzięki
Fattie
1

Skończyło się na tym, że potrzebowałem jeszcze kilku ciągów od daty, w tym daty tygodnia (np. „5”) i miesiąca roku (np. Sierpnia). Poniżej znajdują się wszystkie trzy funkcje, które utworzyłem na podstawie funkcji @Martin R i zmodyfikowałem tak, aby zwracały 3 ciągi znaków:

//Date String Helper Functions
func getDayOfWeek(today:String)->String? {
    let formatter  = NSDateFormatter()
    formatter.dateFormat = "yyyy-MM-dd"
    if let todayDate = formatter.dateFromString(today) {
        let myCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
        let myComponents = myCalendar.components(.Weekday, fromDate: todayDate)
        let weekDay = myComponents.weekday
        switch weekDay {
        case 1:
            return "Sun"
        case 2:
            return "Mon"
        case 3:
            return "Tue"
        case 4:
            return "Wed"
        case 5:
            return "Thu"
        case 6:
            return "Fri"
        case 7:
            return "Sat"
        default:
            print("Error fetching days")
            return "Day"
        }
    } else {
        return nil
    }
}

func getDateOfMonth(today:String)->String? {
    let formatter  = NSDateFormatter()
    formatter.dateFormat = "yyyy-MM-dd"
    if let todayDate = formatter.dateFromString(today) {
        let myCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
        let myComponents = myCalendar.components(.Day, fromDate: todayDate)
        let weekDay = myComponents.day
        switch weekDay {
        case 1:
            return "1st"
        case 2:
            return "2nd"
        case 3:
            return "3rd"
        case 4:
            return "4th"
        case 5:
            return "5th"
        case 6:
            return "6th"
        case 7:
            return "7th"
        case 8:
            return "8th"
        case 9:
            return "9th"
        case 10:
            return "10th"
        case 11:
            return "11th"
        case 12:
            return "12th"
        case 13:
            return "13th"
        case 14:
            return "14th"
        case 15:
            return "15th"
        case 16:
            return "16th"
        case 17:
            return "17th"
        case 18:
            return "18th"
        case 19:
            return "19th"
        case 20:
            return "20th"
        case 21:
            return "21st"
        case 22:
            return "22nd"
        case 23:
            return "23rd"
        case 24:
            return "24th"
        case 25:
            return "25th"
        case 26:
            return "26th"
        case 27:
            return "27th"
        case 28:
            return "28th"
        case 29:
            return "29th"
        case 30:
            return "30th"
        case 31:
            return "31st"
        default:
            print("Error fetching Date Of Month")
            return "Day"
        }
    } else {
        return nil
    }
}

func getMonthOfYear(today:String)->String? {
    let formatter  = NSDateFormatter()
    formatter.dateFormat = "yyyy-MM-dd"
    if let todayDate = formatter.dateFromString(today) {
        let myCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
        let myComponents = myCalendar.components(.Month, fromDate: todayDate)
        let month = myComponents.month
        switch month {
        case 1:
            return "Jan"
        case 2:
            return "Feb"
        case 3:
            return "Mar"
        case 4:
            return "Apr"
        case 5:
            return "May"
        case 6:
            return "Jun"
        case 7:
            return "Jul"
        case 8:
            return "Aug"
        case 9:
            return "Sep"
        case 10:
            return "Oct"
        case 11:
            return "Nov"
        case 12:
            return "Dec"
        default:
            print("Error fetching months")
            return "Month"
        }
    } else {
        return nil
    }
}
Tr0yJ
źródło
1

Kod SWIFT 2.0 prezentujący bieżący tydzień począwszy od poniedziałku.

@IBAction func show (sender: AnyObject) {

   // Getting Days of week corresponding to their dateFormat

    let calendar = NSCalendar.currentCalendar()
    let dayInt: Int!
    var weekDate: [String] = []
    var i = 2

    print("Dates corresponding to days are")
    while((dayInt - dayInt) + i < 9)
    {
        let weekFirstDate = calendar.dateByAddingUnit(.Day, value: (-dayInt+i), toDate: NSDate(), options: [])
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "EEEE dd MMMM"
        let dayOfWeekString = dateFormatter.stringFromDate(weekFirstDate!)
        weekDate.append(dayOfWeekString)
        i++
    }
    for i in weekDate
    {
        print(i) //Printing the day stored in array
    }
}

// function to get week day
func getDayOfWeek(today:String)->Int {

    let formatter  = NSDateFormatter()
    formatter.dateFormat = "MMM-dd-yyyy"
    let todayDate = formatter.dateFromString(today)!
    let myCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
    let myComponents = myCalendar.components(.Weekday, fromDate: todayDate)
    let weekDay = myComponents.weekday
    return weekDay
}


@IBAction func DateTitle(sender: AnyObject) {


    // Getting currentDate and weekDay corresponding to it
    let currentDate = NSDate()
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "MMM-dd-yyyy"
    let dayOfWeekStrings = dateFormatter.stringFromDate(currentDate)
    dayInt = getDayOfWeek(dayOfWeekStrings)

}
Himanshu
źródło
1

Ten kod służy do wyszukania całego bieżącego tygodnia. Jest napisany w języku Swift 2.0:

var i = 2
var weekday: [String] = []
var weekdate: [String] = []
var weekmonth: [String] = []

@IBAction func buttonaction(sender: AnyObject) {

    let currentDate = NSDate()
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "MMM-dd-yyyy"
    let dayOfWeekStrings = dateFormatter.stringFromDate(currentDate)
    let weekdays = getDayOfWeek(dayOfWeekStrings)
    let calendar = NSCalendar.currentCalendar()

    while((weekdays - weekdays) + i < 9)
    {
        let weekFirstDate = calendar.dateByAddingUnit(.Day, value: (-weekdays+i), toDate: NSDate(), options: [])

        let dayFormatter = NSDateFormatter()
        dayFormatter.dateFormat = "EEEE"
        let dayOfWeekString = dayFormatter.stringFromDate(weekFirstDate!)
        weekday.append(dayOfWeekString)

        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "dd"
        let dateOfWeekString = dateFormatter.stringFromDate(weekFirstDate!)
        weekdate.append(dateOfWeekString)

        let monthFormatter = NSDateFormatter()
        monthFormatter.dateFormat = "MMMM"
        let monthOfWeekString = monthFormatter.stringFromDate(weekFirstDate!)
        weekmonth.append(monthOfWeekString)

        i++
    }

    for(var j = 0; j<7 ; j++)
    {
    let day = weekday[j]
    let date = weekdate[j]
    let month = weekmonth[j]
    var wholeweek = date + "-" + month + "(" + day + ")"
    print(wholeweek)
    }

}

func getDayOfWeek(today:String)->Int {
    let formatter  = NSDateFormatter()
    formatter.dateFormat = "MMM-dd-yyyy"
    let todayDate = formatter.dateFromString(today)!
    let myCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
    let myComponents = myCalendar.components(.Weekday, fromDate: todayDate)
    let daynumber = myComponents.weekday
    return daynumber
}

Wynik będzie taki:

14 marca (poniedziałek) 15 marca (wtorek) 16 marca (środa) 17 marca (czwartek) 18 marca (piątek) 19 marca (sobota) 20 marca (niedziela)

Anurag Mehta
źródło
1

Swift 3: Funkcja pomocnicza Xcode 8:

func getDayOfWeek(fromDate date: Date) -> String? {
    let cal = Calendar(identifier: .gregorian)
    let dayOfWeek = cal.component(.weekday, from: date)
    switch dayOfWeek {
     case 1:
        return "Sunday"
    case 2:
        return "Monday"
    case 3:
        return "Tuesday"
    case 4:
        return "Wednesday"
    case 5:
        return "Thursday"
    case 6:
        return "Friday"
    case 7:
        return "Saturday"
    default:
        return nil
    }
}
aBikis
źródło
1
To nie jest zlokalizowane.
Alexander - Przywróć Monikę
0

Aby Swift4 pobierał dzień tygodnia z ciągu znaków

   func getDayOfWeek(today:String)->Int {
        let formatter  = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd"
        let todayDate = formatter.date(from: today)!
        let myCalendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)!
        let myComponents = myCalendar.components(NSCalendar.Unit.weekday, from: todayDate)
        let weekDay = myComponents.weekday
        return weekDay!
    }

let weekday = getDayOfWeek(today: "2018-10-10")
print(weekday) // 4
Sébastien REMY
źródło
Czym różni się to od pierwszej metody w stackoverflow.com/a/25533357/1187415 ?
Martin R.