Não acredito que isso lhe dará um número absoluto de horas. Ele fornecerá apenas um valor de 0 a 24, onde você terá que contar com os componentes Dia, Mês e Ano para obter o intervalo de tempo integral.
codeperson de
Eu testei isso e funcionou muito bem. Com a data de 1 / jan / 2012 e a 4 / jan / 2012 retornou 96 horas.
Thomas Müller
poste seu código Thomas? Não funciona para alguns.
John Riselvato
Respostas:
171
O NSDate função timeIntervalSinceDate: vai dar-lhe a diferença de duas datas em segundos.
Altere os componentes necessários para dia, hora ou minuto, a diferença que você deseja. Se NSDayCalendarUnitfor selecionado, ele retornará o número de dias entre duas datas de forma semelhante para NSHourCalendarUniteNSMinuteCalendarUnit
Versão Swift 4
let cal =Calendar.currentlet d1 =Date()let d2 =Date.init(timeIntervalSince1970:1524787200)// April 27, 2018 12:00:00 AMlet components = cal.dateComponents([.hour],from: d2, to: d1)let diff = components.hour!
Não, não faça isso. Nem todas as horas têm 3600 segundos. Nem todos os dias têm 24 horas.
rmaddy
5
Isso está totalmente errado. Não leva em conta segundos bissextos, horário de verão. Não reinvente a roda, apenas use as APIs fornecidas com iOS como NSDateComponents.
Juan Catalan
5
Check-out: cuida do horário de verão, ano bissexto, pois usou o calendário iOS para calcular. Você pode alterar a string e as condições para incluir minutos com horas e dias.
não está mostrando mais de 12 horas de diferença. se eu quiser verificar algumas condições às 23 horas, como obter 23 horas de diferença entre os horários?
Moxarth
Está dando intervalo de tempo errado, não está funcionando para mim.
NSCalendar
o-components:fromDate:toDate:options:
método de.Respostas:
O NSDate função timeIntervalSinceDate: vai dar-lhe a diferença de duas datas em segundos.
Consulte a biblioteca de referência da apple http://developer.apple.com/library/mac/navigation/ ou se você estiver usando o Xcode, selecione ajuda / documentação no menu.
Veja: how-to-convert-an-nstimeinterval-seconds-into-minutes
--edit: Veja a resposta de ÐąrέÐέvil abaixo para lidar corretamente com o horário de verão / segundos bissextos
fonte
Altere os componentes necessários para dia, hora ou minuto, a diferença que você deseja. Se
NSDayCalendarUnit
for selecionado, ele retornará o número de dias entre duas datas de forma semelhante paraNSHourCalendarUnit
eNSMinuteCalendarUnit
Versão Swift 4
fonte
fonte
Check-out: cuida do horário de verão, ano bissexto, pois usou o calendário iOS para calcular. Você pode alterar a string e as condições para incluir minutos com horas e dias.
fonte
Para aqueles que usam o Swift 3 e superior,
fonte