I find the js Date object somewhat cumbersome, it's often easier just to work with milliseconds and convert to the required format when presenting to the user. Here's a small lib that does just that! It's simple, flexible, and functional.
https://github.com/myleftshoe/msdate
Examples
Simple
import { now, today, days, weeks, years, toDate } from '@mls44/msdate'
now
1592692591560
today
1592661600000
fromDate(new Date())
1592692591566
toDate(today)
2020-06-20T14:00:00.000Z
toDate(today + 1 * days)
2020-06-21T14:00:00.000Z
toDate(now + 1 * days)
2020-06-21T22:36:31.560Z
toDate(today + 4 * weeks)
2020-07-18T14:00:00.000Z
toDate(today + 10 * years)
2030-06-21T02:00:00.000Z
Ranges
import { arrayOf, days, today, toDate } from '@mls44/msdate'
arrayOf(days, 7).from(today)
[
1592575200000,
1592661600000,
1592748000000,
1592834400000,
1592920800000,
1593007200000,
1593093600000
]
arrayOf(days, 7, toDate).from(today)
[
2020-06-19T14:00:00.000Z,
2020-06-20T14:00:00.000Z,
2020-06-21T14:00:00.000Z,
2020-06-22T14:00:00.000Z,
2020-06-23T14:00:00.000Z,
2020-06-24T14:00:00.000Z,
2020-06-25T14:00:00.000Z
]
arrayOf(days, 7, { weekday: 'long' }).from(today)
[
'Saturday',
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday'
]
// Or use between:
arrayOf(days, { weekday: 'long' }).between(today, today + days * 7)
[
'Saturday',
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday'
]
In the above examples, you need to import days
. Alternatively you can call arrayOf
like this:
arrayOf('days', 7)
arrayOf({ days: 7})
Formatting
msdate uses Intl.DateTimeFormat. Provide an options object as per the spec to format
.
arrayOf
also accepts the same object (or even a function like toDate
) as an optional second argument (see above examples).
import { now, today, toDate, format } from '@mls44/msdate'
format(now, toDate)
2020-06-20T23:20:27.448Z
format(now, { weekday: 'long' })
Sunday
Functional
toDate
, fromDate
, and format
can be used functionally, e.g. [...].map(toDate)
.
import { now, today, arrayOf, days, toDate, fromDate, format } from '@mls44/msdate'
arrayOf(days, 7).from(today).map(toDate)
[
2020-06-20T14:00:00.000Z,
2020-06-21T14:00:00.000Z,
2020-06-22T14:00:00.000Z,
2020-06-23T14:00:00.000Z,
2020-06-24T14:00:00.000Z,
2020-06-25T14:00:00.000Z,
2020-06-26T14:00:00.000Z
]
arrayOf(days, 7).from(today).map(format({ weekday: 'long' }))
[
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday'
]
[
new Date('2020-06-19T14:00:00.000Z'),
new Date('2020-06-20T14:00:00.000Z'),
new Date('2020-06-21T14:00:00.000Z'),
new Date('2020-06-22T14:00:00.000Z'),
new Date('2020-06-23T14:00:00.000Z'),
new Date('2020-06-24T14:00:00.000Z'),
new Date('2020-06-25T14:00:00.000Z')
].map(fromDate)
[
1592575200000,
1592661600000,
1592748000000,
1592834400000,
1592920800000,
1593007200000,
1593093600000
]
It's a small lib that meets a specific requirement rather than a swiss army knife.
That's it, thanks for reading!
Top comments (0)
Some comments have been hidden by the post's author - find out more