A Swift 5 Date extension library that adds helpful string accessors and a string based initialiser. With new methods and properties that make getting a string from a Date easy.
Locale can be handled automatically (if not provided it’s handled by the device) or manually (to ensure all devices present the same locale format).
After specifying “DateStrings” as a dependency of the target in which you want to use it, run swift package update.
Importing The Library Into Your Project
Add import DateStrings to the top of the file you wish to use the library in.
This package is an extension to the base Date object, with all methods and properties accessible via any inherited objects or the Date object itself.
Usage
Initialiser
There is a new initialiser that allows for quickly initialising a Date object from a date string. You can provide a custom format for the string.
By default, the locale will be the locale of the device that the app is being run on. You can stop this by passing a fixed locale string to the method as the locale parameter.
This allows for the following to be used to create a Date instance object from a string.
let date = Date(fromString: "2007-06-29")
This also allows for passing in a custom format and/or a locale.
let date = Date(fromString: "2007-06-29 23:49:59", format: "yyyy-MM-dd HH:mm:ss", locale: "en_US_POSIX")
asString
This method allows you to get the date in a format of your choosing, from a DateFormatter.Style or a custom provided format and/or locale.
By default, the locale will be the locale of the device that the app is being run on. You can stop this by passing a fixed locale string to the method as the locale parameter.
let date = Date(fromString: "2007-06-29")
let dateFullString = date.asString(inStyle: .full)
...
Text(dateFullString) // Friday, June 29, 2007
An example of the inFormat usage:
let date = Date(fromString: "2007-06-29 23:49:59", format: "yyyy-MM-dd HH:mm:ss")
let dateCustomString = date.asString(inFormat: "yyyy-MM-dd HH:mm:ss")
...
Text(dateCustomString) // 2007-06-29 23:49:59
toString
There is also an alternative syntax toString, which mirrors the asString methods exactly (uses them internally too, just maps the functions forward). Just a personal preference of naming on this one. As in, use it if you prefer the toString method names.
An example of the inStyle usage:
let date = Date(fromString: "2007-06-29")
let dateFullString = date.toString(inStyle: .full)
...
Text(dateFullString) // Friday, June 29, 2007
An example of the inFormat usage:
let date = Date(fromString: "2007-06-29 23:49:59", format: "yyyy-MM-dd HH:mm:ss")
let dateCustomString = date.toString(inFormat: "yyyy-MM-dd HH:mm:ss")
...
Text(dateCustomString) // 2007-06-29 23:49:59
day
A helpful computed property for getting the day from the Date.
let date = Date(fromString: "2007-06-29")
let day = date.day
...
Text(day) // Friday
dayShort
A helpful computed property for getting the short day from the Date.
let date = Date(fromString: "2007-06-29")
let day = date.dayShort
...
Text(day) // Fri
dayAsSingleDigit
A helpful computed property for getting the single digit day from the Date.
let date = Date(fromString: "2007-06-05")
let day = date.dayAsSingleDigit
...
Text(day) // 5
dayAsDoubleDigit
A helpful computed property for getting the double digit day from the Date.
let date = Date(fromString: "2007-06-05")
let day = date.dayAsDoubleDigit
...
Text(day) // 05
month
A helpful computed property for getting the month from the Date.
let date = Date(fromString: "2007-06-29")
let month = date.month
...
Text(month) // June
monthShort
A helpful computed property for getting the short month from the Date.
let date = Date(fromString: "2007-06-29")
let month = date.monthShort
...
Text(month) // Jun
monthAsSingleDigit
A helpful computed property for getting the single digit month from the Date.
let date = Date(fromString: "2007-06-29")
let month = date.monthAsSingleDigit
...
Text(month) // 6
monthAsDoubleDigit
A helpful computed property for getting the double digit month from the Date.
let date = Date(fromString: "2007-06-29")
let month = date.monthAsDoubleDigit
...
Text(month) // 06
year
A helpful computed property for getting the year from the Date.
let date = Date(fromString: "2007-06-29")
let year = date.year
...
Text(year) // 2007
yearShort
A helpful computed property for getting the short year from the Date.
let date = Date(fromString: "2007-06-29")
let year = date.yearShort
...
Text(year) // 07
datestamp
A helpful computed property for getting the datestamp from the Date.
let date = Date(fromString: "2007-06-29 10:00:00", format: "yyyy-MM-dd HH:mm:ss")
let datestamp = date.datestamp
...
Text(datestamp) // 2007-06-29 10:00:00
iso8601Python
A helpful computed property for getting the ISO 8601 Python format from the Date.
let date = Date(fromString: "2007-06-29 10:00:00", format: "yyyy-MM-dd HH:mm:ss")
let iso8601Python = date.iso8601Python
...
Text(iso8601Python) // 2007-06-29T10:00:00.000
Building
To build, use Xcode’s standard build tools via ⌘ + B or use the swift CLI command in the project root directory:
swift build
Testing
To run the tests, use Xcode’s standard test tools via ⌘ + U or use the swift CLI command in the project root directory:
swift test
Useful Reference Material
Below are some really useful references that I found when building this extension Library to aid with date formatting and converting
formats.
Especially as Apple don’t really document this themselves anywhere. Although if someone does find it, please submit a PR and
correct me.
A website that allows you to put in a date format and test date formats inline with DateFormatter and NSDateFormatter:
There is also something to note around how creating NSDateFormatter and
DateFormatter are an expensive operation, with Apple even stating so in their
2014 docs. If anyone has any ways to optimise this, I’m all ears. I’ve tried to be as performant as possible to what I know.
🗓 DateStrings
A Swift 5
Date
extension library that adds helpful string accessors and a string based initialiser. With new methods and properties that make getting a string from a Date easy.Locale can be handled automatically (if not provided it’s handled by the device) or manually (to ensure all devices present the same locale format).
Table of contents
Installation
This is Swift 5 package and makes use of Swift Package Manager (SPM) to integrate it into your Swift project.
Swift Swift Swift.
Adding via Xcode
Add the package via the following menu’s whilst in your Xcode project:
Paste this git repo URL into the search bar at the top:
Press the enter key or
Next
and for the rules, if not automatically selected, selectVersion
asUp to Next Major
:1.0.0
<2.0.0
.Hit
Finish
once Xcode has downloaded and initialised the package to add it to your project.Adding via SPM Manually
Add the following as a dependency to your
Package.swift
within your project directory:After specifying “DateStrings” as a dependency of the target in which you want to use it, run swift package update.
Importing The Library Into Your Project
Add
import DateStrings
to the top of the file you wish to use the library in.This package is an extension to the base
Date
object, with all methods and properties accessible via any inherited objects or theDate
object itself.Usage
Initialiser
There is a new initialiser that allows for quickly initialising a
Date
object from a date string. You can provide a custom format for the string.By default, the locale will be the locale of the device that the app is being run on. You can stop this by passing a fixed locale string to the method as the
locale
parameter.This allows for the following to be used to create a
Date
instance object from a string.This also allows for passing in a custom format and/or a locale.
asString
This method allows you to get the date in a format of your choosing, from a
DateFormatter.Style
or a custom provided format and/or locale.By default, the locale will be the locale of the device that the app is being run on. You can stop this by passing a fixed locale string to the method as the
locale
parameter.An example of the
inStyle
usage:An example of the
inFormat
usage:toString
There is also an alternative syntax
toString
, which mirrors theasString
methods exactly (uses them internally too, just maps the functions forward). Just a personal preference of naming on this one. As in, use it if you prefer thetoString
method names.An example of the
inStyle
usage:An example of the
inFormat
usage:day
A helpful computed property for getting the day from the
Date
.dayShort
A helpful computed property for getting the short day from the
Date
.dayAsSingleDigit
A helpful computed property for getting the single digit day from the
Date
.dayAsDoubleDigit
A helpful computed property for getting the double digit day from the
Date
.month
A helpful computed property for getting the month from the
Date
.monthShort
A helpful computed property for getting the short month from the
Date
.monthAsSingleDigit
A helpful computed property for getting the single digit month from the
Date
.monthAsDoubleDigit
A helpful computed property for getting the double digit month from the
Date
.year
A helpful computed property for getting the year from the
Date
.yearShort
A helpful computed property for getting the short year from the
Date
.datestamp
A helpful computed property for getting the datestamp from the
Date
.iso8601Python
A helpful computed property for getting the ISO 8601 Python format from the
Date
.Building
To build, use Xcode’s standard build tools via
⌘ + B
or use theswift
CLI command in the project root directory:Testing
To run the tests, use Xcode’s standard test tools via
⌘ + U
or use theswift
CLI command in the project root directory:Useful Reference Material
Below are some really useful references that I found when building this extension Library to aid with date formatting and converting formats.
Especially as Apple don’t really document this themselves anywhere. Although if someone does find it, please submit a PR and correct me.
There is also something to note around how creating
NSDateFormatter
andDateFormatter
are an expensive operation, with Apple even stating so in their 2014 docs. If anyone has any ways to optimise this, I’m all ears. I’ve tried to be as performant as possible to what I know.There is also an easter egg in the library for funsies, if you know what to look for.
Changelog
View the repo’s releases to see the change history.
Versioning
This project uses Semantic Versioning.