SwiftDate

🐔 Toolkit to parse, validate, manipulate, compare and display dates, time & timezones in Swift.

MIT License

Stars
7.6K
Committers
133

Bot releases are hidden (Show)

SwiftDate - SwiftDate 5.0.2

Published by malcommac over 6 years ago

Release Notes

Release Date: 2018-07-12

  • #557 Fixed Swift Package Manager (SPM) project structure
  • #558 Added ordinalDay property to Date and DateInRegion (iOS 9+, macOS 10.11+)
  • Fixes for SwiftLint linter
  • Project converted to Swift 4.2
SwiftDate - SwiftDate 5.0.1

Published by malcommac over 6 years ago

Changes:

  • #553 Methods isAfterDate, isBeforeDate from Date+Compare extension ignores orEqual argument
SwiftDate - SwiftDate 5.0.0

Published by malcommac over 6 years ago

Upgrading from Swift 4.x

SwiftDate 5.x is a complete rewrite of the library. While it introduces several new features a great part of the work is about a consistent naming of the functions: some was renamed while deprecated ones was removed.

If you miss a features or you are interested in a new one create a new Issue.

Important Note about Default Region

In SwiftDate 4.x the default region is automatically set to local regiomn, where all attributes are set automatically to the current's device's locale, timezone and calendar.

Since SwiftDate 5, in order to be more comply with Date's default behaviour, the default region's timezone is set to GMT+0 (UTC).

If you want to restore the old behaviour just set it to Region.local just after the launch of the app.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
	SwiftDate.defaultRegion = Region.local // set region to local device attributes
	// ... do something else
	return true
}

Added/Removed/Replaced Methods

  • Date.defaultRegion was renamed to SwiftDate.defaultRegion and you can both read and set it.
  • Date.setDefaultRegion(:) was removed; use SwiftDate.defaultRegion's setter.
  • TimeZoneName is now Zones and its conform to the new ZonesConvertible protocol. All parameters (like Region inits function) takes now a generic ZonesConvertible instance: this mean you can pass one of the enum values of the zone or just an instance of TimeZone object (or you can conform your own class to it).
  • CalendarName is now Calendars and its conform to the new CalendarConvertible protocol. All parameters (like Region inits function) takes now a generic CalendarConvertible instance: this mean you can pass one of the enum values of the zone or just an instance of Calendar object (or you can conform your own class to it).
  • LocaleName is now Locales and its conform to the new LocaleConvertible protocol. All parameters (like Region inits function) takes now a generic LocaleConvertible instance: this mean you can pass one of the enum values of the zone or just an instance of Calendar object (or you can conform your own class to it).
  • Date/DateInRegion: isBetween() function was renamed isInRange()
  • Date/DateInRegion: isAfter() was renamed to isAfterDate()
  • Date/DateInRegion: isBefore() was renamed to isBeforeDate()
  • String extension methods date(format:fromRegion) and date(formats:fromRegion) are now replaced by toDate(_:region) (while similar shortcuts methods are added to parse common formats: toISODate(), toDotNETDate(), toRSSDate() and toSQLDate().
  • Removed Int extension second,minute,hour,day,week,month,year due to inconsistence (use plurar versions seconds,minutes etc.
  • Related dates generation is now grouped under the dateAt() function as enum list. Therefore nextWeekend, `previo
  • DateInRegion: roundedAt() is now replaced by dateRoundedAt() which now compacts paramters in a single enum.
  • DateInRegion: startOf() and endOf() are now replaced by dateAtStartOf() and dateAtEndOf()and include support for both single and multiple units.
  • DateInRegion: atTime() is now replaced by dateBySet(hour:min:secs:options)
  • DateInRegion: DateInRegion's static distantFuture() and distantPast are now future() and past()
  • DateInRegion:next(day:) is now part of the dateAt() function with enum .weekday(_).
  • DateInRegion: add(components:) is now replaced by dateByAdding(_:_:)
  • DateInRegion: at(unit:value:) and at(values:keep:) are now replaced by dateBySet().
  • nextDSTTransitionDate property is now part of the enum of dateAt()
  • recentDate() and oldestDate() are now called newestIn() and oldestIn()
  • TimeInterval Extension: in(_:toDate:of:) is now replaced by toUnits(_:from:)
  • TimeInterval Extension: string() is now replaced by toString()
  • DateTimeInterval class is now replaced by TimePeriod class and its descendants
  • DateInRegion: dates(between:and:increment:) to enumerate dates is now replaced by enumerateDates(from:to:increment:)
  • DateInRegion: colloquial formatter colloquial(toDate:options:) is now replaced by toRelative(since:style:locale:)
  • Formatting method iso8601() is now toISO8601() and other methods to..() was added to simplify formatting task.
  • Date/DateInRegion: Introduced compareCloseTo() to compare two dates against a precision value.
  • Added several shortcut methods as extensions of String to parse dates: toISODate(), toDotNETDate(), toRSSDate() and toSQLDate().
  • Comparison methods are now grouped by compare() function and a list of all available enums.
SwiftDate - SwiftDate 4.5.0 - Swift 4

Published by malcommac almost 7 years ago

CHANGELOG

  • #495 Added Thai language (thanks to Thanakrit Weekhamchai)
  • #492 Introduced a new ColloquialDateFormatter class
  • #503 Added isBetween to check if a date is inside a given dates range with passed granularity.
  • #505 Exposed reference date for in() function of TimeInterval. If specified conversion of the interval is aware of daylight saving time and calendar's specific dates; when not specified absolute conversion still available (only for .day,.hour,.minute,.second components).
SwiftDate - SwiftDate 4.4.2 - Swift 4

Published by malcommac almost 7 years ago

Release Date: 2017-11-26
Zipped Version: Download 4.4.2

  • #495 Added Persian language
  • #489 Disabled LLV Code Coverage scheme
  • #494 Removed String.characters warning from Swift 3.x
  • #487 Fixed a regression with rangeAt instead of range(at) from Swift 3.x)
SwiftDate - SwiftDate 4.4.1 - (Swift 4.x)

Published by malcommac about 7 years ago

  • #483 Fixes a minor issue with NSRange under XCode 9
SwiftDate - SwiftDate 4.4.0 - First Swift 4.x compatible version

Published by malcommac about 7 years ago

  • Release Date: 2017-09-14

  • Zipped Version for Swift 4: Download 4.4.0

  • #480 Fix for '-' operator both in Date and DateInRegion classes where the result is correctly reported.

  • #476 Added Russian translation thanks to roor

SwiftDate - SwiftDate 4.3.0 - Latest Swift 3.x release

Published by malcommac about 7 years ago

  • Release Date: 2017-09-14

  • Zipped Version for Swift 3: Download 4.3.0

  • #480 Fix for '-' operator both in Date and DateInRegion classes where the result is correctly reported.

  • #476 Added Russian translation thanks to roor

SwiftDate - SwiftDate 4.1.11

Published by malcommac about 7 years ago

Changes:

SwiftDate - SwiftDate 4.1.10

Published by malcommac about 7 years ago

Changelog:

  • #472 CalendarName now supports RawRepresentable protocol
  • #459 Fixed an issue with translation of Dutch locale
  • #463 colloquial...() functions now fallback to timeComponents... functions when style is set to an abbreviated form (ie to return 1h)
  • #464 Fixed unit tests for ISO8501
  • #461 Fixed translation for Slovak locale
  • #470 Added Azerbaijani Latin locale (thanks to @elshad)
  • #468 Fixed an issue with negative intervals in DateTimeInterval (regression from previous release)
SwiftDate - SwiftDate 4.1.6

Published by malcommac over 7 years ago

New Features

  • #446 Added Hungarian support (thanks to @iKiKi)

Fixes

  • #445 Fixed an issue which causes wrong results while using algebra operations with time components.
SwiftDate - SwiftDate 4.1.2

Published by malcommac over 7 years ago

New Features

  • #423 Added firstWeekday to Region struct. This allows you to easily change the first day of a week on given Region's Calendar object. By default the value is set sunday.

Fixes

  • #425 Fixed an issue with .dates(between:and) which sometimes may report as final date of the output array date greater than specified end date.
  • #417 Fixed an issue with colloquial functions which return wrong results when differences can be expressed in days.
  • #419 Fixed an issue with colloquial functions which return wrong results when differences can be expressed in days.
  • #427 Fixed an issue with .NET date parser (it now accounts timezone correctly and parser did not fail with < 1970 dates)
SwiftDate - SwiftDate 4.1.1

Published by malcommac over 7 years ago

New Features

  • #408 Date and DateInRegion has now two functions to round a date to certain interval (expressed in seconds or minutes). DateInRegion exposes roundAt() which directly modify the date itself; Date, as immutable object, exposes the same feature in roundedAt() function (which return a new Date instances).
  • #414 Added Daylight Saving Time functions: .isDST in DateInRegion (it returns true if the date uses daylight saving time); .DSTOffset in DateInRegion (it returns the value (in seconds) of the daylight saving time offset of the represented date), . nextDSTTransitionDate in DateInRegion (it returns the next daylight saving time transition after currently represented date when expressed); nextDSTTransitionDate() func in Date (it returns the next dst transition date when receiver is expressed in a particular timezone); DSTOffset() func in Date (it returns the offset of daylight saving time when receiver is expressed in a particular timezone); isDST() func in Date (it returns if receiver date uses daylight saving time when expressed in a particular timezone).

Fixes

  • #410 Several fixes while parsing less common ISO8601 formats (weeks only w/wo implicit year/month/day).
  • #411 Parsing an ISO8601 string now results in a DateInRegion which contains the correct timezone defined (Date instances are now converted automatically to be time-independent).
  • #412 Updated Unit Tests to become compatible with the new APIs changes. All tests now passes.
  • #409 Fixed an issue converting a difference between two dates when its more than 24 hours, but less than 48 hours (incorrectly the colloquial values returns 'yesterday')
  • #413 Single framework target in XCode Project (iOS, macOS, tvOS and watchOS)
SwiftDate - SwiftDate 4.1.0

Published by malcommac over 7 years ago

SwiftDate 4.1.0


New Features

  • #402 Added Greek localization (thanks to @dimmdesign)

  • #399 colloquialSinceNow also allows to set unitsStyle params to specify the type of values you want to print.

  • #400 DateInRegion has a class func named date(formats:fromRegion) which allows parsing a single string with multiple formats (the first one that succeeds returns the instance of the DateInRegion). Also available as String extension (with the same name).

  • #223 ISO8601DateTimeFormatter now recognize the timezone of an ISO string and create a date with the correct value.

  • #407 SwiftDate now can parse ISO8601 strings without specifyng the ISO format; it evaluates the best format automatically. Also the parser faster than the previous built one. Since now .iso8601 parsing format is used only as formatter (from date to string, viceversa any given value is ignored. You are encouraged to use .iso8601Auto instead).

    The following ISO8601 variants are supported:

YYYYMMDD
YYYY-MM-DD
YYYY-MM
YYYY
YY //century 
//Implied century: YY is 00-99
YYMMDD
YY-MM-DD
-YYMM
-YY-MM
-YY
//Implied year
--MMDD
--MM-DD
--MM
//Implied year and month
---DD
//Ordinal dates: DDD is the number of the day in the year (1-366)
YYYYDDD
YYYY-DDD
YYDDD
YY-DDD
-DDD
//Week-based dates: ww is the number of the week, and d is the number (1-7) of the day in the week
yyyyWwwd
yyyy-Www-d
yyyyWww
yyyy-Www
yyWwwd
yy-Www-d
yyWww
yy-Www
//Year of the implied decade
-yWwwd
-y-Www-d
-yWww
-y-Www
//Week and day of implied year
-Wwwd
-Www-d
//Week only of implied year
-Www
//Day only of implied week
-W-d

Fixes

  • #405 Fixed some translation issues in Swedish (thanks to @deville)
  • #368 Deprecated at(unitsWithValues dict: [Calendar.Component : Int]) in Date and DateInRegion and replaced with functional at(values: [Calendar.Component : Int], keep: Set<Calendar.Component>)
  • #392 Fixed an issue with report negative interval when making operation with dates a and b where a - b < 0 iff a < b.
  • #397 Fixed an issue with colloquial func which report wrong difference of 1 day when two dates are distant < 24h but in two different days.
SwiftDate - SwiftDate 4.0.14

Published by malcommac over 7 years ago

#404 Compatibility with Swift 3.1

SwiftDate - SwiftDate 4.0.13

Published by malcommac over 7 years ago

New Features

  • #384 Added Arabic translation (thanks to @abdualrhmanIO)
  • #356 Added a new formatter option called strict. Using strict instead of custom disable heuristics date guessing of the formatter (ie. 1999-02-31 become an invalid date to parse, while with heuristics enabled guessing date 1999-03-03 is returned instead).
SwiftDate - SwiftDate 4.0.12

Published by malcommac over 7 years ago

Fixes

  • #372 Fix for Local.collatorIdentifier (Returns zh-hans-CN and zh-hant-CN)
  • #374 DateZeroBehavior options are now public outside the library

New Features

  • #379 Added Hebrew translation (thanks to @ilandbt)
  • #376 Added Swedish translation (thanks to @traneHead)
  • #381 Replaced useImminentInterval in DateInRegionFormatter with a configurable value called imminentInterval. With a default value of 5 it fallback to just now version. If nil fallback is disabled.
  • #380 DateInRegionFormatter is now able to load custom localization both from LocaleName and custom .strings files (just set the formatter.localization = Localization(path: [PATH_TO_YOUR_STRINGS_FILE])
SwiftDate - 4.0.11

Published by malcommac almost 8 years ago

Fixes

  • #370 Cannot format colloquial date when a time component value is zero and allowedComponents does not contains lower time components (ie. cannot print "today" when set formatter to accept only allowedComponents = [.day] and day difference between dates is zero).
  • #371 DateInRegionFormatter crashes with any non-default .allowedComponents.

New Features

  • #365 Brazilian Portuguese support (thanks to @ipedro)
SwiftDate - SwiftDate 4.0.8

Published by malcommac almost 8 years ago

New Features

  • #214, Added .next(day:) both for Date and DateInRegion to get the next weekday (ie. "next friday from today") after specified date.
  • #310 Added static func .dates(between:and:increment:) both for Date and DateInRegion which allows to enumerate dates between two interval with given increment in term of DateComponents.
  • #337 DateComponents now implements .in() func you can use to express an interval (like using TimeInterval) in terms of other time units (for example let x = 120.seconds.in(.minute) will return 2 minutes).
  • #348 DateComponents can now be merged using && operator. So if you have A = 1.hours, 3.minutes, 2.seconds and B = 1.year, 40.minutes, using let C = A && B you will get a new DateComponents instance with: C = 1.year, 1.hours, 43.minutes, 2.seconds.
  • #340, #320 Added Spanish support (thanks to @Sepho and @adrimarti).
  • #323, Added Korean support (thanks to @KisukPark).
  • #328, Added Slovak support (thanks to @beretis).
  • #329, Added Danish support (thanks to @emilpedersen).
  • #331, Added Czech support (thanks to @rbukovansky).
  • #187, Added .startWeek (get the first day of the sender's week) and .endWeek (get the last day of the sender's week) both for Date and DateInRegion

Fixes:

  • #344 .inDateDefaultRegion() is also used as standard value for region in .add() function of the Date object
  • #339 Fixed an issue with reverse interval fatal error when subtracting two dates
  • #317 Fixed an issue with language transations. Now all translations are specified in term of language+region settings (ie. en-US and not only en). All translation files were updated to reflect this new behaviour.
  • #346 Workaround to fix a rounding problem when comparing two Date or DateInRegion in terms of .nanosecond granularity. Now the comparision result is correct.
  • #315, Fixed an issue with Date().add(components:) and daylight saving dates.
  • #319, Added missing translation for german loc (thanks to @jaweinkauff)
SwiftDate - SwiftDate 4.0.7

Published by malcommac almost 8 years ago

  • #306 Fixed a date ordering issue with time interval
  • #308 Added singular component for .year,.month,.day,.hour,.minute,.second time components
  • #309 Added Traditional Chinese support (thanks to @rynecheow)
  • #314 Restored French translation strings