2

有什么方法可以使用 NSCalender 获得上个月的同一天?

我使用的日历显示用户 1 个月,例如 iPad 日历,当他们单击我想移至上个月但应选择与以前相同的日期时。

我只想做

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

但是当我从一个有 31 天的月份移动到有 30 天的月份并且选择的日期是第 31 天时,这会产生问题。

我能够找到适用于 android 但不是 iOS 的示例。

安卓示例

任何帮助,将不胜感激

4

2 回答 2

3

看看这个链接

这是关于加一个月,但你可能会做同样的减法。

改变

[dateComponents setMonth:1];

进入

[dateComponents setMonth:-1];
于 2013-01-25T20:19:47.190 回答
1

似乎没有明显的“正确”答案,也没有“内置”答案。

由于 Chris 的“简单”想法可能会导致日期无效,因此您可能必须处理极端情况。

处理日-月-年的伪代码:

  1. 如果月份 = 12 月从第 1 天-(第 1 年)开始,否则第 1 天-(第 1 个月)-年 [使用 dateComponents]
  2. 检查这是否是一个有效的日期(在这个问题中使用 NSDateFormatter
  3. 重复减去一天,直到到达有效日期

另一个想法:

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

这需要使用 NSDate 和 NSDateComponents,查看日期和时间编程指南

于 2013-01-25T21:05:38.127 回答