Fancy date ranges for Moment.js with comprehensive range operations and iteration capabilities
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Create date ranges from various input formats including dates, moments, arrays, and ISO 8601 interval strings with full timezone support.
Creates a DateRange from various input formats.
/**
* Create a date range from start and end dates/moments
* @param start - Start date or moment
* @param end - End date or moment
* @returns DateRange instance
*/
function moment.range(start: Date | Moment, end: Date | Moment): DateRange;
/**
* Create a date range from an array of two dates/moments
* @param range - Array containing start and end dates/moments
* @returns DateRange instance
*/
function moment.range(range: [Date | Moment, Date | Moment]): DateRange;
/**
* Create a date range from an ISO 8601 interval string
* @param isoString - ISO 8601 interval string (e.g., "2024-01-01/2024-01-31")
* @returns DateRange instance
*/
function moment.range(isoString: string): DateRange;
/**
* Create a range for a specific time unit relative to current moment
* @param interval - Time unit (year, month, week, day, hour, minute, second)
* @returns DateRange spanning the entire interval
*/
function moment.range(interval: string): DateRange;Usage Examples:
import Moment from 'moment';
import { extendMoment } from 'moment-range';
const moment = extendMoment(Moment);
// From dates
const range1 = moment.range(new Date('2024-01-01'), new Date('2024-01-31'));
// From moments
const start = moment('2024-01-01');
const end = moment('2024-01-31');
const range2 = moment.range(start, end);
// From array
const range3 = moment.range([start, end]);
// From ISO string
const range4 = moment.range('2024-01-01/2024-01-31');
// For current year
const thisYear = moment().range('year');Creates a range from a base date by adding a specified interval.
/**
* Create a date range between a date and a specified interval from that date
* @param interval - The type of interval (year, month, day, etc.)
* @param count - The number of intervals (positive or negative, default: 1)
* @param date - The base date (default: current moment)
* @returns DateRange spanning from date to date + (count * interval)
*/
function moment.rangeFromInterval(
interval: string,
count?: number,
date?: Date | Moment
): DateRange;Usage Examples:
// Next 7 days from now
const nextWeek = moment.rangeFromInterval('day', 7);
// Previous 3 months from specific date
const pastQuarter = moment.rangeFromInterval('month', -3, moment('2024-06-01'));
// Next hour from now
const nextHour = moment.rangeFromInterval('hour', 1);Creates a range from an ISO 8601 interval string with timezone preservation.
/**
* Create a date range from ISO 8601 interval string preserving timezones
* Uses moment.parseZone to maintain timezone information on both endpoints
* @param isoTimeInterval - ISO 8601 interval string with timezone info
* @returns DateRange with timezone-aware start and end moments
*/
function moment.rangeFromISOString(isoTimeInterval: string): DateRange;Usage Examples:
// With timezone information preserved
const tzRange = moment.rangeFromISOString('2024-01-01T00:00:00-05:00/2024-01-31T23:59:59-05:00');
// Works with different timezone formats
const utcRange = moment.rangeFromISOString('2024-01-01T00:00:00Z/2024-01-31T23:59:59Z');Direct constructor for creating DateRange instances.
/**
* DateRange constructor with flexible input handling
* @param start - Start date/moment, array of dates, ISO string, or undefined for infinite start
* @param end - End date/moment, or undefined for infinite end (optional if start is array or ISO string)
*/
class DateRange {
constructor(start: Date | Moment, end: Date | Moment);
constructor(range: [Date | Moment, Date | Moment]);
constructor(isoString: string);
constructor(); // Creates infinite range (start: -∞, end: +∞)
constructor(start: Date | Moment | null, end: Date | Moment | null); // Null creates open-ended ranges
}Usage Examples:
import { DateRange } from 'moment-range';
// Direct construction
const range1 = new DateRange(moment('2024-01-01'), moment('2024-01-31'));
// From array
const range2 = new DateRange([new Date('2024-01-01'), new Date('2024-01-31')]);
// From ISO string
const range3 = new DateRange('2024-01-01/2024-01-31');
// Infinite range (open-ended)
const infiniteRange = new DateRange();
// Open-ended ranges with null boundaries
const fromStart = new DateRange(null, moment('2024-01-31')); // Everything before date
const toEnd = new DateRange(moment('2024-01-01'), null); // Everything after dateCreate ranges with infinite start or end points for unbounded queries.
// Range with no start (everything before end date)
const beforeDate = moment.range(null, '2024-01-31');
// Range with no end (everything after start date)
const afterDate = moment.range('2024-01-01', null);Usage Examples:
// Everything before 2024
const beforeYear = moment.range(null, '2024-01-01');
// Everything after today
const afterToday = moment.range(moment(), null);
// Check if date is in unbounded range
const testDate = moment('2023-06-15');
console.log(testDate.within(beforeYear)); // trueinterface DateRange {
start: Moment; // Start moment of range (may be -Infinity for open start)
end: Moment; // End moment of range (may be +Infinity for open end)
}
// Valid interval strings for range creation
type IntervalUnit = 'year' | 'quarter' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second';