Estou trabalhando em um aplicativo que exige a verificação da data de vencimento para a lição de casa. Quero saber se uma data de vencimento está dentro da próxima semana e se é uma ação.
A maior parte da documentação que encontrei está no Objective-C e não consigo descobrir como fazê-lo no Swift. Obrigado pela ajuda!!
153
Date
classe. É ligadoNSDate
, mas é chamadoDate
.Respostas:
Eu gosto de usar extensões para tornar o código mais legível. Aqui estão algumas extensões do NSDate que podem ajudar a limpar seu código e facilitar o entendimento. Coloquei isso em um arquivo sharedCode.swift:
Agora, se você pode fazer algo assim:
fonte
return self.compare(dateToCompare) == NSComparisonResult.OrderedDescending
NSDateComponents
existe. Há uma série de casos de borda que não estão sendo pega corretamente e não faz sentido para não adicionar a conformidade comComparable
aNSDate
. Eu recomendo usar a solução de John .date1 < date2
Se você quiser apoiar
==
,<
,>
,<=
, ou>=
paraNSDate
s, você só tem que declarar isso em algum lugar:fonte
Comparable
é um descendente doEquatable
protocolo, portanto você não precisa declarar conformidade com ambos.==
,<
,>
, etc., você estará recebendo um resultado da comparação de seu endereço na memória, e não a comparação do seu valor real. No Swift, eles ainda são tratados como referências, então acho que a escolha foi (1) manter comparações por ponteiro como no ObjC, ou (2) eliminar a confusão por não fornecer uma implementação para comparações.Array.maxElement()
etc está automaticamente disponível de matrizes de NSDates.É assim que você compara dois NSDates no Swift, que acabei de testar no playground do Xcode:
Portanto, para verificar se há uma data
dueDate
dentro de uma semana:fonte
Eu sempre fiz isso em uma linha:
Ainda legível no
if
blocofonte
No Swift3, a
Date
estrutura noFoundation
agora implementa oComparable
protocolo. Portanto, asNSDate
abordagens anteriores do Swift2 são substituídas pelo Swift3Date
.Nota ...
No Swift3,
Date
éstruct
, significa que évalue type
.NSDate
éclass
simreference type
.fonte
fonte
Se você deseja comparar datas com granularidade (apenas no mesmo dia ou ano, etc.) no 3 rápido.
Para outras comparações de calendário, mude .day para;
.ano. mês. dia. hora. minuto. segundo
fonte
O Swift já implementa a comparação de datas, use date1> date2 e assim por diante.
fonte
no Swift 3, a data é comparável para que possamos comparar diretamente datas como
ou alternativamente
melhor maneira de criar
extension
na Datauso
let isGreater = date1.isGreater(than: date2)
fonte
Essa função funcionou para mim para comparar se uma data (startDate) era após o endDate, em que ambas foram definidas como variáveis NSDate:
fonte
implementação em
Swift
fonte
fonte
dateAdded é uma variável NSDate no meu objeto
fonte
Temos um cenário para verificar se as horas atuais estão em preto e branco duas vezes (duas datas). Por exemplo, quero verificar a mentira atual entre o horário de abertura da clínica (Hospital) e o horário de fechamento.
Use o código simples.
fonte
Para o Swift 3, você pode usar a função abaixo para comparar entre duas datas.
toGranularity pode ser alterado de acordo com as restrições nas quais você deseja aplicar sua comparação.
fonte
Para estender o SashaZ
Swift iOS 8 ou superior Quando você precisa de mais do que simplesmente comparações de datas maiores ou menores. Por exemplo, é o mesmo dia ou o dia anterior, ...
Nota: nunca esqueça o fuso horário. O fuso horário da agenda tem um padrão, mas se você não gostar do padrão, precisará definir o fuso horário. Para saber em que dia é, você precisa saber em qual fuso horário está perguntando.
Use-o assim:
De um exemplo mais complexo. Localize e filtre todas as datas em uma matriz, que são do mesmo dia que "findThisDay":
fonte