Làm thế nào để xác định nếu một NSDate là ngày hôm nay?


156

Làm thế nào để kiểm tra nếu một NSDatethuộc về ngày hôm nay?

Tôi đã sử dụng để kiểm tra nó bằng 10 ký tự đầu tiên từ [aDate description]. [[aDate description] substringToIndex:10]trả về chuỗi như "YYYY-MM-DD"vậy tôi đã so sánh chuỗi với chuỗi được trả về bởi [[[NSDate date] description] substringToIndex:10].

Có cách nào nhanh hơn và / hoặc gọn gàng để kiểm tra?

Cảm ơn.


Tôi tin rằng phương pháp của tôi là phương pháp duy nhất (theo văn bản của tôi) thực sự đề cập đến tài liệu của Apple và thực hiện những gì họ đề xuất trong đó để xác định xem hai ngày có giống nhau không. Mặc dù các phương pháp khác có thể hoạt động, tôi tin rằng phương pháp của tôi là bằng chứng trong tương lai nhất. stackoverflow.com/a/17641925/901641
ArtOfWarfare

@ArtOfWarfare: Tôi không đồng ý. Mã của bạn vẫn cần xử lý các khoảng thời gian, nhưng apple cung cấp các phương thức đã loại bỏ yếu tố này - xem: stackoverflow.com/a/17642033/106435
vikingosegundo

1
Phương pháp "mô tả" NSDate hiển thị ngày ở định dạng UTC, đó là Giờ trung bình Greenwich, không có sự điều chỉnh về thời gian tiết kiệm ánh sáng ban ngày. Nếu bạn đến muộn vào buổi tối ở Hoa Kỳ hoặc sáng sớm ở Ấn Độ, nó sẽ không hiển thị "hôm nay" là gì theo lịch của bạn. Bạn cần một đối tượng NSCalWiki để dịch NSDate thành một ngày và để chuyển đổi ngày hiện tại thành một ngày, sau đó so sánh chúng.
gnasher729

Câu trả lời:


308

Trong macOS 10.9+ & iOS 8+, có một phương pháp trên NSCalWiki / Lịch thực hiện chính xác điều này!

- (BOOL)isDateInToday:(NSDate *)date 

Vì vậy, bạn chỉ cần làm

Mục tiêu-C:

BOOL today = [[NSCalendar currentCalendar] isDateInToday:date];

Swift 3:

let today = Calendar.current.isDateInToday(date)

1
Kiểm tra bằng SDK iOS 8
Catfish_Man

1
Tôi bối rối trước nhận xét trên, đây chắc chắn là iOS 8: - (BOOL) isDateInToday: (NSDate *) ngày NS_AVAILABLE (10_9, 8_0);
powerj1984

Vâng, đó là những gì tôi nói. Người bình luận trước đó đã bối rối khi nhìn vào SDK iOS 7, có lẽ. Nó đã có một tuyên bố khác nhau.
Catfish_Man

cho 'hôm nay' đây là câu trả lời hoàn hảo :)
Daij-Djan

Câu trả lời tuyệt vời!
Supertecnoboff

192

Bạn có thể so sánh các thành phần ngày:

NSDateComponents *otherDay = [[NSCalendar currentCalendar] components:NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:aDate];
NSDateComponents *today = [[NSCalendar currentCalendar] components:NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:[NSDate date]];
if([today day] == [otherDay day] &&
   [today month] == [otherDay month] &&
   [today year] == [otherDay year] &&
   [today era] == [otherDay era]) {
    //do stuff
}

Biên tập:

Tôi thích phương pháp của stefan hơn, tôi nghĩ rằng nó làm cho một câu lệnh rõ ràng và dễ hiểu hơn:

NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:(NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:[NSDate date]];
NSDate *today = [cal dateFromComponents:components];
components = [cal components:(NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:aDate];
NSDate *otherDate = [cal dateFromComponents:components];

if([today isEqualToDate:otherDate]) {
    //do stuff
}

Chris, tôi đã kết hợp đề xuất của bạn. Tôi đã phải tìm kiếm thời đại là gì, vì vậy đối với bất kỳ ai khác không biết, nó phân biệt giữa BC và AD. Điều này có lẽ không cần thiết đối với hầu hết mọi người, nhưng thật dễ dàng để kiểm tra và thêm một số sự chắc chắn, vì vậy tôi đã đưa nó vào. Nếu bạn đang đi cho tốc độ, dù sao đây có lẽ không phải là một phương pháp tốt.


LƯU Ý như với nhiều câu trả lời về SO, sau 7 năm, điều này hoàn toàn lỗi thời. Trong Swift bây giờ chỉ cần sử dụng.isDateInToday


1
Cảm ơn. Tôi nghĩ rằng đó là giải pháp gọn gàng và an toàn hơn cho câu hỏi của tôi.
Seunghoon

1
Tôi nghĩ bạn cũng cần bao gồm thành phần thời đại. Tôi nghĩ rằng đó là một đồng xu tung giữa hai cách tiếp cận; isEqualToDate có vẻ đẹp hơn, nhưng có vẻ hơi lãng phí và mất cùng một số dòng để xây dựng lại một ngày từ các thành phần.
Chris Trang

1
Vì cả "otherDay" và "hôm nay" chỉ có bốn trường được điền vào (dù đó là tất cả những gì bạn yêu cầu), bạn chỉ có thể sử dụng [ngày hôm nay bằng: otherDay], mà không cần nhảy vòng trong trường thứ hai.
Glenn Maynard

@Glenn Bạn có gợi ý tôi so sánh NSDateComponents trong phần đầu tiên không? Tôi đã không thực sự nghĩ về điều đó, nhưng nó cũng có vẻ là một ý tưởng tốt.
David Kanarek

1
@DavidKanarek Khai thác các bài viết cũ ... Tôi không khuyên bạn nên so sánh trực tiếp các thành phần ngày, nếu bạn gặp tình huống cần phải bù một trong các thành phần, bạn có thể nhận được một cái gì đó như tháng == 3, ngày == 34. Chuyển đổi thành ngày sẽ diễn giải chính xác điều này là ngày 3 tháng 4, so sánh các thành phần ngày sẽ không thấy điều này giống như tháng == 4, ngày == 3.
Sean Kladek

27

Đây là một nhánh cho câu hỏi của bạn, nhưng nếu bạn muốn in một NSDate bằng "Hôm nay" hoặc "Hôm qua", hãy sử dụng chức năng

- (void)setDoesRelativeDateFormatting:(BOOL)b

cho NSDateFormatter


3
Ý tưởng thông minh. Nhưng tôi cho rằng việc tìm kiếm chuỗi "Hôm nay" sẽ bị hỏng nếu bạn bản địa hóa.
Basil Bourque

16

Tôi sẽ cố gắng để ngày hôm nay được chuẩn hóa thành nửa đêm và ngày thứ hai, bình thường hóa thành nửa đêm sau đó so sánh nếu đó là cùng một NSDate.

Từ một ví dụ của Apple, đây là cách bạn bình thường hóa đến nửa đêm ngày hôm nay, làm tương tự cho ngày thứ hai và so sánh:

NSCalendar * gregorian = [[NSCalendar alloc]
                               initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents * components =
    [gregorian components:
                 (NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit)
                 fromDate:[NSDate date]];
NSDate * today = [gregorian dateFromComponents:components];

Tôi nghĩ bạn cũng cần bao gồm thời đại.
Chris Trang

Không nên bình thường hóa một ngày bằng cách đặt thời gian thành 12, tức là giữa trưa, không phải nửa đêm? Vì ngày là theo giờ GMT, nên đặt nó thành giữa trưa đảm bảo rằng các múi giờ thay đổi theo cả hai cách (và chúng chỉ kéo dài đến 12h cả hai cách) không 'nhảy' vào ngày trước hoặc sau.
artooras

13

Hoạt động mở rộng Swift 3 & 4 của đề xuất bởi Catfish_Man:

extension Date {

    func isToday() -> Bool {
        return Calendar.current.isDateInToday(self)
    }

}

12

Không cần phải tung hứng với các thành phần, thời đại và công cụ.

NSCalWiki cung cấp một phương thức để bắt đầu một đơn vị thời gian nhất định cho một ngày hiện tại.

Mã này sẽ bắt đầu ngày hôm nay và ngày khác và so sánh điều đó. Nếu nó ước tính NSOrderedSame, cả hai ngày trong cùng một ngày - vì vậy hôm nay.

NSDate *today = nil;
NSDate *beginningOfOtherDate = nil;

NSDate *now = [NSDate date];
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&today interval:NULL forDate:now];
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&beginningOfOtherDate interval:NULL forDate:beginningOfOtherDate];

if([today compare:beginningOfOtherDate] == NSOrderedSame) {
    //otherDate is a date in the current day
}

9
extension NSDate {
  func isToday() -> Bool {
    let cal = NSCalendar.currentCalendar()
    var components = cal.components([.Era, .Year, .Month, .Day], fromDate:NSDate())
    let today = cal.dateFromComponents(components)!

    components = cal.components([.Era, .Year, .Month, .Day], fromDate:self)
    let otherDate = cal.dateFromComponents(components)!

    return today.isEqualToDate(otherDate)
}

Làm việc cho tôi trên Swift 2.0


6

Phiên bản Swift của câu trả lời hay nhất:

let cal = NSCalendar.currentCalendar()
var components = cal.components([.Era, .Year, .Month, .Day], fromDate:NSDate())
let today = cal.dateFromComponents(components)!

components = cal.components([.Era, .Year, .Month, .Day], fromDate:aDate);
let otherDate = cal.dateFromComponents(components)!

if(today.isEqualToDate(otherDate)) {
    //do stuff
}

5

Tham khảo mục nhập tài liệu của Apple có tên "Thực hiện tính toán lịch" [link] .

Liệt kê 13 trên trang đó gợi ý rằng để xác định số lượng trung bình giữa các ngày, bạn sử dụng:

- (NSInteger)midnightsFromDate:(NSDate *)startDate toDate:(NSDate *)endDate
{
    NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
    NSInteger startDay = [calendar ordinalityOfUnit:NSDayCalendarUnit
                                             inUnit:NSEraCalendarUnit
                                            forDate:startDate];
    NSInteger endDay = [calendar ordinalityOfUnit:NSDayCalendarUnit
                                           inUnit:NSEraCalendarUnit
                                          forDate:endDate];
    return endDay - startDay;
}

Sau đó, bạn có thể xác định xem hai ngày có giống nhau hay không bằng cách sử dụng phương thức đó và xem liệu nó có trả về 0 hay không.


2
Hãy nhớ rằng một kỷ nguyên bắt đầu lúc 00:00 GMT! Phương pháp này có thể không hoạt động chính xác nếu một trong những ngày (hoặc cả hai) không nằm trong múi giờ GMT.
Andreas Ley

5

Bạn cũng có thể kiểm tra khoảng thời gian giữa ngày bạn có và ngày hiện tại:

[myDate timeIntervalSinceNow]

Điều này sẽ cung cấp cho bạn khoảng thời gian, tính bằng giây, giữa myDate và ngày / giờ hiện tại.

Liên kết .

Chỉnh sửa: Lưu ý cho mọi người: Tôi biết rõ rằng [myDate timeIntervalSinceNow] không xác định rõ ràng liệu myDate có phải là ngày hôm nay không.

Tôi sẽ để lại câu trả lời này để nếu ai đó đang tìm kiếm thứ gì đó tương tự và [myDate timeIntervalSinceNow] hữu ích, họ có thể tìm thấy nó ở đây.


1
Những gì bạn nói là chính xác, nhưng khoảng thời gian không thực sự giúp kiểm tra xem ngày hôm nay có phải không.
Jaanus

3
Chỉ cần lưu ý rằng đây là nó sẽ cho bạn biết nếu bạn ở trong vòng 24 giờ kể từ bây giờ, nhưng không phải nếu ngày giống nhau. Chênh lệch một giây có thể là các ngày khác nhau và chênh lệch 86399 giây có thể là cùng một ngày.
David Kanarek

@David: Đúng. Tôi đã không nghĩ về điều đó khi tôi đang làm 3 việc khác trong khi trả lời câu hỏi và câu trả lời của bạn đã không được đăng khi tôi tải trang.
alesplin

1
Điều này không trả lời câu hỏi nào cả. Bạn nên xóa nó.
vikingosegundo

1
Câu trả lời này không có gì ngoài tiếng ồn. Nó không cố gắng trả lời câu hỏi cũng như không cần thiết phải tham khảo timeIntervalSinceNowvì nó được đề cập trong nhiều bài viết khác. Đồng thời xử lý so sánh ngày với kiểm tra giây khuyến khích phân chia dễ bị lỗi bằng 86400.
vikingosegundo

4

Swift Extension dựa trên các câu trả lời hay nhất:

extension NSDate {
    func isToday() -> Bool {
        let cal = NSCalendar.currentCalendar()
        if cal.respondsToSelector("isDateInToday:") {
            return cal.isDateInToday(self)
        }
        var components = cal.components((.CalendarUnitEra | .CalendarUnitYear | .CalendarUnitMonth | .CalendarUnitDay), fromDate:NSDate())
        let today = cal.dateFromComponents(components)!

        components = cal.components((.CalendarUnitEra | .CalendarUnitYear | .CalendarUnitMonth | .CalendarUnitDay), fromDate:self);
        let otherDate = cal.dateFromComponents(components)!
        return today.isEqualToDate(otherDate)
    }
}

2

Nếu bạn có rất nhiều so sánh ngày này, thì các cuộc gọi để calendar:components:fromDatebắt đầu chiếm rất nhiều thời gian. Theo một số hồ sơ tôi đã thực hiện, chúng có vẻ khá đắt.

Giả sử bạn đang cố gắng xác định từ một số ngày, giả sử NSArray *datesToCompare, là cùng ngày với một ngày nhất định, giả sử NSDate *baseDate, sau đó bạn có thể sử dụng một cái gì đó như sau (một phần được điều chỉnh từ câu trả lời ở trên):

NSDate *baseDate = [NSDate date];

NSArray *datesToCompare = [NSArray arrayWithObjects:[NSDate date], 
                           [NSDate dateWithTimeIntervalSinceNow:100],
                           [NSDate dateWithTimeIntervalSinceNow:1000],
                           [NSDate dateWithTimeIntervalSinceNow:-10000],
                           [NSDate dateWithTimeIntervalSinceNow:100000],
                           [NSDate dateWithTimeIntervalSinceNow:1000000],
                           [NSDate dateWithTimeIntervalSinceNow:50],
                           nil];

// determine the NSDate for midnight of the base date:
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* comps = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) 
                                       fromDate:baseDate];
NSDate* theMidnightHour = [calendar dateFromComponents:comps];

// set up a localized date formatter so we can see the answers are right!
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];

// determine which dates in an array are on the same day as the base date:
for (NSDate *date in datesToCompare) {
    NSTimeInterval interval = [date timeIntervalSinceDate:theMidnightHour];
    if (interval >= 0 && interval < 60*60*24) {
        NSLog(@"%@ is on the same day as %@", [dateFormatter stringFromDate:date], [dateFormatter stringFromDate:baseDate]);
    }
    else {
        NSLog(@"%@ is NOT on the same day as %@", [dateFormatter stringFromDate:date], [dateFormatter stringFromDate:baseDate]);
    }
}

Đầu ra:

Nov 23, 2011 1:32:00 PM is on the same day as Nov 23, 2011 1:32:00 PM
Nov 23, 2011 1:33:40 PM is on the same day as Nov 23, 2011 1:32:00 PM
Nov 23, 2011 1:48:40 PM is on the same day as Nov 23, 2011 1:32:00 PM
Nov 23, 2011 10:45:20 AM is on the same day as Nov 23, 2011 1:32:00 PM
Nov 24, 2011 5:18:40 PM is NOT on the same day as Nov 23, 2011 1:32:00 PM
Dec 5, 2011 3:18:40 AM is NOT on the same day as Nov 23, 2011 1:32:00 PM
Nov 23, 2011 1:32:50 PM is on the same day as Nov 23, 2011 1:32:00 PM

Cảm ơn vì điều đó. Cách được chấp nhận là cách quá tốn CPU cho ứng dụng của chúng tôi vì vậy chúng tôi cần tối ưu hóa điều này.
Accatyyc

1
Mã này sẽ thất bại cho thời gian tiết kiệm ánh sáng ban ngày. Mọi người sử dụng mã với số khét tiếng 86.400 đều đáng bị đau đầu.
vikingosegundo

2

Có một cách dễ dàng hơn nhiều câu trả lời ở trên!

NSDate *date = ... // The date you wish to test
NSCalendar *calendar = [NSCalendar currentCalendar];

if([calendar isDateInToday:date]) {
    //do stuff
}

1
Giống như câu trả lời của Catfish_Man!
Thanh Phạm

0

Điều này có thể được làm lại như là một thể loại NSDate, nhưng tôi đã sử dụng:

// Seconds per day (24h * 60m * 60s)
#define kSecondsPerDay 86400.0f

+ (BOOL) dateIsToday:(NSDate*)dateToCheck
{
    // Split today into components
    NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents* comps = [gregorian components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit) 
                                        fromDate:[NSDate date]];

    // Set to this morning 00:00:00
    [comps setHour:0];
    [comps setMinute:0];
    [comps setSecond:0];
    NSDate* theMidnightHour = [gregorian dateFromComponents:comps];
    [gregorian release];

    // Get time difference (in seconds) between date and then
    NSTimeInterval diff = [dateToCheck timeIntervalSinceDate:theMidnightHour];
    return ( diff>=0.0f && diff<kSecondsPerDay );
}

(Tuy nhiên, so sánh hai chuỗi ngày như trong câu hỏi ban đầu hầu như cảm thấy 'sạch hơn' ..)


Tại sao bao gồm giờ, phút và giây khi tạo compskhi bạn ngay lập tức đặt chúng về 0? Ngoài ra, tôi nghĩ bạn cần bao gồm thời đại.
Chris Trang

Xin lưu ý rằng trong khi điều này sẽ hoạt động trong hầu hết mọi trường hợp, có những thứ như bước nhảy vọt. Tôi không biết liệu lớp NSDate của Apple xử lý chúng như thế nào, nhưng có một số khả năng điều này sẽ không hoạt động. Đây không chỉ là "bạn có biết" chứ không phải là chỉ trích phương pháp của bạn vì chúng cực kỳ hiếm (24 trong lịch sử).
David Kanarek

Còn những ngày không dài 24 giờ, nhưng 23 hoặc 25 do Thời gian tiết kiệm ánh sáng ban ngày thì sao?
vikingosegundo

0

cho iOS7 trở về trước:

//this is now => need that for the current date
NSDate * now = [NSDate date];

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setTimeZone:[NSTimeZone systemTimeZone]];

NSDateComponents * components = [calendar components:( NSYearCalendarUnit|    NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate: now];

[components setMinute:0];
[components setHour:0];
[components setSecond:0];

//this is Today's Midnight
NSDate *todaysMidnight = [calendar dateFromComponents: components];



//now timeIntervals since Midnight => in seconds
NSTimeInterval todayTimeInterval = [now timeIntervalSinceDate: todaysMidnight];

//now timeIntervals since OtherDate => in seconds
NSTimeInterval otherDateTimeInterval = [now timeIntervalSinceDate: otherDate];

if(otherDateTimeInterval > todayTimeInterval) //otherDate is not in today
{
    if((otherDateTimeInterval - todayTimeInterval) <= 86400) //86400 == a day total seconds
    {
        @"yesterday";
    }
    else
    {
        @"earlier";
    }
}
else
{
    @"today";
}


now = nil;
calendar = nil;
components = nil;
todaysMidnight = nil;

NSLog("Thank you :-)");


0

Giải pháp chính xác và an toàn mà không cần ép buộc, hoạt động trên Swift 2.2 và trước iOS 8:

func isToday() -> Bool {
    let calendar = NSCalendar.currentCalendar()
    if #available(iOS 8.0, *) {
        return calendar.isDateInToday(self)
    }

    let todayComponents = calendar.components([.Era, .Year, .Month, .Day], fromDate:NSDate())
    let dayComponents = calendar.components([.Era, .Year, .Month, .Day], fromDate:self)

    guard let today = calendar.dateFromComponents(todayComponents),
        day = calendar.dateFromComponents(dayComponents) else {
        return false
    }

    return today.compare(day) == .OrderedSame
}

-1

Đây là câu trả lời 2 xu của tôi dựa trên câu trả lời được chấp nhận nhưng cũng hỗ trợ API mới hơn. Lưu ý: Tôi sử dụng lịch Gregorian vì hầu hết các tem thời gian là GMT nhưng thay đổi lịch của bạn khi bạn thấy phù hợp

func isDateToday(date: NSDate) -> Bool {
    let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
    if calendar.respondsToSelector("isDateInToday:") {
        return calendar.isDateInToday(date)
    }
    let dateComponents = NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay
    let today = calendar.dateFromComponents(calendar.components(dateComponents, fromDate: NSDate()))!
    let dateToCompare = calendar.dateFromComponents(calendar.components(dateComponents, fromDate: date))!

    return dateToCompare == today
}

-3

Giải pháp của tôi là tính toán bao nhiêu ngày trôi qua kể từ năm 1970 bằng cách chia và so sánh phần nguyên

#define kOneDay (60*60*24)
- (BOOL)isToday {
  NSInteger offset = [[NSTimeZone defaultTimeZone] secondsFromGMT];

  NSInteger days =[self timeIntervalSince1970] + offset;
  NSInteger currentDays = [[NSDate date] timeIntervalSince1970] + offset;
  return (days / kOneDay == currentDays / kOneDay);
}

Đó thực sự không phải là một giải pháp tồi. Không chắc chắn tại sao nó đã bị hạ cấp. Sử dụng phép chia số nguyên sẽ cắt phần còn lại và so sánh chỉ giá trị "ngày" của thời gian dài unix, sau khi sửa cho GMT. Tôi nghĩ rằng đây là giải pháp sạch nhất trong số tất cả chúng nên khá thẳng thắn.
devios1

1
@chaiguy: đây là một giải pháp tồi vì nó giả định rằng mỗi ngày dài 24 giờ - không phải vậy. Do Thời gian tiết kiệm ánh sáng ban ngày có thể kéo dài 23, 24 hoặc 25 giờ.
vikingosegundo

Hmm đó là sự thật. Tuy nhiên, trung bình mỗi năm là chính xác 24 giờ, vì vậy nó sẽ chỉ có khả năng bị tắt trong trường hợp xấu nhất một giờ, như tôi thấy. Có lẽ điều đó có thể được kiểm tra rõ ràng.
devios1

2
@chaiguy: không. không bao giờ sử dụng mã chứa 60 * 60 * 24. hoặc sống với đau đầu của bạn.
vikingosegundo

"giâyFromGMT" thay đổi đột ngột hai lần một năm ở hầu hết các nơi trên thế giới. An toàn hơn nhiều khi sử dụng các phương pháp NSCalWiki.
gnasher729

-4
NSDate *dateOne = yourDate;
NSDate *dateTwo = [NSDate date];  

switch ([dateOne compare:dateTwo])
{  
    case NSOrderedAscending:  
        NSLog(@”NSOrderedAscending”);  
        break;  

    case NSOrderedSame: 
        NSLog(@”NSOrderedSame”);  
        break;

    case NSOrderedDescending:  
        NSLog(@”NSOrderedDescending”);  
        break;  
}  

4
Điều này không cho bạn biết nếu cả hai NSDate là cùng một ngày, chỉ là ngày nào sớm hơn, ngay cả khi họ là cùng một ngày.
David Kanarek
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.