Je me demande s'il existe une possibilité nouvelle et impressionnante d'obtenir le nombre de jours entre deux NSDates dans Swift / le "nouveau" Cocoa?
Par exemple, comme dans Ruby, je ferais:
(end_date - start_date).to_i
ios
swift
date
date-difference
Linus
la source
la source
Réponses:
Vous devez également tenir compte du décalage horaire. Par exemple, si vous comparez les dates
2015-01-01 10:00
et2015-01-02 09:00
, les jours entre ces dates reviendront à 0 (zéro) car la différence entre ces dates est inférieure à 24 heures (23 heures).Si votre objectif est d'obtenir le nombre exact de jours entre deux dates, vous pouvez contourner ce problème comme suit:
Version Swift 3 et Swift 4
la source
calendar.date(bySettingHour: 12, minute: 00, second: 00, of: calendar.startOfDay(for: firstDate))
startOfDay()
semble être inutile):calendar.date(bySettingHour: 12, minute: 0, second: 0, of: firstDate)
.Voici ma réponse pour Swift 2:
la source
today
ettomorrow
Je vois quelques réponses Swift3, je vais donc ajouter les miennes:
La dénomination semble plus Swifty, c'est une ligne et utilise la dernière
dateComponents()
méthode.la source
J'ai traduit ma réponse Objective-C
résultat
Le plus difficile était que l'auto-complétion insiste sur le fait que fromDate et toDate seraient
NSDate?
, mais en fait, ils doivent êtreNSDate!
comme indiqué dans la référence.Je ne vois pas à quoi ressemblerait une bonne solution avec un opérateur, car vous souhaitez spécifier l'unité différemment dans chaque cas. Vous pouvez renvoyer l'intervalle de temps, mais vous ne gagnerez pas beaucoup.
la source
.DayCalendarUnit
soit obsolète. Je crois maintenant que vous devriez utiliser à la.CalendarUnitDay
place.let components = cal.components(.Day, fromDate: startDate, toDate: endDate, options: [])
.Day
maintenantVoici très belle
Date
extension pour obtenir la différence entre les dates en années, mois, jours, heures, minutes, secondesla source
date
devrait êtresinceDate
dans les paramètres de fonction.days
et cela fonctionne très bien.func years(since date: Date) -> Int? { return Calendar.current.dateComponents[.year], from: date, to: self).years }
, et vous pourriez l'appeler commelet y = date1.years(since: date2)
. Cela pourrait être plus cohérent avec les conventions de dénomination modernes.Mise à jour pour Swift 3 iOS 10 Beta 4
la source
Voici la réponse pour Swift 3 (testé pour IOS 10 Beta)
Alors tu peux l'appeler comme ça
la source
Swift 3. Merci à Emin Buğra Saral ci-dessus pour la
startOfDay
suggestion.Usage:
la source
Les éléments intégrés à Swift sont toujours très basiques. Comme ils devraient l'être à ce stade précoce. Mais vous pouvez ajouter vos propres éléments avec le risque lié à la surcharge des opérateurs et des fonctions de domaine global. Ils seront cependant locaux à votre module.
la source
Voici ma réponse pour Swift 3:
la source
Il n'y a pas encore de bibliothèque standard spécifique à Swift; juste les types de base numérique, chaîne et collection.
Il est parfaitement possible de définir ces raccourcis en utilisant des extensions, mais en ce qui concerne les API prêtes à l'emploi, il n'y a pas de "nouveau" Cocoa; Swift correspond directement aux mêmes anciennes API Cocoa détaillées, telles qu'elles existent déjà.
la source
Je vais ajouter ma version même si ce fil date d'un an. Mon code ressemble à ceci:
J'espère que cela aide quelqu'un.
À votre santé,
la source
Méthode d'Erin mise à jour vers Swift 3, cela montre les jours à partir d'aujourd'hui (sans tenir compte de l'heure de la journée)
la source
Cela renvoie une différence absolue en jours entre certains
Date
et aujourd'hui:puis utilisez-le:
la source
Vous pouvez utiliser l'extension suivante:
Ensuite, vous pouvez l'appeler comme ceci:
la source
Swift 3.2
la source
Toute réponse est bonne. Mais pour les localisations, nous devons calculer un nombre de jours décimaux entre deux dates. afin que nous puissions fournir le format décimal durable.
la source
Ensuite, utilisez-le comme
la source
Il s'agit d'une version mise à jour de la réponse d'Emin pour Swift 5 qui incorpore la suggestion d'utiliser midi au lieu de minuit comme heure définitive pour comparer les jours. Il gère également l'échec potentiel de diverses fonctions de date en renvoyant une option.
la source
Swift 3 - Jours à partir d'aujourd'hui jusqu'à la date
Appelez une fonction comme celle-ci
la source
une option plus simple serait de créer une extension sur Date
la source
si vous avez besoin de l'année mois jours et des heures comme chaîne, utilisez ceci
var tomorrow = Calendar.current.date (byAdding: .day, value: 1, to: Date ())!
laissez dc = tomorrow.completeOffset (from: Date ())
la source
Belle doublure pratique:
la source
la source
Solution Swift 5.2.4:
la source
Version 2017, copier et coller
la source
la source