Nhận ngày trong tuần bằng NSDate


89

Tôi đã tạo một phương thức được cho là lấy một chuỗi ở dạng "YYYY-MM-DD" và lấy ra một số int đại diện cho vị trí ngày tháng liên quan đến tuần mà nó đang ở (bất kể nó có trùng lặp giữa các tháng hay không). Vì vậy, ví dụ: chủ nhật = 1 thứ hai = 2, v.v.

Đây là mã của tôi:

    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
}

Tôi biết điều đó NSCalendarUnit.WeekdayOrdinalCalendarlà sai nhưng tôi đã thử tôi nghĩ rằng hầu hết các kết hợp hợp lý. Và cũng đã nhầm lẫn với myComponents.weekdayOrdinalví dụ: used mycomponents.dayor .weekday.

Dưới đây là các tùy chọn của tôi trong việc sử dụng:

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 }

Tôi không rõ vì không có tùy chọn DayOfWeekUnit (hoặc thứ gì đó tương tự).


1
Xem: Ngày và Thời gian Định dạng ICU để định dạng ký tự.
zaph


1
@Suhaib Nếu bạn nhìn vào các thẻ của tôi, nó nói Swift không phải Objective-C. Ngoài ra, mã là trong Swift 2.
boidkan

hãy thử như sau "EEEE" trong dateformatter của bạn
Alexandros

Câu trả lời:


118

Những gì bạn đang tìm kiếm (nếu tôi hiểu câu hỏi chính xác) là NSCalendarUnit.CalendarUnitWeekday. Thuộc tính tương ứng của NSDateComponentsweekday.

Cũng xin lưu ý rằng định dạng ngày của bạn sai (bạn có thể tìm thấy thông số kỹ thuật đầy đủ tại đây: http://unicode.org/reports/tr35/tr35-6.html ).

Hàm có thể được đơn giản hóa một chút, sử dụng kiểu suy luận tự động, ngoài ra bạn sử dụng các biến rất nhiều khi hằng số là đủ. Ngoài ra, hàm phải trả về một tùy chọn nil dành cho chuỗi đầu vào không hợp lệ.

Đã cập nhật mã cho Swift 3 trở lên:

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
}

Thí dụ:

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

Câu trả lời ban đầu cho 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
    }
}

Vâng, đó là định dạng là những gì đã làm tôi bối rối. Tôi nhận được 2 thay vì 4 khi thử WeekdayCalendarUnit và rất bối rối! Cảm ơn vì liên kết, tôi sẽ đọc nó.
boidkan

1
Tôi biết nó không phải là một phần của câu hỏi ban đầu, nhưng đây sẽ là một nơi tốt để trả về một Int tùy chọn trong trường hợp ngày được thông qua không ở định dạng chính xác hoặc không hợp lệ theo một cách nào đó.
Mike S

1
Không nên đâu func getDayOfWeek(today:String)->Int?. Nếu bạn buộc mở tùy chọn nó vẫn bị treo, phải không?
ĐÃ

1
@HAS: Bạn hoàn toàn đúng, cảm ơn! - Nó không bị lỗi trong trường hợp thử nghiệm của tôi bởi vì nhiệm vụ tùy chọn if let ...cũng hoạt động với các tùy chọn không được đóng gói ngầm.
Martin R

1
Cảm ơn bạn Đánh dấu Vì điều này, Để làm cho câu trả lời của bạn đẹp hơn, bạn có thể chỉnh sửa nó để xóa mã nhanh 2 và giữ mã nhanh 3. Sau đó, thêm ghi chú ở cuối: "Nếu bạn cần mã cho swift 2, hãy kiểm tra chỉnh sửa trước đó" hoặc đại loại như vậy
Suhaib

154

Swift 3 & 4

Việc truy xuất số ngày trong tuần được đơn giản hóa đáng kể trong Swift 3 vì DateComponents không còn là tùy chọn. Đây là một phần mở rộng:

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

Nếu bạn đang tìm kiếm phiên bản bằng văn bản, được bản địa hóa của ngày trong tuần:

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

1
Có thể sẽ rõ ràng hơn nếu bạn đặt aDate.dayOfWeek () trong phần Sử dụng.
boidkan

1
Lưu ý rằng câu hỏi là làm thế nào để lấy ngày trong tuần từ một chuỗi có dạng "YYYY-MM-DD". Tất nhiên nó sẽ đơn giản hóa nếu bạn đã có NSDate.
Martin R

4
Nó có thể đáng để đề cập đến nếu bạn đang sử dụng nó trong ví dụ. xem bảng, nó có thể làm chậm quá trình cuộn, vì tạo DateFormatter khá tốn kém. Nếu bạn thường xuyên sử dụng nó, thì rất tốt để ví dụ. tạo một thể hiện và cung cấp nó trong quá trình tính toán cho tất cả các lệnh gọi hàm.
Vive

Chắc chắn rồi. Trong trường hợp đó, thậm chí có một trình xử lý mảng để bạn có thể chạy hàm trên một mảng dữ liệu sẽ hữu ích.
brandonscript

1
đơn giản hơn sẽ chỉ là câu trả lời của @ david72 bên dưới: Calendar.current.component (.weekday, from: Date ())
Adam Smaka 15/02/17

37

Nếu bạn muốn có đầy đủ "Chủ nhật", "Thứ Hai", "Thứ Ba", "Thứ Tư", v.v.

CHỈNH SỬA: Thực sự có một định dạng được xây dựng sẵn trả về tên ngày được bản địa hóa:

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

Giải pháp trước đây của tôi (chỉ dành cho tiếng Anh):

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

Bạn không cần phải mở lịch và các thành phần, chúng được đảm bảo bởi khung nền tảng.

Sử dụng:

print(myDate.dayOfTheWeek())

5
EEEEE và EEEEEE cung cấp cho bạn các hình thức ngắn của ngày, ví dụ như Wed, Th, Fr
Matjan

1
Hoặc sử dụng thuộc tính shortWeekdaySymbols của Calendar để tránh tạo DateFormatter hoàn toàn.
mikepj

22

Câu trả lời đơn giản (nhanh 3):

Calendar.current.component(.weekday, from: Date())

11

Trong trường hợp của tôi, tôi đang theo dõi một chuỗi ba chữ cái cho mỗi ngày. Tôi đã sửa đổi chức năng của @Martin R như sau:

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
    }
}

2
Bạn có thể sử dụng EEE như nhưdateFormat
mrvincenzo

10

Co một cach dê dang hơn. Chỉ cần chuyển ngày chuỗi của bạn vào hàm sau, nó sẽ cung cấp cho bạn tên ngày :)

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);
    }

2
đang tìm kiếm "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)
}
}

sử dụng let ngày trong tuần = Date (). weekdayName


8

Swift 3 Ngày mở rộng

extension Date {
    var weekdayOrdinal: Int {
        return Calendar.current.component(.weekday, from: self)
    }
}

Tôi đã thêm một điểm quan trọng vào câu trả lời của bạn, đó là câu trả lời cập nhật ở đây. Rõ ràng là hãy thư giãn nếu bạn không thích! :) Chúc mừng
Fattie

câu hỏi yêu cầu một số nguyên
đáng kinh ngạc

6

Bạn có thể sử dụng bảng date_formats này để chuyển đổi ngày của mình sang các định dạng khác nhau. Mã ngắn nhất của tôi:

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

Cảm ơn bạn rất nhiều Đây là những gì tôi đang tìm kiếm formatter.dateFormat = "eeee" // "eeee" -> Thứ sáu
Mohammed Abunada

4

SWIFT 5 - Ngày trong tuần

    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"]
        }
     }

Gia hạn ngày dựa trên câu trả lời của Fattie


3

Giải pháp thiết thực ...

Lưu ý rằng kết quả là các số nguyên từ một đến bảy.

(Không phải từ 0 đến 6.)

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

và sau đó ...

let dow = Calendar.current.component(.weekday, from: someDate)
print( trivialDayStringsORDINAL[dow] )

3

Đã có rất nhiều câu trả lời ở đây nhưng tôi nghĩ có một cách khác, có lẽ tốt hơn, để thực hiện việc này bằng cách sử dụng các CalendarAPI chính xác .

Tôi khuyên bạn nên lấy ngày trong tuần bằng cách sử dụng thuộc weekdaySymbolstính của Calendar( docs ) trong phần mở rộng cho 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]
    }
}

Điều này yêu cầu khởi tạo Datetrước, điều này tôi sẽ thực hiện bằng cách sử dụng tùy chỉnh 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
    }
}

Sau đó, điều này có thể được gọi với:

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

Tại sao tôi thích điều này:

  1. dayOfWeek không phải quan tâm đến múi giờ vì lịch của người dùng được sử dụng, một số giải pháp khác ở đây sẽ hiển thị ngày không chính xác vì múi giờ không được xem xét.
  2. Rất có thể bạn sẽ cần sử dụng ngày ở cùng một định dạng ở những nơi khác, vậy tại sao không tạo một ngày có thể sử dụng lại DateFormattervà sử dụng nó thay thế?
  3. weekdaySymbols được bản địa hóa cho bạn.
  4. weekDaySymbolscó thể được thay thế bằng các tùy chọn khác như shortWeekdaySymbolscho "Thứ Hai", "Thứ Ba", v.v.

Xin lưu ý: Ví dụ này DateFormattercũng không xem xét múi giờ hoặc ngôn ngữ, bạn sẽ cần đặt chúng cho những gì bạn cần. Nếu ngày tháng luôn chính xác, hãy cân nhắc đặt múi giờ TimeZone(secondsFromGMT: 0).


1
Đó là đáng ngạc nhiên rằng đây là câu trả lời duy nhất đề cập weekdaySymbols, nhờ
Fattie

1

Tôi đã kết thúc việc cần thêm một vài chuỗi từ ngày, bao gồm ngày trong tuần (ví dụ: "ngày 5") và tháng trong năm (ví dụ: tháng 8). Dưới đây là tất cả ba hàm tôi đã tạo dựa trên hàm của @Martin R và được sửa đổi để trả về 3 chuỗi ký tự:

//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
    }
}

1

Mã SWIFT 2.0 để hiển thị tuần hiện tại bắt đầu từ thứ hai.

@IBAction func hiển thị (người gửi: 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)

}

1

Mã này là để tìm cả tuần hiện tại. Nó được viết bằng 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
}

Đầu ra sẽ như thế này:

14 Tháng Ba (Thứ Hai) 15 Tháng Ba (Thứ Ba) 16 Tháng Ba (Thứ Tư) 17 Tháng Ba (Thứ Năm) 18 Tháng Ba (Thứ Sáu) 19 Tháng Ba (Thứ Bảy) 20 Tháng Ba (Chủ Nhật)


1

Swift 3: Chức năng trợ giúp 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
    }
}

1
Điều này không được bản địa hóa.
Alexander - Phục hồi Monica

0

Đối với Swift4 để có được ngày trong tuần từ chuỗi

   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

Phương thức này khác với phương pháp đầu tiên trong stackoverflow.com/a/25533357/1187415 như thế nào?
Martin R
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.