premier et le dernier jour du mois en cours en swift
Je vais essayer d'obtenir le premier et le dernier jour du mois au cours swift.
Jusqu'à présent j'ai le texte suivant:
let dateFormatter = NSDateFormatter()
let date = NSDate()
dateFormatter.dateFormat = "yyyy-MM-dd"
let calendar = NSCalendar.currentCalendar()
let components = calendar.components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: date)
let month = components.month
let year = components.year
let startOfMonth = ("\(year)-\(month)-01")
Mais je ne suis pas sûr de la façon d'obtenir le dernier jour. Est-il intégré dans la méthode que je suis absent? Évidemment, il doit prendre en compte les années bissextiles, etc.
- stackoverflow.com/questions/2772348/...
- swift version?
- essayez de github.com/malcommac/SwiftDate Cette bibliothèque a la méthode: .endOfMonth() // retourne la date qui représentent le dernier jour de l'expéditeur date du mois
- pas besoin d'une bibliothèque, ces jours, il est très simple - j'ai tapé dans un up-to-date de la réponse ci-dessous pour 2017
Vous devez vous connecter pour publier un commentaire.
Vous obtenez le premier jour du mois simplement avec
Pour obtenir le dernier jour du mois, ajouter un mois et soustraire un jour:
Vous pouvez également utiliser le
rangeOfUnit
méthode qui vous donnele début et la durée du mois:
Une date pour le dernier jour du mois, ajouter la longueur du mois moins d'une seconde:
Swift 3 et 4 de drop-in extensions de
Ce fait beaucoup plus facile avec Swift 3+:
DateComponents
est un non-type facultatif maintenant, il n'est plus nécessaire).startOfDayForDate
(maintenantstartOfDay
), vous n'avez pas besoin de régler l'heure manuellement à 12h, sauf si vous êtes en train de faire certains vraiment fou les calculs du calendrier à travers les fuseaux horaires.Il est intéressant de mentionner que certains des autres réponses réclamation que vous pouvez gagner en utilisant
Calendar.current.date(byAdding: .month, value: 0, to: Date())!
, mais en cas d'échec, c'est qu'il ne fait pas de zéro le jour, ou de tenir compte des différences de fuseaux horaires.Ici, vous allez:
Non-optional expression of type 'Calendar' used in a check for optionals
. Toutes les suggestions?.hour
dans votre Swift 3 réponse?endOfMonth
êtes-vous d'obtenir la date de composants pour les remplacer? Je propose simplementfunc endOfMonth() -> Date? { return Calendar.current.date(byAdding: DateComponents(month: 1, day: -1), to: self.startOfMonth()!) }
DateComponents(month: 1, day: -1)
parce que vous êtes en s'appuyant sur les sans-papiers comportement selon lequel il nemonth
avantday
. E. g. si aujourd'hui, c'est le 15 Mai, le début du mois de Mai 1, et si l'on soustrait de la journée avant de mois, vous obtiendrez 30 Mai plutôt que le 31 Mai. Il semble plus sûr de la faire mois +1 jour et -1 dans deux opérations distinctes. Ou utilisercalendar.range(of:in:for:)
à la place.calendar.range(of:in:for:)
, c'est que pour un mois donné (disons, Décembre), la gamme est1...<32
, avec lalowerBound=1
etupperBound=32
. Effectivement pousse la gamme à partir du 1er ce mois, pour le 1er de suivant mois. Nous avons encore besoin de faire un jour de la soustraction. Toute réflexion sur le travail autour de cela?Calendar.current.date(from: Calendar.current.dateComponents([.year, .month, .day], from: Calendar.current.startOfDay(for: self)))!
Avec Swift 3 & iOS 10 la façon la plus simple que j'ai trouvé à faire c'est
Agenda
'sdateInterval(de:pour:)
:Vous pouvez ensuite utiliser
interval.start
etinterval.end
pour obtenir les dates dont vous avez besoin.Swift 3
Nombreux date exemple :
2017...
Tout d'abord, obtenir le mois que vous avez besoin de:
Pour obtenir la journée de la semaine pour le premier jour du mois:
Pour obtenir le nombre de jours dans le mois:
Swift 4
Si vous avez besoin seulement le jour ordinal:
Avec Swift 3, vous pouvez choisir l'un des deux modèles afin de récupérer le premier et le dernier jours du mois.
#1. À l'aide de
Calendar
dateComponents(_:à partir de:)
,date(de:)
etdate(byAdding:à:wrappingComponents:)
méthodesAvec ce modèle, vous devez d'abord obtenir la date du premier jour d'un mois, puis ajouter un mois et de retirer un jour afin d'obtenir la date du dernier jour du mois. L'aire de Jeux de code ci-dessous montre comment le configurer:
#2. À l'aide de
Calendar
gamme(de:à:de:)
,dateComponents(_:à partir de:)
etdate(de:)
et méthodesAvec ce modèle, vous obtenez une gamme de jour absolu des valeurs dans un mois et ensuite de récupérer les dates du premier jour et le dernier jour du mois de cela. L'aire de Jeux de code ci-dessous montre comment le configurer:
Dans swift 3, si vous mettez 0 au jour le composant que vous pouvez obtenir le dernier jour du mois. Il y a un exemple de code: