Obtenir le jour de la semaine à l'aide de NSDate
J'ai créé une méthode qui est censé prendre dans une chaîne de caractères dans "YYYY-MM-DD" de la forme et de cracher un int qui représente les dates de la position par rapport à la semaine c'est dans (peu importe si c'chevauchements entre les mois). E.g dimanche=1, lundi=2 et ainsi de suite.
Voici mon code:
func getDayOfWeek(today:String)->Int{
var formatter:NSDateFormatter = NSDateFormatter()
formatter.dateFormat = "YYYY-MM-DD"
var todayDate:NSDate = formatter.dateFromString(today)!
var myCalendar:NSCalendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)
var myComponents = myCalendar.components(NSCalendarUnit.WeekdayOrdinalCalendarUnit, fromDate: todayDate)
var weekDay = myComponents.weekdayOrdinal
return weekDay
}
Je sais que NSCalendarUnit.WeekdayOrdinalCalendar
est mal, mais j'ai essayé je pense que la plupart des combinaisons logiques. Et ont aussi foiré autour avec myComponents.weekdayOrdinal
e.g utilisé mycomponents.day
ou .weekday
.
Ici sont mes options en quoi utiliser:
static var EraCalendarUnit: NSCalendarUnit { get }
static var YearCalendarUnit: NSCalendarUnit { get }
static var MonthCalendarUnit: NSCalendarUnit { get }
static var DayCalendarUnit: NSCalendarUnit { get }
static var HourCalendarUnit: NSCalendarUnit { get }
static var MinuteCalendarUnit: NSCalendarUnit { get }
static var SecondCalendarUnit: NSCalendarUnit { get }
static var WeekCalendarUnit: NSCalendarUnit { get }
static var WeekdayCalendarUnit: NSCalendarUnit { get }
static var WeekdayOrdinalCalendarUnit: NSCalendarUnit { get }
static var QuarterCalendarUnit: NSCalendarUnit { get }
static var WeekOfMonthCalendarUnit: NSCalendarUnit { get }
static var WeekOfYearCalendarUnit: NSCalendarUnit { get }
static var YearForWeekOfYearCalendarUnit: NSCalendarUnit { get }
static var CalendarCalendarUnit: NSCalendarUnit { get }
static var TimeZoneCalendarUnit: NSCalendarUnit { get }
Il n'est pas clair pour moi, car il n'y a pas de DayOfWeekUnit option (ou quelque chose de similaire).
- Voir: ICU le Formatage des Dates et horaires pour la mise en forme des caractères.
- Double Possible de Comment puis-je obtenir le jour de la semaine avec Cocoa Touch?
- Si vous regardez mes mots-clés, il est dit Swift n'a pas Objective-C. de plus, le code Swift 2.
- essayez les solutions suivantes "EEEE" dans votre dateformatter
Vous devez vous connecter pour publier un commentaire.
Ce que vous cherchez (si je comprends correctement à la question) est
NSCalendarUnit.CalendarUnitWeekday
. La propriété correspondante deNSDateComponents
estweekday
.Note également que votre format de la date est fausse (le
spécification complète peut être trouvée ici: http://unicode.org/reports/tr35/tr35-6.html).
La fonction peut être simplifié légèrement, à l'aide automatique de l'inférence de type, aussi vous utilisez des variables d'un lot où les constantes sont suffisantes.
En outre, la fonction doit retourner une option qui est
nil
pour une chaîne d'entrée non valide.
Code mis à jour pour Swift 3 et plus tard:
Exemple:
Réponse originale à cette question pour Swift 2:
func getDayOfWeek(today:String)->Int?
. Si vous avez la force de les déballer l'option, il se bloque toujours, n'est-ce pas?if let ...
fonctionne aussi avec implicitement déballé options..Weekday
dans iOS 8.getDayOfWeek("2014-08-27")
Swift 3 & 4
Récupérer le jour de la semaine nombre est considérablement simplifié en Swift 3, car
DateComponents
n'est plus facultatif. Ici, c'est aussi une extension:Si vous avez été à la recherche pour l'écrit, la version localisée de la journée, de la semaine:
NSDateFormatter
. Essayez plutôt: nsdateformatter.comSi vous voulez l'intégralité du "dimanche", "lundi", "mardi", "mercredi", etc.
EDIT: Il y a en fait construit dans le format qui renvoie localisée noms de jours:
Ma solution précédente (en anglais uniquement):
Vous n'avez pas besoin de déballer le calendrier et les composants, ils sont garantis par la fondation du cadre.
Utilisation:
La réponse la plus simple (swift 3):
Il y a un moyen plus facile. Il suffit de passer votre chaîne de date à la fonction suivante, il vous donnera le nom du jour 🙂
Dans mon cas, j'étais au bout d'une à trois lettres de la chaîne pour chaque jour. J'ai modifié @Martin R la fonction comme suit:
dateFormat
Swift 3 Date d'extension de
Vous pouvez utiliser cette table date_formats
pour la conversion de votre date de différents formats. Mon plus court code:
utilisation
laissez-jour de la semaine = Date().weekdayName
La solution pratique ...
Être conscient que les résultats sont les entiers un par sept.
(Pas de zéro à six ans.)
et puis ...
Il y a déjà beaucoup de réponses ici, mais je pense qu'il y a un autre, peut-être mieux, façon de le faire en utilisant la bonne
Calendar
Api.Je vous conseille d'arriver le jour de la semaine, en utilisant les
weekdaySymbols
propriété deCalendar
(docs) dans une extension deDate
:Cela nécessite l'initialisation d'un
Date
d'abord, qui, je le ferais à l'aide d'un customDateFormatter
:Cela peut ensuite être appelée avec:
Pourquoi je préfère ceci:
dayOfWeek
n'avez pas de soins sur les zones de temps parce que lecalendrier de l'utilisateur est utilisé avec certains autres solutions va montrer
la mauvaise journée à cause des fuseaux horaires ne sont pas considérées.
lieux alors pourquoi ne pas créer une réutilisables
DateFormatter
et l'utiliser à la place?weekdaySymbols
est localisée pour vous.weekDaySymbols
peut être remplacé par d'autres options telles queshortWeekdaySymbols
pour "Lun", "Mar", etc.Veuillez noter: Cet exemple
DateFormatter
aussi de ne pas considérer les zones ou les paramètres régionaux, vous aurez besoin de définir ce dont vous avez besoin. Si les dates sont toujours précises, pensez à définir le fuseau horaireTimeZone(secondsFromGMT: 0)
.weekdaySymbols
, merciJ'ai fini par avoir besoin d'un peu plus de chaînes à partir de la date, y compris la date de la semaine (par exemple, "5e") et le mois de l'année (p. ex. Août). Ci-dessous sont tous les trois fonctions que j'ai créé, basé sur @Martin R de la fonction et modifié pour revenir 3 char chaînes:
SWIFT 2.0 code de présenter le courant de la semaine à partir de lundi.
@IBAction func show(sender: AnyObject) {
Ce code est de trouver l'ensemble de la semaine en cours. Il est écrit dans Swift 2.0 :
La sortie sera comme ceci:
14mars(lundi)
15March(mardi)
16March(mercredi)
17March(jeudi)
18March(vendredi)
19March(samedi)
20March(dimanche)
Swift 3 : Xcode 8 fonction d'assistance:
Pour Swift4 pour obtenir des jours de la semaine de chaîne
SWIFT 5 Jours de la semaine
Date d'extension basé sur Fattie réponse