2 votes

le même jour du mois dernier ios

Y a-t-il un moyen d'utiliser NSCalender pour obtenir le même jour du mois dernier ?

J'utilise un calendrier qui montre à l'utilisateur 1 mois comme le calendrier de l'iPad quand ils cliquent sur le bouton je veux passer au mois précédent mais doit sélectionner le même jour que précédemment.

Je veux juste faire

[components setMonth:([components month] - 1)];

mais cela créera des problèmes lorsque je passerai d'un mois de 31 jours à un mois de 30 jours dont le jour sélectionné est le 31.

J'ai pu trouver des exemples pour Android mais pas pour iOS.

Exemple Android

Toute aide serait appréciée

3voto

Chris Loonam Points 2524

Vérifiez ce lien .

Il s'agit d'ajouter un mois, mais vous pourriez probablement faire de même avec la soustraction.

Changement

[dateComponents setMonth:1];

sur

[dateComponents setMonth:-1];

1voto

Thorsten Points 4986

Il semble qu'il n'y ait pas de réponse "correcte" évidente ni de réponse "intégrée".

Comme l'idée "simple" de Chris peut conduire à des dates invalides, vous devrez peut-être gérer les cas limites.

Pseudocode pour traiter le jour-mois-année :

  1. si le mois = décembre, commencer par le jour-1-(année-1), sinon jour-(mois-1)-année [en utilisant les composants de la date].
  2. vérifier si la date est valide (en utilisant le NSDateFormatter comme dans l'exemple suivant cette question
  3. répétez la soustraction d'un jour jusqu'à ce que vous atteigniez une date valide

Une autre idée :

prevMonthDate = startDate;
Repeat
    prevMonthDate = prevMonthDate - 1 day
Until (Month(prevMonthDate) < Month(startDate) Or Year(prevMonthDate) < Year(startDate))
    And (Day(prevMonthDate) <= Day(startDate))

Pour ce faire, il faut travailler avec les composants NSDate et NSDateComponents. Guide de programmation de la date et de l'heure .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X