Estou tentando fazer é obter NSDate hoje, ontem, esta semana, semana passada, este mês, último mês variáveis prontas para comparação para cabeçalhos a serem adicionados em titleForHeaderInSection de UITableView
O que desejo é feito manualmente no código abaixo para a data 11/12/2009
NSDate *today = [NSDate dateWithString:@"2009-12-11 00:00:00 +0000"];
NSDate *yesterday = [NSDate dateWithString:@"2009-12-10 00:00:00 +0000"];
NSDate *thisWeek = [NSDate dateWithString:@"2009-12-06 00:00:00 +0000"];
NSDate *lastWeek = [NSDate dateWithString:@"2009-11-30 00:00:00 +0000"];
NSDate *thisMonth = [NSDate dateWithString:@"2009-12-01 00:00:00 +0000"];
NSDate *lastMonth = [NSDate dateWithString:@"2009-11-01 00:00:00 +0000"];
iphone
time
comparison
nsdate
hasnat
fonte
fonte
NSCalendar
se a exatidão for necessária.Pode ser uma maneira melhor de escrever isso, mas aqui o que eu descobri na sugestão de Ben's NSCalendar e trabalhando a partir daí para NSDateComponents
fonte
fromDate:[[NSDate alloc] init]
bits.É bom ter NSDateComponents hoje:
Isso cria um NSDate com apenas ano, mês e data:
Para obter ontem, etc., você pode calculá-lo usando NSDateComponents:
fonte
(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
deveria ser(NSEraCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
.fonte
DateThisWeek
, para definir o dia da semana não tem impacto sobre o NSDate ...Swift 4.2
Observe que os componentes de data são opcionais.
fonte
As outras respostas simplesmente não funcionaram para mim (talvez por causa do meu fuso horário). É assim que eu faço:
fonte
Se estiver usando iOS 10+ ou MacOS 10.12+, você pode usar esses dois
Calendar
métodos para fazer isso corretamente.func date(byAdding component: Calendar.Component, value: Int, to date: Date, wrappingComponents: Bool = default) -> Date?
( docs )func dateInterval(of component: Calendar.Component, for date: Date) -> DateInterval?
( docs )Aqui está um exemplo de como usar esses métodos no Swift 3, junto com a saída de playgrounds em meu fuso horário.
Bônus: você pode usar o
DateInterval
s para testar se uma data se enquadra nesse intervalo. Continuando de cima:fonte
yesterday
diz 29 de abril enow
diz 28 de abril?fonte
Eu realmente gosto do objeto THCalendarInfo contido neste projeto:
http://github.com/jaredholdcroft/kcalendar
Não consigo encontrar o original. Usando este objeto, você pode ir para um dia anterior, o início de uma semana, o início de um mês, obter o dia da semana, o dia do mês ... etc.
fonte
fonte
[NSDate date]
?Isto é para verificar se a data é este mês ou não
E o segundo só muda o tipo de unidade de calendário para fracos como este
Espero que isso seja útil para alguém, obrigado.
fonte
Eu respondi uma pergunta semelhante já e por isso aqui a minha resposta é melhor:
fonte