datevolt 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +97 -96
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -4,26 +4,30 @@
4
4
  [![npm downloads](https://img.shields.io/npm/dm/datevolt.svg?style=flat-square)](https://www.npmjs.com/package/datevolt)
5
5
  [![license](https://img.shields.io/npm/l/datevolt.svg?style=flat-square)](LICENSE)
6
6
  [![zero dependencies](https://img.shields.io/badge/dependencies-0-brightgreen?style=flat-square)](package.json)
7
+ [![React Native](https://img.shields.io/badge/React%20Native-compatible-blue?style=flat-square)](https://reactnative.dev)
7
8
 
8
- A lightweight, zero-dependency JavaScript date library that works just like moment.js — but without the bloat. Built specifically with React Native CLI in mind (Android + iOS, Hermes & JSC), though it works perfectly fine in Node.js and browsers too.
9
-
10
- I built this because moment.js is massive (~72 KB gzipped) and causes issues in some React Native setups. datevolt gives you the same familiar API at a fraction of the size.
9
+ A complete, lightweight, zero-dependency JavaScript date library with a familiar chainable API. Built with React Native CLI in mind (Android + iOS, Hermes & JSC), and works just as well in Node.js and browsers.
11
10
 
12
11
  ---
13
12
 
14
13
  ## Why datevolt?
15
14
 
16
- | | moment.js | datevolt |
17
- |---|---|---|
18
- | Size (gzipped) | ~72 KB | ~8 KB |
19
- | Size (minified) | ~290 KB | ~25 KB |
20
- | Dependencies | 0 | 0 |
21
- | Tree-shakeable | | |
22
- | Immutable `.clone()` | | ✅ |
23
- | React Native safe | ⚠️ | ✅ |
24
- | moment.js API | ✅ | ✅ |
15
+ Most date libraries are either too heavy for mobile apps or too minimal to be useful. datevolt hits the middle ground — full-featured, tiny footprint, no dependencies, and no native modules.
16
+
17
+ | Feature | datevolt |
18
+ |---|---|
19
+ | Size (gzipped) | ~8 KB |
20
+ | Size (minified) | ~25 KB |
21
+ | Dependencies | 0 |
22
+ | Tree-shakeable | ✅ |
23
+ | Immutable `.clone()` | ✅ |
24
+ | React Native (Hermes + JSC) | ✅ |
25
+ | Node.js | ✅ |
26
+ | Browser | ✅ |
27
+ | Chainable API | ✅ |
28
+ | Built-in i18n | ✅ |
25
29
 
26
- No `Intl` dependency, no native modules, no config needed — just install and use.
30
+ No `Intl` dependency. No native modules. No configuration. Just install and use.
27
31
 
28
32
  ---
29
33
 
@@ -46,19 +50,19 @@ const datevolt = require('datevolt');
46
50
  // or
47
51
  import datevolt from 'datevolt';
48
52
 
49
- datevolt().format('YYYY-MM-DD HH:mm:ss') // "2024-06-15 14:30:00"
50
- datevolt('2024-06-15').format('dddd, MMMM D, YYYY') // "Saturday, June 15, 2024"
51
- datevolt().add(7, 'days').format('DD MMM YYYY') // "22 Jun 2024"
52
- datevolt('2024-01-01').fromNow() // "6 months ago"
53
- datevolt('2024-06-15').diff('2024-01-01', 'days') // 166
54
- datevolt('2024-06-15').isBefore('2024-12-31') // true
53
+ datevolt().format('YYYY-MM-DD HH:mm:ss') // "2024-06-15 14:30:00"
54
+ datevolt('2024-06-15').format('dddd, MMMM D, YYYY') // "Saturday, June 15, 2024"
55
+ datevolt().add(7, 'days').format('DD MMM YYYY') // "22 Jun 2024"
56
+ datevolt('2024-01-01').fromNow() // "6 months ago"
57
+ datevolt('2024-06-15').diff('2024-01-01', 'days') // 166
58
+ datevolt('2024-06-15').isBefore('2024-12-31') // true
55
59
  ```
56
60
 
57
61
  ---
58
62
 
59
63
  ## React Native
60
64
 
61
- No special setup needed. Works with both Hermes and JSC engines.
65
+ Works out of the box no extra setup, no metro config changes needed.
62
66
 
63
67
  ```js
64
68
  import datevolt from 'datevolt';
@@ -69,6 +73,8 @@ const DateDisplay = () => {
69
73
  };
70
74
  ```
71
75
 
76
+ Tested on Android (Hermes) and iOS (JSC). Pure JavaScript — no native bridge needed.
77
+
72
78
  ---
73
79
 
74
80
  ## API Reference
@@ -76,23 +82,23 @@ const DateDisplay = () => {
76
82
  ### Parsing
77
83
 
78
84
  ```js
79
- datevolt() // now
80
- datevolt('2024-06-15') // ISO date (local midnight)
81
- datevolt('2024-06-15T10:30:00') // ISO datetime
82
- datevolt('2024-06-15T10:30:00Z') // UTC
83
- datevolt('2024-06-15T10:30:00+05:30') // with offset
84
- datevolt('15/06/2024', 'DD/MM/YYYY') // custom format
85
- datevolt('15/06/2024', ['DD/MM/YYYY', 'YYYY-MM-DD']) // multiple formats
86
- datevolt([2024, 5, 15]) // array [Y, M(0-based), D]
87
- datevolt([2024, 5, 15, 14, 30, 0, 0]) // array with time
88
- datevolt({ year: 2024, month: 5, day: 15 }) // object
89
- datevolt(1718438400000) // unix milliseconds
90
- datevolt.unix(1718438400) // unix seconds
91
- datevolt.utc('2024-06-15T10:30:00') // UTC mode
85
+ datevolt() // now
86
+ datevolt('2024-06-15') // ISO date (local midnight)
87
+ datevolt('2024-06-15T10:30:00') // ISO datetime
88
+ datevolt('2024-06-15T10:30:00Z') // UTC
89
+ datevolt('2024-06-15T10:30:00+05:30') // with offset
90
+ datevolt('15/06/2024', 'DD/MM/YYYY') // custom format
91
+ datevolt('15/06/2024', ['DD/MM/YYYY', 'YYYY-MM-DD']) // multiple formats
92
+ datevolt([2024, 5, 15]) // array [Y, M(0-based), D]
93
+ datevolt([2024, 5, 15, 14, 30, 0, 0]) // array with time
94
+ datevolt({ year: 2024, month: 5, day: 15 }) // object
95
+ datevolt(1718438400000) // unix milliseconds
96
+ datevolt.unix(1718438400) // unix seconds
97
+ datevolt.utc('2024-06-15T10:30:00') // UTC mode
92
98
 
93
99
  // Validation
94
- datevolt('2024-06-15').isValid() // true
95
- datevolt('not-a-date').isValid() // false
100
+ datevolt('2024-06-15').isValid() // true
101
+ datevolt('not-a-date').isValid() // false
96
102
  ```
97
103
 
98
104
  ---
@@ -102,13 +108,13 @@ datevolt('not-a-date').isValid() // false
102
108
  ```js
103
109
  const d = datevolt('2024-06-15T14:30:45.123');
104
110
 
105
- d.year() // 2024 → d.year(2025)
106
- d.month() // 5 → d.month(0) (0-based)
107
- d.date() // 15 → d.date(1)
108
- d.day() // 6 → d.day(1) (0=Sun, 6=Sat)
109
- d.hour() // 14 → d.hour(9)
110
- d.minute() // 30 → d.minute(0)
111
- d.second() // 45 → d.second(0)
111
+ d.year() // 2024 → d.year(2025)
112
+ d.month() // 5 → d.month(0) (0-based, Jan = 0)
113
+ d.date() // 15 → d.date(1)
114
+ d.day() // 6 → d.day(1) (0 = Sun, 6 = Sat)
115
+ d.hour() // 14 → d.hour(9)
116
+ d.minute() // 30 → d.minute(0)
117
+ d.second() // 45 → d.second(0)
112
118
  d.millisecond() // 123
113
119
 
114
120
  d.quarter() // 2
@@ -116,10 +122,10 @@ d.dayOfYear() // 167
116
122
  d.daysInMonth() // 30
117
123
  d.week() // ISO week number
118
124
  d.isoWeek()
119
- d.isoWeekday() // 1=Mon ... 7=Sun
125
+ d.isoWeekday() // 1 = Mon ... 7 = Sun
120
126
  d.weeksInYear()
121
127
 
122
- // Generic get/set
128
+ // Generic
123
129
  d.get('year') // 2024
124
130
  d.set('year', 2025) // chainable
125
131
  ```
@@ -139,10 +145,10 @@ datevolt().add({ days: 1, hours: 2, minutes: 30 }) // object form
139
145
  datevolt().subtract(1, 'week')
140
146
  datevolt().subtract(3, 'months')
141
147
 
142
- // Chain as much as you want
148
+ // Chainable
143
149
  datevolt('2024-01-01').add(1, 'year').subtract(3, 'months').startOf('month')
144
150
 
145
- // startOf
151
+ // startOf / endOf
146
152
  datevolt().startOf('year') // Jan 1, 00:00:00.000
147
153
  datevolt().startOf('month') // 1st of month, 00:00:00.000
148
154
  datevolt().startOf('week')
@@ -151,9 +157,8 @@ datevolt().startOf('hour')
151
157
  datevolt().startOf('quarter')
152
158
  datevolt().startOf('isoWeek')
153
159
 
154
- // endOf
155
160
  datevolt().endOf('year') // Dec 31, 23:59:59.999
156
- datevolt().endOf('month') // last day of month
161
+ datevolt().endOf('month') // last day, 23:59:59.999
157
162
 
158
163
  datevolt().clone() // immutable copy
159
164
  ```
@@ -175,7 +180,7 @@ datevolt().format('LLL') // "June 15, 2024 2:30 PM"
175
180
  datevolt().format('LLLL') // "Saturday, June 15, 2024 2:30 PM"
176
181
  ```
177
182
 
178
- **Tokens:**
183
+ **Format Tokens**
179
184
 
180
185
  | Token | Output | Description |
181
186
  |-------|--------|-------------|
@@ -206,13 +211,13 @@ datevolt().format('LLLL') // "Saturday, June 15, 2024 2:30 PM
206
211
  ### Relative Time
207
212
 
208
213
  ```js
209
- datevolt('2024-01-01').fromNow() // "6 months ago"
210
- datevolt().add(2, 'hours').fromNow() // "in 2 hours"
211
- datevolt().subtract(3, 'days').fromNow(true) // "3 days" (no suffix)
214
+ datevolt('2024-01-01').fromNow() // "6 months ago"
215
+ datevolt().add(2, 'hours').fromNow() // "in 2 hours"
216
+ datevolt().subtract(3, 'days').fromNow(true) // "3 days" (no suffix)
212
217
 
213
- datevolt('2024-01-01').from('2024-06-15') // "6 months ago"
214
- datevolt().add(5, 'minutes').toNow() // "in 5 minutes"
215
- datevolt('2024-01-01').to('2024-06-15') // "in 6 months"
218
+ datevolt('2024-01-01').from('2024-06-15') // "6 months ago"
219
+ datevolt().add(5, 'minutes').toNow() // "in 5 minutes"
220
+ datevolt('2024-01-01').to('2024-06-15') // "in 6 months"
216
221
  ```
217
222
 
218
223
  ---
@@ -220,11 +225,11 @@ datevolt('2024-01-01').to('2024-06-15') // "in 6 months"
220
225
  ### Calendar
221
226
 
222
227
  ```js
223
- datevolt().calendar() // "Today at 2:30 PM"
224
- datevolt().add(1, 'day').calendar() // "Tomorrow at 2:30 PM"
225
- datevolt().subtract(1, 'day').calendar() // "Yesterday at 2:30 PM"
226
- datevolt().add(3, 'days').calendar() // "Tuesday at 2:30 PM"
227
- datevolt().subtract(7, 'days').calendar()// "06/08/2024"
228
+ datevolt().calendar() // "Today at 2:30 PM"
229
+ datevolt().add(1, 'day').calendar() // "Tomorrow at 2:30 PM"
230
+ datevolt().subtract(1, 'day').calendar() // "Yesterday at 2:30 PM"
231
+ datevolt().add(3, 'days').calendar() // "Tuesday at 2:30 PM"
232
+ datevolt().subtract(7, 'days').calendar() // "06/08/2024"
228
233
  ```
229
234
 
230
235
  ---
@@ -232,11 +237,11 @@ datevolt().subtract(7, 'days').calendar()// "06/08/2024"
232
237
  ### Diff
233
238
 
234
239
  ```js
235
- datevolt('2024-06-15').diff('2024-01-01', 'days') // 166
236
- datevolt('2024-06-15').diff('2024-01-01', 'months') // 5
237
- datevolt('2024-06-15').diff('2020-01-01', 'years') // 4
240
+ datevolt('2024-06-15').diff('2024-01-01', 'days') // 166
241
+ datevolt('2024-06-15').diff('2024-01-01', 'months') // 5
242
+ datevolt('2024-06-15').diff('2020-01-01', 'years') // 4
238
243
  datevolt('2024-06-15T12:00').diff('2024-06-15T10:00', 'hours') // 2
239
- datevolt('2024-06-15').diff('2024-01-01', 'days', true) // 166.xxx (float)
244
+ datevolt('2024-06-15').diff('2024-01-01', 'days', true) // 166.xxx (float)
240
245
  ```
241
246
 
242
247
  ---
@@ -244,12 +249,12 @@ datevolt('2024-06-15').diff('2024-01-01', 'days', true) // 166.xxx (float)
244
249
  ### Query & Comparison
245
250
 
246
251
  ```js
247
- datevolt('2024-01-01').isBefore('2024-06-15') // true
248
- datevolt('2024-06-15').isAfter('2024-01-01') // true
249
- datevolt('2024-06-15T10:00').isSame('2024-06-15T18:00', 'day') // true
250
- datevolt('2024-01-01').isSameOrBefore('2024-01-01') // true
251
- datevolt('2024-06-15').isSameOrAfter('2024-06-15') // true
252
- datevolt('2024-03-15').isBetween('2024-01-01', '2024-12-31') // true
252
+ datevolt('2024-01-01').isBefore('2024-06-15') // true
253
+ datevolt('2024-06-15').isAfter('2024-01-01') // true
254
+ datevolt('2024-06-15T10:00').isSame('2024-06-15T18:00', 'day') // true
255
+ datevolt('2024-01-01').isSameOrBefore('2024-01-01') // true
256
+ datevolt('2024-06-15').isSameOrAfter('2024-06-15') // true
257
+ datevolt('2024-03-15').isBetween('2024-01-01', '2024-12-31') // true
253
258
  datevolt('2024-01-01').isBetween('2024-01-01', '2024-12-31', null, '[]') // inclusive
254
259
 
255
260
  datevolt('2024-06-15').isLeapYear() // true
@@ -265,14 +270,14 @@ datevolt.isDate(new Date()) // true
265
270
  ```js
266
271
  // UTC mode
267
272
  datevolt.utc('2024-06-15T10:30:00').format('HH:mm') // always UTC hours
268
- datevolt.utc().isUTC() // true
269
- datevolt.utc().local() // switch back to local
273
+ datevolt.utc().isUTC() // true
274
+ datevolt.utc().local() // switch back to local
270
275
 
271
276
  // UTC offset
272
- datevolt().utcOffset() // offset in minutes
273
- datevolt().utcOffset('+05:30') // set by string
274
- datevolt().utcOffset(330) // set by minutes
275
- datevolt().utcOffset(0, true) // keep local time, change offset
277
+ datevolt().utcOffset() // offset in minutes
278
+ datevolt().utcOffset('+05:30') // set by string
279
+ datevolt().utcOffset(330) // set by minutes
280
+ datevolt().utcOffset(0, true) // keep local time, change offset
276
281
  ```
277
282
 
278
283
  ---
@@ -286,7 +291,7 @@ d.asHours() // 48
286
291
  d.asMinutes() // 2880
287
292
 
288
293
  datevolt.duration({ hours: 1, minutes: 30 }).asMinutes() // 90
289
- datevolt.duration('P1Y2M3DT4H5M6S') // ISO 8601 string
294
+ datevolt.duration('P1Y2M3DT4H5M6S') // ISO 8601 duration
290
295
 
291
296
  datevolt.duration(1, 'day').humanize() // "a day"
292
297
  datevolt.duration(1, 'day').humanize(true) // "in a day"
@@ -296,7 +301,7 @@ d.add(1, 'hour').subtract(30, 'minutes')
296
301
  d.clone()
297
302
  d.toISOString() // "P2D"
298
303
 
299
- // Use duration directly in add()
304
+ // Pass duration directly into add()
300
305
  datevolt().add(datevolt.duration(2, 'hours'))
301
306
 
302
307
  datevolt.isDuration(d) // true
@@ -309,24 +314,24 @@ datevolt.isDuration(d) // true
309
314
  7 built-in locales: `en`, `hi`, `es`, `fr`, `de`, `ar`, `ja`
310
315
 
311
316
  ```js
312
- // Global locale
317
+ // Set global locale
313
318
  datevolt.locale('hi');
314
319
  datevolt().format('MMMM D, YYYY'); // "जून 15, 2024"
315
320
 
316
- // Per-instance
321
+ // Per-instance locale
317
322
  datevolt().locale('es').format('MMMM'); // "junio"
318
323
 
319
- // List available
324
+ // List all available
320
325
  datevolt.locales(); // ['en', 'hi', 'es', 'fr', 'de', 'ar', 'ja']
321
326
 
322
- // Custom locale
327
+ // Define a custom locale
323
328
  datevolt.defineLocale('mr', {
324
329
  name: 'mr',
325
330
  months: ['जानेवारी', 'फेब्रुवारी', 'मार्च', ...],
326
331
  // ...
327
332
  });
328
333
 
329
- // Locale data
334
+ // Access locale data
330
335
  datevolt.localeData('en').months
331
336
  datevolt().localeData()
332
337
  ```
@@ -336,28 +341,24 @@ datevolt().localeData()
336
341
  ### Static Methods
337
342
 
338
343
  ```js
339
- datevolt.max(a, b, c) // returns latest
340
- datevolt.min(a, b, c) // returns earliest
341
- datevolt.invalid() // invalid datevolt instance
344
+ datevolt.max(a, b, c) // returns the latest date
345
+ datevolt.min(a, b, c) // returns the earliest date
346
+ datevolt.invalid() // returns an invalid datevolt instance
342
347
  datevolt.normalizeUnits('y') // 'year'
343
348
  datevolt.version // '1.0.1'
344
- datevolt.fn // prototype (for plugins)
349
+ datevolt.fn // prototype — use for plugins
345
350
  ```
346
351
 
347
352
  ---
348
353
 
349
- ## Migrating from moment.js
354
+ ## Familiar API
350
355
 
351
- Drop-in replacement in most casesjust change the import:
356
+ If you've used any chainable date library before, datevolt will feel right at home. The API follows widely adopted conventions in the JavaScript date ecosystem parse, format, add, subtract, diff, fromNow, and more — all chainable and consistent.
352
357
 
353
358
  ```js
354
- // Before
355
- const moment = require('moment');
356
- moment().format('YYYY-MM-DD');
357
-
358
- // After
359
- const datevolt = require('datevolt');
360
- datevolt().format('YYYY-MM-DD');
359
+ // Switching from another date library? It's usually just a one-line change:
360
+ // const datevolt = require('datevolt');
361
+ // Then use it the same way you always have.
361
362
  ```
362
363
 
363
364
  ---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datevolt",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "A complete, lightweight, zero-dependency date library with a moment.js-compatible API. Built for React Native CLI (Android & iOS), Node.js, and browsers.",
5
5
  "main": "src/index.js",
6
6
  "react-native": "src/index.js",