Module ringo/utils/dates
Adds useful functions for working with JavaScript Date objects.
Example
const dates = require("ringo/utils/dates");
const now = new Date(2016, 0, 1);
const y2k = new Date(2000, 0, 1);
dates.after(now, y2k); // --> true
dates.before(now, y2k); // --> false
dates.isLeapYear(y2k); // --> true
dates.weekOfYear(y2k); // --> 52 (1st week starts at 3rd)
dates.yearInCentury(y2k); // --> 0
dates.diff(y2k, now); // --> 5844
dates.diff(y2k, now, "mixed"); // { days: 5844, hours: 0, ... }
Functions
- add (date, delta, unit)
- after (a, b)
- before (a, b)
- checkDate (fullYear, month, day)
- compare (a, b)
- dayOfYear (date)
- daysInFebruary (date)
- daysInMonth (date)
- daysInYear (date)
- diff (a, b, unit)
- firstDayOfWeek (locale)
- format (date, format, locale, timezone)
- fromUTCDate (year, month, date, hour, minute, second, millisecond)
- inPeriod (date, periodStart, periodEnd, periodStartOpen, periodEndOpen)
- isLeapYear (date)
- overlapping (aStart, aEnd, bStart, bEnd)
- parse (str, format, locale, timezone, lenient)
- quarterInFiscalYear (date, fiscalYearStart)
- quarterInYear (date)
- resetDate (date)
- resetTime (date)
- secondOfDay (date)
- toISOString (date, withTime, withTimeZone, withSeconds, withMilliseconds)
- toInstant (date)
- toOffsetDateTime (date)
- weekOfMonth (date, locale)
- weekOfYear (date, locale)
- yearInCentury (date)
add (date, delta, unit)
Adds delta to the given field or reduces it, if delta is negative. If larger fields are effected, they will be changed accordingly.
Example
const d1 = new Date(Date.UTC(2016, 0, 1, 0, 0));
const d2 = dates.add(d1, 1, "hour");
dates.diff(d1, d2, "hours"); // --> 1
Parameters
| Date | date | base date to add or remove time from. |
| Number | delta | amount of time to add (positive delta) or remove (negative delta). |
| String | unit | (optional) field to change. Possible values: |
Returns
| Date | date with the calculated date and time |
after (a, b)
Checks if date a is after date b. This is equals to compare(a, b) > 0
Parameters
| Date | a | first date |
| Date | b | second date |
Returns
| Boolean | true if |
before (a, b)
Checks if date a is before date b. This is equals to compareTo(a, b) < 0
Parameters
| Date | a | first date |
| Date | b | second date |
Returns
| Boolean | true if |
checkDate (fullYear, month, day)
Checks if the date is a valid date.
Example
// 2007 is no leap year, so no 29th February
dates.checkDate(2007, 1, 29); // --> false
Parameters
| Number | fullYear | |
| Number | month | between 0 and 11 |
| Number | day | between 1 and 31 |
Returns
| Boolean | true, if the date is valid, false if not. |
compare (a, b)
Compares the time values of a and b.
Parameters
| Date | a | first date |
| Date | b | second date |
Returns
| Number | -1 if |
dayOfYear (date)
Gets the day of the year for the given date.
Parameters
| Date | date | calculate the day of the year. |
Returns
| Number | day of the year |
daysInFebruary (date)
Gets the number of the days in february.
Parameters
| Date | date | of year to find the number of days in february. |
Returns
| Number | days in the february, 28 or 29, if it's a leap year. |
daysInMonth (date)
Gets the number of the days in the month.
Parameters
| Date | date | to find the maximum number of days. |
Returns
| Number | days in the month, between 28 and 31. |
daysInYear (date)
Gets the number of the days in the year.
Parameters
| Date | date | to find the maximum number of days. |
Returns
| Number | days in the year, 365 or 366, if it's a leap year. |
diff (a, b, unit)
Get the difference between two dates, specified by the unit of time.
Example
const d1 = new Date(Date.UTC(2016, 0, 1, 0, 0));
const d2 = new Date(Date.UTC(2017, 0, 1));
dates.diff(d1, d2, "years"); // --> 1
dates.diff(d1, d2, "year"); // --> 1
dates.diff(d1, d2, "minutes"); // --> 527040
dates.diff(d1, d2, "mixed"); // --> { days: 366, hours: 0, … }
Parameters
| Date | a | first date |
| Date | b | second date |
| String | unit | (optional) of time to return. Possible values: |
Returns
| Number|Object<days, hours, minutes, seconds, milliseconds> | difference between the given dates in the specified unit of time. |
firstDayOfWeek (locale)
Gets the first day of the week.
Parameters
| java.util.Locale | locale | (optional) the locale as java Locale |
Returns
| Number | the first day of the week; 1 = Sunday, 2 = Monday. |
format (date, format, locale, timezone)
Format a Date to a string in a locale-sensitive manner. For details on the format pattern, see java.text.SimpleDateFormat .
Example
const y2k = new Date(Date.UTC(2000, 0, 1));
// "year 2000"
dates.format(y2k, "'year' yyyy");
// "Samstag, Januar 1, '00"
dates.format(y2k, "EEEE, MMMM d, ''yy", "de");
// "1999-12-31"
dates.format(y2k, "yyyy-MM-dd", "de", "GMT-1");
// "2000-01-01 00:00:00 GMT-00:00"
dates.format(y2k, "yyyy-MM-dd HH:mm:ss z", "de", "GMT-0");
// "1999-12-31 14:00:00 GMT-10:00"
dates.format(y2k, "yyyy-MM-dd HH:mm:ss z", "de", "GMT-10");
Parameters
| Date | date | the Date to format |
| String | format | the format pattern |
| String|java.util.Locale | locale | (optional) the locale as java Locale object or lowercase two-letter ISO-639 code (e.g. "en") |
| String|java.util.TimeZone | timezone | (optional) the timezone as java TimeZone object or an abbreviation such as "PST", a full name such as "America/Los_Angeles", or a custom ID such as "GMT-8:00". If the id is not provided, the default timezone is used. If the timezone id is provided but cannot be understood, the "GMT" timezone is used. |
Returns
| String | the formatted Date |
fromUTCDate (year, month, date, hour, minute, second, millisecond)
Create new Date from UTC timestamp.
This is an alternative to new Date(Date.UTC(…));
Parameters
| Number | year | |
| Number | month | |
| Number | date | |
| Number | hour | (optional, default 0) |
| Number | minute | (optional, default 0) |
| Number | second | (optional, default 0) |
| Number | millisecond | (optional, default 0) |
Returns
| Date |
inPeriod (date, periodStart, periodEnd, periodStartOpen, periodEndOpen)
Look if the date is in the period, using periodStart <= date <= periodEnd.
Parameters
| Date | date | to check, if it's in the period |
| Date | periodStart | the period's start |
| Date | periodEnd | the period's end |
| Boolean | periodStartOpen | start point is open - default false. |
| Boolean | periodEndOpen | end point is open - default false. |
Returns
| Boolean | true if the date is in the period, false if not. |
isLeapYear (date)
Checks if the date's year is a leap year.
Parameters
| Date | date | to check year |
Returns
| Boolean | true if the year is a leap year, false if not. |
overlapping (aStart, aEnd, bStart, bEnd)
Look if two periods are overlapping each other.
Parameters
| Date | aStart | first period's start |
| Date | aEnd | first period's end |
| Date | bStart | second period's start |
| Date | bEnd | second period's end |
Returns
| Boolean | true if the periods are overlapping at some point, false if not. |
parse (str, format, locale, timezone, lenient)
Parse a string to a date using date and time patterns from Java's SimpleDateFormat.
If no format is provided, the default follows RFC 3339 for timestamps on the internet.
The parser matches the pattern against the string with lenient parsing: Even if the input is not
strictly in the form of the pattern, but can be parsed with heuristics, then the parse succeeds.
Example
// parses input string as local time:
// Wed Jun 29 2016 12:11:10 GMT+0200 (MESZ)
let pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS";
dates.parse("2016-06-29T12:11:10.001", pattern);
// enforces UTC on the input date string
// Wed Jun 29 2016 14:11:10 GMT+0200 (MESZ)
dates.parse("2016-06-29T12:11:10.001", pattern, "en", "UTC");
// accepting month names in German
dates.parse("29. Juni 2016", "dd. MMM yyyy", "de", "UTC");
// Fri Jan 01 2016 01:00:00 GMT+0100 (MEZ)
dates.parse("2016");
// Sat Aug 06 2016 02:00:00 GMT+0200 (MESZ)
dates.parse("2016-08-06");
// Sun Aug 07 2016 00:04:30 GMT+0200 (MESZ)
dates.parse("2016-08-06T22:04:30Z");
// Sun Aug 07 2016 00:04:30 GMT+0200 (MESZ)
dates.parse("2016-08-06T16:04:30-06");
Parameters
| String | str | The date string. |
| String | format | (optional) a specific format pattern for the parser |
| String|java.util.Locale | locale | (optional) the locale as |
| String|java.util.TimeZone | timezone | (optional) the timezone as java TimeZone object or an abbreviation such as "PST", a full name such as "America/Los_Angeles", or a custom ID such as "GMT-8:00". If the id is not provided, the default timezone is used. If the timezone id is provided but cannot be understood, the "GMT" timezone is used. |
| Boolean | lenient | (optional) disables lenient parsing if set to false. |
Returns
| Date|NaN | a date representing the given string, or |
quarterInFiscalYear (date, fiscalYearStart)
Gets the quarter in the fiscal year.
Example
// Farmers (grassland calendar starts with 1st May)
// returns 4th quarter
dates.quarterInFiscalYear(new Date(2016, 3, 30), new Date(0, 4, 1));
Parameters
| Date | date | to calculate the quarter for. |
| Date | fiscalYearStart | first day in the fiscal year, default is the start of the current year |
Returns
| Number | quarter of the year, between 1 and 4. |
quarterInYear (date)
Gets the quarter in the year.
Parameters
| Date | date | to calculate the quarter for. |
Returns
| Number | quarter of the year, between 1 and 4. |
resetDate (date)
Drops the date values, keeping only hours, minutes, seconds and milliseconds.
Example
const d = new Date(2016, 5, 10, 10, 20, 30);
// Thu Jan 01 1970 10:20:30 GMT+0100 (MEZ)
dates.resetDate(d);
Parameters
| Date | date | to reset |
Returns
| Date | date with the original time values and 1970-01-01 as date. |
resetTime (date)
Resets the time values to 0, keeping only year, month and day.
Example
const d = new Date(2016, 5, 10, 10, 20, 30);
// Fri Jun 10 2016 00:00:00 GMT+0200 (MESZ)
dates.resetTime(d);
Parameters
| Date | date | to reset |
Returns
| Date | date without any time values |
secondOfDay (date)
Gets the second of the day for the given date.
Parameters
| Date | date | calculate the second of the day. |
Returns
| Number | second of the day |
toISOString (date, withTime, withTimeZone, withSeconds, withMilliseconds)
Creates an ISO 8601 compatible string from the date. This is similar to Date.toISOString(), which
only returns an UTC-based string. If you don't need a timezone, Date.toISOString() will be the better
choice. Use this function only if you need to include the timezone offset in your string, or if you need to control
the granularity of the output fields.
Example
// "2018-08-08T17:16:44.926+02:00"
dates.toISOString(new Date(), true, true);
Parameters
| Date | date | to format |
| Boolean | withTime | if true, the string will contain the time, if false only the date. Default is true. |
| Boolean | withTimeZone | if true, the string will be in local time, if false it's in UTC. Default is false. |
| Boolean | withSeconds | if true, the string will contain also the seconds of the date. Default is true. |
| Boolean | withMilliseconds | if true, the string will contain the millisecond part of the date. Default is true. |
Returns
| String | date as ISO 8601 string. |
toInstant (date)
Converts the given date to a java.time.Instant instance. Helps to interact with the
java.time API for dates, times, and durations.
Parameters
| null | date | {Date} the JavaScript Date object to convert |
Returns
| java.time.Instant | instant instance at the given point in time |
See
toOffsetDateTime (date)
Converts the given date to a java.time.OffsetDateTime instance using the date's offset.
Helps to interact with the java.time API for dates, times, and durations.
Parameters
| null | date | {Date} the JavaScript Date object to convert |
Returns
| java.time.OffsetDateTime | time instance with offset representing the given date |
See
weekOfMonth (date, locale)
Gets the week of the month for the given date.
Parameters
| Date | date | calculate the week of the month. |
| java.util.Locale | locale | (optional) the locale as java Locale |
Returns
| Number | week of the month |
weekOfYear (date, locale)
Gets the week of the year for the given date.
Parameters
| Date | date | calculate the week of the year. |
| java.util.Locale | locale | (optional) the locale as java Locale |
Returns
| Number | week of the year |
yearInCentury (date)
Gets the year of the century for the given date.
Example
dates.yearInCentury(new Date(1900, 0, 1)); // --> 0
dates.yearInCentury(new Date(2016, 0, 1)); // --> 16
Parameters
| Date | date | calculate the year of the century. |
Returns
| Number | second of the day |