local_date 0.1.0+1 local_date: ^0.1.0+1 copied to clipboard
The library for representation of local date an date of birth in the Gregorian calendar (ISO 8601).
This package provides a library for representing local dates that are independent of the time zone.
A date of birth represented as a special case of local date with ability to determine the age.
Features #
- Representation of local date (see
LocalDate
API):- Creation from
DateTime
; - Conversion to
DateTime
; - Generic API for implementation of different formatting;
- Generic API for implementation of different format parsing;
- Support of formatting/parsing of ISO8601 representation of date;
- Comparison of local dates.
- Creation from
- Representation of a date of birth as a special case of local date (see
DateOfBirth
API):- Calculation of the age on the given date with handling of leap date of birth;
- Determination of a birthday date in the specified year with handling of leap date of birth.
Getting started #
-
Install the package as a dependency:
dart pub add local_date
-
Make the import:
import 'package:local_date/local_date.dart';
Usage #
Parsing / formatting #
Parse ISO 8601 string representation:
final date = LocalDate.parse('2023-11-15', parser: ISO8610Format());
Format as ISO 8601 string:
final date = LocalDate.of(2023, 11, 15);
assert(date.formattedBy(ISO8601Format()) == '2023-11-15');
Feel free to implement DateFormatter
and DateParser
generic interfaces
for custom representations.
Working with dates of birth #
Interpretation of the date of birth is not so straightforward as most of us used to think about.
One of the most widespread mistake is a wrong interpretation of leap dates of birth. If a person has date of birth on February 29th, the birthday in a non-leap year must be February 28th, not March 1st.
Fortunately, this library encapsulates correct logic inside DateOfBirth
.
Let's see the example:
final leapDateOfBirth = DateOfBirth.of(2000, 2, 29);
// Age will be incremented on since February 28 in a non-leap lear:
assert(leapDateOfBirth.calculateAgeAsOnDate(LocalDate.of(2003, 2, 28)) == 3);
// Age will be incremented on since February 29 in a leap lear:
assert(leapDateOfBirth.calculateAgeAsOnDate(LocalDate.of(2004, 2, 28)) == 3);
assert(leapDateOfBirth.calculateAgeAsOnDate(LocalDate.of(2004, 2, 29)) == 3);
assert(leapDateOfBirth.calculateAgeAsOnDate(LocalDate.of(2004, 12, 31)) == 3);
Additional information #
Limitations #
This implementation works with the Gregorian calendar only and limits set of years to the range from 0 to 9999. This range covers the most of the enterprise related issues.