Tag Archives: NSCalendar

Building a Day Counter on iOS – Part 3

In this series I’ll show you how to create a simple Day Counter on iOS, using Objective-C and Xcode 9. The idea is to set a date in a settings screen, and then see how many days have elapsed on the main screen right after launching the app.

This is a 3-Part Mini-Series:

  • Part 1 is all about building the interface in Interface Builder
  • Part 2 is about coding the NSDate subtraction methods, using NSCalendar and loading/saving data using NSUserDefaults
  • Part 3 will introduce Key/Value Observing to update the first view controller as soon as the date is changed in the settings and deals with how to normalise an NSDate object.

You can find the full code on GitHub:

Happy Hacking!

Watch the full course in one convenient playlist:
Catch this episode on my iOS Dev Diary Podcast:

Building a Day Counter on iOS – Part 2

In this series I’ll show you how to create a simple Day Counter on iOS, using Objective-C and Xcode 9. The idea is to set a date in a settings screen, and then see how many days have elapsed on the main screen right after launching the app.

This is a 3-Part Mini-Series:

  • Part 1 is all about building the interface in Interface Builder
  • Part 2 is about coding the NSDate subtraction methods, using NSCalendar and loading/saving data using NSUserDefaults
  • Part 3 will introduce Key/Value Observing to update the first view controller as soon as the date is changed in the settings and deals with how to normalise an NSDate object.

You can find the full code on GitHub:

Happy Hacking!

Watch the full course in one convenient playlist:
Catch this episode on my iOS Dev Diary Podcast:

Building a Day Counter on iOS – Part 1

In this series I’ll show you how to create a simple Day Counter on iOS, using Objective-C and Xcode 9. The idea is to set a date in a settings screen, and then see how many days have elapsed on the main screen right after launching the app.

This is a 3-Part Mini-Series:

  • Part 1 is all about building the interface in Interface Builder
  • Part 2 is about coding the NSDate subtraction methods, using NSCalendar and loading/saving data using NSUserDefaults
  • Part 3 will introduce Key/Value Observing to update the first view controller as soon as the date is changed in the settings and deals with how to normalise an NSDate object.

You can find the full code on GitHub:

Happy Hacking!

Watch the full course in one convenient playlist:
Catch this episode on my iOS Dev Diary Podcast:

How many days are left this year in Objective C

Screen Shot 2014-01-07 at 12.55.39Like many date related operations, this isn’t as straightforward for a computer as it is for a human brain. Besides, it needs to be time-travel save as well as future proof. Here’s how we do it:

First we create a Gregorian calendar object and extract the current year from it. Next we’ll add the date components to it that make up New Year’s Eve, which will give us a second date object.

Now that we have two dates, we compare them via the NSCalendar method fromDate:toDate. This in turn will result in a new date component from which we can extract the days.

How to add some time to an NSDate

Imagine you had an NSDate object and want to add several days to it. We can use NSDate method dateByAddingComponents for this, which takes – as you may have guessed – NSDateComponents as parameters.

In this example, let’s assume we want to know what date it is 5 days from today:

You can add as many and diverse components you like, such as

  • setEra:
  • setYear:
  • setMonth:
  • setDay:
  • setHour:
  • setMinute:
  • setSecond:
  • setWeek:
  • setWeekday:
  • setWeekdayOrdinal:
  • setQuarter:
  • setCalendar:
  • setTimeZone:
  • setWeekOfMonth:
  • setWeekOfYear:
  • setYearForWeekOfYear:

Check out the NSDateComponents Class Reference for more information.

How to determine how many days / months / years have passed between two NSDate objects

Imagine you had two NSDate objects and you’d like to find out the time interval between those dates. NSDate objects alone won’t help us out there unless we do some serious NSDateFormatting and hair pulling.

Lucky for us there are a few other classes available that will help us do this, namely NSCalendar and NSDateComponents.

 

Years, Months and Days

Here’s how you can determine how many years, months and days have passed between two NSDates:

The above example returns Years: 12, Months: 2, Days: 5.

In a nutshell we split the date into “components” such as years, months and days, and let the NSDateComponents class give us those as NSIntegers (i.e. long integers). For the class to calculate this correctly we need to put our days into the context of an NSCalendar (gregorian in our case). This is important because different calendars may return different time intervals.

 

Just the Days

If you’re interested in just one particular item (days for example) just leave out any other component on this line:

How about other units?

You can pass as many of those fast enumeration units as you like, separated by pipes. For a full list of available values check out the NSCalendar Class Reference

 

Further Reading