Latest 1.1.0
License MIT
Platforms ios 8.0, tvos 9.0, watchos 2.0, requires ARC

Carthage compatible

Kali is an iOS library written in Swift which aims to bring a native date object to the Swift library.
Many types such as String and Int have found native types in Swift from Objective-c, but NSDate did
not get such a treatment.

Kali presents DateTime, an object which aims to wrap the complexities of NSDate, NSCalendar, and NSTimeZone in a much simpler interface,
making interfacing with dates much easier and safer than before. Unlike other libraries, Kali does not aim
to extend NSDate or other Swift native types; instead, it aims to create a new, immutable Swift type that
wraps the complex functionality found in NSDate in an easier and safer manner.


Kali is only compatible with Swift 2 and Xcode 7 and above. There is no support for this library for any
previous versions of Swift.



DateTime aims to be as simple and seamless as possible by mimicking the NSDate APIs wherever possible.

For instance, to instantiate DateTime with the current date and time, simply:

let currentDate = DateTime()

Often times, we need to convert strings to dates — from API calls, for instance. Normally, this would require
working with NSDateFormatter and NSCalendar to get the desired results. With DateTime, however, this simply becomes:

let date = DateTime(string: "12/25/2001 14:23:23", format: "MM/dd/yyyy HH:mm:ss")

And sometimes, we just want to create a date simply and easily by specifying component values:

let datetime = DateTime(month: 12, day: 25, year: 2001, hour: 12, minute: 23, second: 23)

Accessing the various components of the date value is simple:

let datetime = DateTime(month: 12, day: 13, year: 2000)
print(datetime.month)    // 12
print(     // 13
print(datetime.year)    // 2000

DateTime implements RawRepresentable and can be conveniently initialized using the time interval in seconds since
January 1, 1970.

DateTime implements Comparable, making it easy to compare two DateTime objects using ==, !=, >, >=, <, <= .

DateTime initialization takes an optional NSTimeZone parameter. If not specified, it defaults to the device timezone.
The timezone property is an essential component of DateTime and ensures that your DateTime values are exactly as expected.

Finally, DateTime is immutable: once initialized, its state can never be modified or changed. Any potential modifications
made to a DateTime object (by, for instance, adding minutes or day components) will result in a new DateTime object.


TimeSpans are included for a simple way to add time to DateTime objects as well as determine the time difference
between two DateTimes.

Adding time values to a DateTime is simple. If you only need to add a single component to a DateTime:

let datetime = DateTime()
let fiveMinutesFromNow = dateTime.addMinutes(5)

For more complex time intervals, you can simply use addTimespan:

let datetime = DateTime()
let timespan = TimeSpan(days: 0, hours: 1, minutes: 5, seconds: 1)

let newDateTime = datetime.addTimespan(timespan)

Determining the time interval between two dates is just as simple. If you wanted to determine how much time had elapsed between two dates:

let firstDateTime = DateTime()
let secondDateTime = firstDateTime.addMinutes(-5)

let timespan = firstDateTime.timespanSinceDate(secondDateTime)

print(timespan.minutes) // 5

TimeSpan implements RawRepresentable and can be conveniently initialized using the time interval in seconds.


Kali is available through CocoaPods. To install
it, simply add the following line to your Podfile:

pod "Kali", '~> 1.0'


All contributions to bettering this library are welcome!

Feel free to create a pull request for this library to add or fix functionality. When contributing, please make sure
to follow the general style of the library: use self for all class level properties, document all public headers
for AppleDocs, etc.

If you do not wish to contribute directly but wish to enhance the library or have found a bug, please file an issue.


Christopher Jones, [email protected]


Kali is available under the MIT license. See the LICENSE file for more info.

Latest podspec

    "name": "Kali",
    "version": "1.1.0",
    "summary": "Better Date and Time handling using Swift.",
    "description": "Kali is a library that simplifies Date and Time handling for iOS frameworks. It wraps some of the more cumbersome features of NSDate, NSCalendar, etc. and abstracts it behind an easy-to-use, simple API for interacting with dates.",
    "homepage": "",
    "license": "MIT",
    "authors": {
        "Christopher Jones": "[email protected]"
    "source": {
        "git": "",
        "tag": "1.1.0"
    "platforms": {
        "ios": "8.0",
        "tvos": "9.0",
        "watchos": "2.0"
    "requires_arc": true,
    "source_files": "src/*.swift",
    "pushed_with_swift_version": "3.0"

Pin It on Pinterest

Share This