Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/JonFir/TimeLord

Easly DateTime (NSDate) managment in Swift
https://github.com/JonFir/TimeLord

Last synced: 3 months ago
JSON representation

Easly DateTime (NSDate) managment in Swift

Awesome Lists containing this project

README

        

# TimeLord
Is simple structure encapsulating NSDate, NSCalendar, NSDateComponents, NSDateFormatter and provide new data type making operation with dates easy.

- [Features](#features)
- [Requirements](#requirements)
- [Communication](#communication)
- [Installation](#installation)
- [Usage](#usage)
- [Create date](#create-date)
- [Get date components](#get-date-components)
- [Get date as string](#get-date-as-string)
- [Compare dates](#compare-dates)
- [Modify date](#modify-date)
- [Get difference between date](#get-difference-between-date)
- [License](#license)

## Features

- [x] Create date in any format and timezone
- [x] Get date in any format and timezone
- [x] Get date components (like year, month, second, etc)
- [x] Many features for compare date
- [x] Modyfy date, add or sub any date component
- [x] Get diference between date

## Requirements

* iOS 8.0+ / Mac OS X 10.9+ / tvOS 9.0+ / watchOS 2.0+
* Xcode 7.2+

## Communication

* If you need help, use Stack Overflow. (Tag 'JFTimeLord')
* If you'd like to ask a general question, use Stack Overflow.
* If you found a bug, open an issue.
* If you have a feature request, open an issue.
* If you want to contribute, submit a pull request.

## Installation

### Carthage

Add it in your Cartfile:
```ogdl
github "JonFir/TimeLord"
```
Run `carthage update` to build the framework and drag the built TimeLord.framework into your Xcode project.

### Manually

Just copy TimeLord.swift into your project

## Usage

```swift
import TimeLord

let firstDate = TimeLord(year: 2016, month: 01, day: 01, hour: 02, minute: 30, second: 00)
let secondDate = TimeLord(year: 2015, month: 01, day: 01, hour: 02, minute: 30, second: 00)
let nowDate = TimeLord(keyWord: .Now)

if nowDate > firstDate {
...
}

let newDate = secondDate.toString()
let newDate = firstDate.toStringInFormat("yyyy-MM-dd HH:mm:ss", inTimeZone: NSTimeZone(abbreviation: "MSK"))
let newDate = secondDate.addYears(11).addMonths(9).subDays(1)
```

### Create date

```swift
// form NSDate
let date = TimeLord(date: NSDate())
// form date components
let date = TimeLord(year: 2016, month: 01, day: 08, hour: 14, minute: 25, second: 00)
let date = TimeLord(year: 2016, month: 01, day: 08, hour: 10, minute: 25, second: 00, timeZone: NSTimeZone(abbreviation: "MSK"))
// form string
let date = TimeLord(date: "2016-01-08 13:38:00")
let date = TimeLord(date: "2016-01-08 13:38:00", inFormat: "yyyy-MM-dd HH:mm:ss")
let date = TimeLord(date: "2016-01-08 09:38:00", inFormat: "yyyy-MM-dd HH:mm:ss", timeZone: NSTimeZone(abbreviation: "MSK"))
// from time interval
let date = TimeLord(timeIntervalSince1970: 1452243489)
let date = TimeLord(timeIntervalSinceNow: 1452243489)
let date = TimeLord(timeInterval: 1452243489, sinceDate: date)
let date = TimeLord(timeIntervalSinceReferenceDate: 1452243489)
// from key word
let date = TimeLord(keyWord: .Now)
let date = TimeLord(keyWord: .Today)
let date = TimeLord(keyWord: .Tomorrow)
let date = TimeLord(keyWord: .Yesterday)
```

### Get date components

```swift
let tmDateInDefaultFormat = TimeLord(date: "2016-01-08 13:38:00")
let year = tmDateInDefaultFormat?.year
let month = tmDateInDefaultFormat?.month

let day = tmDateInDefaultFormat?.day
let hour = tmDateInDefaultFormat?.hour

let minute = tmDateInDefaultFormat?.minute
let second = tmDateInDefaultFormat?.second

let nanosecond = tmDateInDefaultFormat?.nanosecond
let dayInMonth = tmDateInDefaultFormat?.dayInMonth

let weekday = tmDateInDefaultFormat?.weekday
let weekdaySymbol = tmDateInDefaultFormat?.weekdaySymbol

let weekdayOrdinal = tmDateInDefaultFormat?.weekdayOrdinal
let quarter = tmDateInDefaultFormat?.quarter

let weekOfMonth = tmDateInDefaultFormat?.weekOfMonth
let weekOfYear = tmDateInDefaultFormat?.weekOfYear

let yearForWeekOfYear = tmDateInDefaultFormat?.yearForWeekOfYear
let era = tmDateInDefaultFormat?.era
```

### Get date as string

```swift
let date = TimeLord(year: 2016, month: 01, day: 08, hour: 23, minute: 00, second: 00)

date.toString() // "2016-01-08 23:00:00"
date.toStringInFormat("yyyy-MM-dd HH:mm:ss") // "2016-01-08 23:00:00"
date.toStringInFormat("yyyy-MM-dd HH:mm:ss", inTimeZone: NSTimeZone(abbreviation: "MSK")) //"2016-01-08 19:00:00"

date.toFormattedDateString() // "янв. 8, 2016"
date.toTimeString() // "23:25:40"

date.toDateTimeString() // "2016-01-08 23:25:40"
date.toDayDateTimeString() // "пт, янв. 8, 2016 11:25 PM"

date.toAtomString() // "2016-01-08T23:25:40+07:00"
date.toCookieString() // "пятница, 08-янв.-2016 23:25:40 GMT+7"

date.toIso8601String() // "2016-01-08T23:25:40+0700"
date.toRfc822String() // "пт, 08 янв. 16 23:25:40 +0700"

date.toRfc850String() // "пятница, 08-янв.-16 23:25:40 GMT+7"
date.toRfc1036String() // "пт, 08 янв. 16 23:25:40 +0700"

date.toRfc1123String() // "пт, 08 янв. 2016 23:25:40 +0700"
date.toRfc2822String() // "пт, 08 янв. 2016 23:25:40 +0700"

date.toRfc3339String() // "2016-01-08T23:25:40+07:00"
date.toW3cString() // "2016-01-08T23:25:40+07:00"

date.toRssString() // "пт, 08 янв. 2016 23:25:40 +0700"
```

### Compare dates

```swift
let date1 = TimeLord(year: 2016, month: 01, day: 01, hour: 02, minute: 30, second: 00)
let date2 = TimeLord(year: 2016, month: 01, day: 01, hour: 02, minute: 30, second: 00)
let date3 = TimeLord(year: 2016, month: 01, day: 02, hour: 18, minute: 30, second: 45)
let date4 = TimeLord(year: 2016, month: 01, day: 02, hour: 22, minute: 35, second: 45)

if date1 == date2 {...}
if date1 != date3 {...}
if date1 < date3 {...}
if date3 <= date4 {...}
if date1 <= date2 {...}
if date4 > date3 {...}
if date3 >= date2 {...}
if date1 >= date2 {...}

if date3.between(date1, second: date4) {...}

let date = date1.closest(date3, second: date4) // return date3
let date = date1.farthest(date3, second: date4) // return date4
let date = date1.earlier(date3) // return date1
let date = date1.later(date3) // return date3

if date.isWeekend() {...}
if date.isYesterday() {...}
if date.isToday() {...}
if date.isTomorrow() {...}
if date.isFuture() {...}
if date.isPast() {...}
if date.isLeapYear() {...}
if date.isSameDay(tm2) {...}

if date.isSunday() {...}
if date.isMonday() {...}
if date.isTuesday() {...}
if date.isWednesday() {...}
if date.isThursday() {...}
if date.isFriday() {...}
if date.isSaturday() {...}
```

### Modify date

```swift
let newDate = date.addYears(1)
let newDate = date.subYears(1)

let newDate = date.addMonths(9)
let newDate = date.subMonths(1)

let newDate = date.addDays(11)
let newDate = date.subDays(11)

let newDate = date.addHours(1)
let newDate = date.subHours(1)

let newDate = date.addMinutes(15)
let newDate = date.subMinutes(15)

let newDate = date.addSeconds(1)
let newDate = date.subSeconds(15)

let newDate = date.addYears(1).addMonths(9).addSeconds(1)

let newDate = date.next() //nextDay
let newDate = date.previous() //prevDay

let newDate = date.inTimeZone(NSTimeZone(abbreviation: "MSK")!)
let newDate = date.startOfDay()

let newDate = date.endOfDay()
let newDate = date.startOfMonth()

let newDate = date.endOfMonth()
let newDate = date.startOfYear()

let newDate = date.endOfYear()
let newDate = date.average(anotherDay)
```

### Get difference between date

```swift
let newDate = firstDate.diffInYears(secondDate)
let newDate = firstDate.diffInMonths(secondDate)

let newDate = firstDate.diffInWeeks(secondDate)
let newDate = firstDate.diffInDays(secondDate)

let newDate = firstDate.diffInHours(secondDate)
let newDate = firstDate.diffInMinutes(secondDate)

let newDate = firstDate.diffInSeconds(secondDate)
```

## License

The MIT License (MIT)

Copyright (c) 2015 Evgeny Elchev