UNPKG

@davidwells/parse-time

Version:

Parse messy time strings into JavaScript Date objects

84 lines (60 loc) 2.68 kB
# @davidwells/parse-time Parse messy time strings into JavaScript Date objects. ## Installation ```bash npm install @davidwells/parse-time ``` ## Usage ```javascript const { parseTime } = require('@davidwells/parse-time'); // Parse specific dates and times const date1 = parseTime('January 15th 2024 at 3:30pm'); console.log(date1.toISOString()); // 2024-01-15T15:30:00.000Z // Parse relative times const now = new Date('2023-01-01T12:00:00Z'); const date2 = parseTime('in 2 hours', { now }); console.log(date2.toISOString()); // 2023-01-01T14:00:00.000Z // Parse special keywords const date3 = parseTime('today at 5pm', { now }); console.log(date3.toISOString()); // 2023-01-01T17:00:00.000Z // Parse "never" (returns far future date) const never = parseTime('never'); console.log(never.toISOString()); // 9999-12-31T00:00:00.000Z // Parse "now" (returns current time) const currentTime = parseTime('now'); console.log(currentTime.toISOString()); // Current time in ISO format // Parse unix timestamp const timestamp = 1672574400; // 2023-01-01T12:00:00Z const date4 = parseTime(timestamp); console.log(date4.toISOString()); // 2023-01-01T12:00:00.000Z // Parse Date object const dateObj = new Date('2023-05-15T10:30:00Z'); const date5 = parseTime(dateObj); console.log(date5.toISOString()); // 2023-05-15T10:30:00.000Z ``` ## Supported Formats The library supports a wide variety of time formats: - **Specific dates and times**: `January 15th 2024 at 3:30pm`, `Dec 25 2023 midnight`, `July 4 2023 noon` - **Relative times**: `in 2 hours`, `3 days ago`, `next week`, `next month` - **Special keywords**: `today at 5pm`, `yesterday noon`, `tomorrow at midnight` - **Time of day**: `11am`, `11pm`, `12:30am`, `12:30pm` - **Days of the week**: `this friday`, `next monday`, `last tuesday` - **Specific dates**: `oct 22nd 1987`, `3pm oct 22nd 1987`, `the 22nd of october, 1987 at 7pm` - **Holidays**: `4th of july`, `9pm on the 4th of july` - **Relative periods**: `in 12 minutes`, `in 2 hours`, `in 31 hours`, `in 20 hours 40 minutes` - **Decimal periods**: `in 20.2h`, `in 1.5 weeks` - **Longer periods**: `in 5 weeks`, `in 2 years`, `in 2 years and 5 weeks` - **Past periods**: `2 days ago`, `2 days and 6 hours ago`, `1 month ago`, `14 days ago` - **ISO format**: `2015-10-31`, `2015-10-31 20:30`, `2015-10-31 8:30pm` ## Options The `parseTime` function accepts an options object as its second parameter: ```javascript const options = { now: new Date() // Reference date for relative time calculations } const date = parseTime('tomorrow at noon', options) ``` ## About Fork of https://github.com/substack/parse-messy-time/blob/master/index.js ## License MIT