datevolt 1.0.1 → 1.0.3
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.
- package/README.md +191 -163
- package/package.json +2 -2
- package/src/duration.js +0 -188
- package/src/locale.js +0 -179
- package/src/parse.js +0 -335
- package/src/tempox.js +0 -456
package/README.md
CHANGED
|
@@ -1,48 +1,72 @@
|
|
|
1
1
|
# datevolt
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/datevolt)
|
|
4
|
-
[](https://www.npmjs.com/package/datevolt)
|
|
4
|
+
[](https://www.npmjs.com/package/datevolt)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](package.json)
|
|
5
7
|
|
|
6
|
-
|
|
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.
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
- 📦 **Zero dependencies** — no node_modules bloat
|
|
10
|
-
- 🔗 **moment.js-style API** — `parse`, `format`, `add/subtract`, `diff`, `fromNow`, `calendar`, `duration`, `locale`
|
|
11
|
-
- 🌍 **Timezone & UTC support** — `utc()`, `utcOffset()`, `isDST()`
|
|
12
|
-
- 🗓 **Built-in locales**: `en`, `hi`, `es`, `fr`, `de`, `ar`, `ja` — extend with `defineLocale()`
|
|
13
|
-
- 📱 **React Native ready** — pure JS Date math, no `Intl` dependency, Metro bundler compatible
|
|
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.
|
|
14
11
|
|
|
15
12
|
---
|
|
16
13
|
|
|
17
|
-
##
|
|
14
|
+
## Why datevolt?
|
|
15
|
+
|
|
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 | ✅ | ✅ |
|
|
25
|
+
|
|
26
|
+
No `Intl` dependency, no native modules, no config needed — just install and use.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Installation
|
|
18
31
|
|
|
19
32
|
```bash
|
|
33
|
+
# npm
|
|
20
34
|
npm install datevolt
|
|
35
|
+
|
|
36
|
+
# yarn
|
|
37
|
+
yarn add datevolt
|
|
21
38
|
```
|
|
22
39
|
|
|
40
|
+
---
|
|
41
|
+
|
|
23
42
|
## Quick Start
|
|
24
43
|
|
|
25
44
|
```js
|
|
26
45
|
const datevolt = require('datevolt');
|
|
46
|
+
// or
|
|
47
|
+
import datevolt from 'datevolt';
|
|
48
|
+
|
|
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
|
|
55
|
+
```
|
|
27
56
|
|
|
28
|
-
|
|
29
|
-
datevolt().format('YYYY-MM-DD HH:mm:ss');
|
|
30
|
-
|
|
31
|
-
// Parse ISO string
|
|
32
|
-
datevolt('2024-06-15').format('dddd, MMMM D, YYYY'); // "Saturday, June 15, 2024"
|
|
57
|
+
---
|
|
33
58
|
|
|
34
|
-
|
|
35
|
-
datevolt('2024-01-31').add(1, 'month').format('YYYY-MM-DD'); // "2024-02-29"
|
|
59
|
+
## React Native
|
|
36
60
|
|
|
37
|
-
|
|
38
|
-
datevolt('2024-01-01').fromNow(); // "6 months ago"
|
|
39
|
-
datevolt().add(2, 'hours').toNow(); // "in 2 hours"
|
|
61
|
+
No special setup needed. Works with both Hermes and JSC engines.
|
|
40
62
|
|
|
41
|
-
|
|
42
|
-
datevolt
|
|
63
|
+
```js
|
|
64
|
+
import datevolt from 'datevolt';
|
|
43
65
|
|
|
44
|
-
|
|
45
|
-
datevolt(
|
|
66
|
+
const DateDisplay = () => {
|
|
67
|
+
const [today] = React.useState(datevolt().format('LL'));
|
|
68
|
+
return <Text>{today}</Text>; // "June 15, 2024"
|
|
69
|
+
};
|
|
46
70
|
```
|
|
47
71
|
|
|
48
72
|
---
|
|
@@ -52,52 +76,56 @@ datevolt('2024-06-15').isBefore('2024-12-31'); // true
|
|
|
52
76
|
### Parsing
|
|
53
77
|
|
|
54
78
|
```js
|
|
55
|
-
datevolt()
|
|
56
|
-
datevolt('2024-06-15')
|
|
57
|
-
datevolt('2024-06-15T10:30:00')
|
|
58
|
-
datevolt('2024-06-15T10:30:00Z')
|
|
59
|
-
datevolt('2024-06-15T10:30:00+05:30')
|
|
60
|
-
datevolt('15/06/2024', 'DD/MM/YYYY')
|
|
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
|
|
61
85
|
datevolt('15/06/2024', ['DD/MM/YYYY', 'YYYY-MM-DD']) // multiple formats
|
|
62
|
-
datevolt([2024, 5, 15])
|
|
63
|
-
datevolt([2024, 5, 15, 14, 30, 0, 0])
|
|
64
|
-
datevolt({ year:2024, month:5, day:15 })
|
|
65
|
-
datevolt(1718438400000)
|
|
66
|
-
datevolt.unix(1718438400)
|
|
67
|
-
datevolt.utc('2024-06-15T10:30:00')
|
|
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
|
|
68
92
|
|
|
69
93
|
// Validation
|
|
70
|
-
datevolt('2024-06-15').isValid()
|
|
71
|
-
datevolt('not-a-date').isValid()
|
|
94
|
+
datevolt('2024-06-15').isValid() // true
|
|
95
|
+
datevolt('not-a-date').isValid() // false
|
|
72
96
|
```
|
|
73
97
|
|
|
74
|
-
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
### Get & Set
|
|
75
101
|
|
|
76
102
|
```js
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
d.year() // 2024
|
|
80
|
-
d.month() // 5
|
|
81
|
-
d.date() // 15
|
|
82
|
-
d.day() // 6
|
|
83
|
-
d.hour() // 14
|
|
84
|
-
d.minute() // 30
|
|
85
|
-
d.second() // 45
|
|
103
|
+
const d = datevolt('2024-06-15T14:30:45.123');
|
|
104
|
+
|
|
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)
|
|
86
112
|
d.millisecond() // 123
|
|
87
113
|
|
|
88
|
-
d.quarter() // 2
|
|
114
|
+
d.quarter() // 2
|
|
89
115
|
d.dayOfYear() // 167
|
|
90
116
|
d.daysInMonth() // 30
|
|
91
117
|
d.week() // ISO week number
|
|
92
118
|
d.isoWeek()
|
|
93
|
-
d.weeksInYear()
|
|
94
119
|
d.isoWeekday() // 1=Mon ... 7=Sun
|
|
120
|
+
d.weeksInYear()
|
|
95
121
|
|
|
96
|
-
// Generic
|
|
122
|
+
// Generic get/set
|
|
97
123
|
d.get('year') // 2024
|
|
98
124
|
d.set('year', 2025) // chainable
|
|
99
125
|
```
|
|
100
126
|
|
|
127
|
+
---
|
|
128
|
+
|
|
101
129
|
### Manipulate
|
|
102
130
|
|
|
103
131
|
```js
|
|
@@ -106,60 +134,61 @@ datevolt().add(1, 'month')
|
|
|
106
134
|
datevolt().add(2, 'years')
|
|
107
135
|
datevolt().add(3, 'hours')
|
|
108
136
|
datevolt().add(30, 'minutes')
|
|
109
|
-
datevolt().add(
|
|
110
|
-
datevolt().add({ days: 1, hours: 2, minutes: 30 }) // object form
|
|
137
|
+
datevolt().add({ days: 1, hours: 2, minutes: 30 }) // object form
|
|
111
138
|
|
|
112
139
|
datevolt().subtract(1, 'week')
|
|
113
140
|
datevolt().subtract(3, 'months')
|
|
114
141
|
|
|
115
|
-
//
|
|
116
|
-
datevolt('2024-01-01').add(1,'year').subtract(3,'months').startOf('month')
|
|
142
|
+
// Chain as much as you want
|
|
143
|
+
datevolt('2024-01-01').add(1, 'year').subtract(3, 'months').startOf('month')
|
|
117
144
|
|
|
118
|
-
// startOf
|
|
145
|
+
// startOf
|
|
119
146
|
datevolt().startOf('year') // Jan 1, 00:00:00.000
|
|
120
147
|
datevolt().startOf('month') // 1st of month, 00:00:00.000
|
|
121
|
-
datevolt().startOf('week')
|
|
122
|
-
datevolt().startOf('day')
|
|
148
|
+
datevolt().startOf('week')
|
|
149
|
+
datevolt().startOf('day')
|
|
123
150
|
datevolt().startOf('hour')
|
|
124
|
-
datevolt().startOf('minute')
|
|
125
|
-
datevolt().startOf('second')
|
|
126
151
|
datevolt().startOf('quarter')
|
|
127
152
|
datevolt().startOf('isoWeek')
|
|
128
153
|
|
|
154
|
+
// endOf
|
|
129
155
|
datevolt().endOf('year') // Dec 31, 23:59:59.999
|
|
130
|
-
datevolt().endOf('month') // last day
|
|
156
|
+
datevolt().endOf('month') // last day of month
|
|
131
157
|
|
|
132
158
|
datevolt().clone() // immutable copy
|
|
133
159
|
```
|
|
134
160
|
|
|
161
|
+
---
|
|
162
|
+
|
|
135
163
|
### Format
|
|
136
164
|
|
|
137
165
|
```js
|
|
138
|
-
datevolt().format()
|
|
139
|
-
datevolt().format('YYYY-MM-DD')
|
|
140
|
-
datevolt().format('YYYY
|
|
141
|
-
datevolt().format('
|
|
142
|
-
datevolt().format('
|
|
143
|
-
datevolt().format('
|
|
144
|
-
datevolt().format('
|
|
145
|
-
datevolt().format('
|
|
146
|
-
datevolt().format('
|
|
147
|
-
datevolt().format('
|
|
148
|
-
datevolt().format('LLLL') // "Saturday, June 15, 2024 2:30 PM"
|
|
166
|
+
datevolt().format('YYYY-MM-DD') // "2024-06-15"
|
|
167
|
+
datevolt().format('YYYY-MM-DD HH:mm:ss') // "2024-06-15 14:30:45"
|
|
168
|
+
datevolt().format('dddd, MMMM D, YYYY') // "Saturday, June 15, 2024"
|
|
169
|
+
datevolt().format('MMM Do, YYYY') // "Jun 15th, 2024"
|
|
170
|
+
datevolt().format('h:mm A') // "2:30 PM"
|
|
171
|
+
datevolt().format('[Today is] dddd') // "Today is Saturday"
|
|
172
|
+
datevolt().format('L') // "06/15/2024"
|
|
173
|
+
datevolt().format('LL') // "June 15, 2024"
|
|
174
|
+
datevolt().format('LLL') // "June 15, 2024 2:30 PM"
|
|
175
|
+
datevolt().format('LLLL') // "Saturday, June 15, 2024 2:30 PM"
|
|
149
176
|
```
|
|
150
177
|
|
|
178
|
+
**Tokens:**
|
|
179
|
+
|
|
151
180
|
| Token | Output | Description |
|
|
152
181
|
|-------|--------|-------------|
|
|
153
182
|
| `YYYY` | 2024 | Full year |
|
|
154
183
|
| `YY` | 24 | 2-digit year |
|
|
155
|
-
| `MMMM` | June |
|
|
184
|
+
| `MMMM` | June | Full month name |
|
|
156
185
|
| `MMM` | Jun | Short month |
|
|
157
|
-
| `MM` | 06 | Month 2-digit |
|
|
186
|
+
| `MM` | 06 | Month (2-digit) |
|
|
158
187
|
| `M` | 6 | Month |
|
|
159
|
-
| `DD` | 15 | Day 2-digit |
|
|
188
|
+
| `DD` | 15 | Day (2-digit) |
|
|
160
189
|
| `Do` | 15th | Ordinal day |
|
|
161
190
|
| `D` | 15 | Day |
|
|
162
|
-
| `dddd` | Saturday |
|
|
191
|
+
| `dddd` | Saturday | Full weekday |
|
|
163
192
|
| `ddd` | Sat | Short weekday |
|
|
164
193
|
| `HH` | 14 | 24-hour |
|
|
165
194
|
| `h` | 2 | 12-hour |
|
|
@@ -167,173 +196,172 @@ datevolt().format('LLLL') // "Saturday, June 15, 2024 2:30 PM"
|
|
|
167
196
|
| `ss` | 45 | Seconds |
|
|
168
197
|
| `SSS` | 123 | Milliseconds |
|
|
169
198
|
| `A` | PM | AM/PM |
|
|
170
|
-
| `Z` | +05:30 |
|
|
199
|
+
| `Z` | +05:30 | UTC offset |
|
|
171
200
|
| `X` | 1718438400 | Unix seconds |
|
|
172
201
|
| `x` | 1718438400000 | Unix ms |
|
|
173
202
|
| `Q` | 2 | Quarter |
|
|
174
203
|
|
|
204
|
+
---
|
|
205
|
+
|
|
175
206
|
### Relative Time
|
|
176
207
|
|
|
177
208
|
```js
|
|
178
|
-
datevolt('2024-01-01').fromNow()
|
|
179
|
-
datevolt().add(2,'hours').fromNow()
|
|
180
|
-
datevolt().subtract(3,'days').fromNow(true)
|
|
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)
|
|
181
212
|
|
|
182
|
-
datevolt('2024-01-01').from('2024-06-15')
|
|
183
|
-
datevolt().add(5,'minutes').toNow()
|
|
184
|
-
datevolt('2024-01-01').to('2024-06-15')
|
|
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"
|
|
185
216
|
```
|
|
186
217
|
|
|
218
|
+
---
|
|
219
|
+
|
|
187
220
|
### Calendar
|
|
188
221
|
|
|
189
222
|
```js
|
|
190
|
-
datevolt().calendar()
|
|
191
|
-
datevolt().add(1,'day').calendar()
|
|
192
|
-
datevolt().subtract(1,'day').calendar()
|
|
193
|
-
datevolt().add(3,'days').calendar()
|
|
194
|
-
datevolt().subtract(7,'days').calendar()
|
|
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"
|
|
195
228
|
```
|
|
196
229
|
|
|
230
|
+
---
|
|
231
|
+
|
|
197
232
|
### Diff
|
|
198
233
|
|
|
199
234
|
```js
|
|
200
|
-
datevolt('2024-06-15').diff('2024-01-01', 'days')
|
|
201
|
-
datevolt('2024-06-15').diff('2024-01-01', 'months')
|
|
202
|
-
datevolt('2024-06-15').diff('2020-01-01', 'years')
|
|
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
|
|
203
238
|
datevolt('2024-06-15T12:00').diff('2024-06-15T10:00', 'hours') // 2
|
|
204
|
-
datevolt('2024-06-15').diff('2024-01-01', 'days', true)
|
|
239
|
+
datevolt('2024-06-15').diff('2024-01-01', 'days', true) // 166.xxx (float)
|
|
205
240
|
```
|
|
206
241
|
|
|
207
|
-
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
### Query & Comparison
|
|
208
245
|
|
|
209
246
|
```js
|
|
210
|
-
datevolt('2024-01-01').isBefore('2024-06-15')
|
|
211
|
-
datevolt('2024-06-15').isAfter('2024-01-01')
|
|
212
|
-
datevolt('2024-06-15T10:00').isSame('2024-06-15T18:00', 'day')
|
|
213
|
-
datevolt('2024-01-01').isSameOrBefore('2024-01-01')
|
|
214
|
-
datevolt('2024-06-15').isSameOrAfter('2024-06-15')
|
|
215
|
-
datevolt('2024-03-15').isBetween('2024-01-01','2024-12-31')
|
|
216
|
-
datevolt('2024-01-01').isBetween('2024-01-01','2024-12-31',null,'[]') // inclusive
|
|
217
|
-
|
|
218
|
-
datevolt('2024-06-15').isLeapYear()
|
|
219
|
-
datevolt().isDST()
|
|
220
|
-
datevolt.isMoment(datevolt())
|
|
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
|
|
253
|
+
datevolt('2024-01-01').isBetween('2024-01-01', '2024-12-31', null, '[]') // inclusive
|
|
254
|
+
|
|
255
|
+
datevolt('2024-06-15').isLeapYear() // true
|
|
256
|
+
datevolt().isDST() // true/false
|
|
257
|
+
datevolt.isMoment(datevolt()) // true
|
|
221
258
|
datevolt.isDate(new Date()) // true
|
|
222
259
|
```
|
|
223
260
|
|
|
261
|
+
---
|
|
262
|
+
|
|
224
263
|
### UTC & Timezone
|
|
225
264
|
|
|
226
265
|
```js
|
|
227
266
|
// UTC mode
|
|
228
|
-
datevolt.utc('2024-06-15T10:30:00').format('HH:mm')
|
|
267
|
+
datevolt.utc('2024-06-15T10:30:00').format('HH:mm') // always UTC hours
|
|
229
268
|
datevolt.utc().isUTC() // true
|
|
230
|
-
datevolt.utc().local() // switch to local
|
|
269
|
+
datevolt.utc().local() // switch back to local
|
|
231
270
|
|
|
232
271
|
// UTC offset
|
|
233
|
-
datevolt().utcOffset()
|
|
234
|
-
datevolt().utcOffset('+05:30')
|
|
235
|
-
datevolt().utcOffset(330)
|
|
236
|
-
datevolt().utcOffset(0, true)
|
|
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
|
|
237
276
|
```
|
|
238
277
|
|
|
278
|
+
---
|
|
279
|
+
|
|
239
280
|
### Duration
|
|
240
281
|
|
|
241
282
|
```js
|
|
242
|
-
|
|
283
|
+
const d = datevolt.duration(2, 'days');
|
|
243
284
|
d.asDays() // 2
|
|
244
285
|
d.asHours() // 48
|
|
245
286
|
d.asMinutes() // 2880
|
|
246
287
|
|
|
247
|
-
datevolt.duration({ hours: 1, minutes: 30 }).asMinutes()
|
|
248
|
-
datevolt.duration('P1Y2M3DT4H5M6S')
|
|
249
|
-
|
|
250
|
-
datevolt.duration(1,'day').humanize(
|
|
288
|
+
datevolt.duration({ hours: 1, minutes: 30 }).asMinutes() // 90
|
|
289
|
+
datevolt.duration('P1Y2M3DT4H5M6S') // ISO 8601 string
|
|
290
|
+
|
|
291
|
+
datevolt.duration(1, 'day').humanize() // "a day"
|
|
292
|
+
datevolt.duration(1, 'day').humanize(true) // "in a day"
|
|
251
293
|
|
|
252
294
|
d.years() / d.months() / d.days() / d.hours() / d.minutes() / d.seconds()
|
|
253
295
|
d.add(1, 'hour').subtract(30, 'minutes')
|
|
254
296
|
d.clone()
|
|
255
|
-
d.toISOString()
|
|
297
|
+
d.toISOString() // "P2D"
|
|
256
298
|
|
|
257
|
-
//
|
|
258
|
-
datevolt().add(datevolt.duration(2,'hours'))
|
|
299
|
+
// Use duration directly in add()
|
|
300
|
+
datevolt().add(datevolt.duration(2, 'hours'))
|
|
259
301
|
|
|
260
|
-
datevolt.isDuration(d)
|
|
302
|
+
datevolt.isDuration(d) // true
|
|
261
303
|
```
|
|
262
304
|
|
|
305
|
+
---
|
|
306
|
+
|
|
263
307
|
### Locale (i18n)
|
|
264
308
|
|
|
309
|
+
7 built-in locales: `en`, `hi`, `es`, `fr`, `de`, `ar`, `ja`
|
|
310
|
+
|
|
265
311
|
```js
|
|
266
|
-
//
|
|
267
|
-
datevolt.locale('hi');
|
|
268
|
-
datevolt().format('MMMM D, YYYY');
|
|
312
|
+
// Global locale
|
|
313
|
+
datevolt.locale('hi');
|
|
314
|
+
datevolt().format('MMMM D, YYYY'); // "जून 15, 2024"
|
|
269
315
|
|
|
270
|
-
// Per-instance
|
|
271
|
-
datevolt().locale('es').format('MMMM');
|
|
316
|
+
// Per-instance
|
|
317
|
+
datevolt().locale('es').format('MMMM'); // "junio"
|
|
272
318
|
|
|
273
|
-
//
|
|
274
|
-
datevolt.locales();
|
|
319
|
+
// List available
|
|
320
|
+
datevolt.locales(); // ['en', 'hi', 'es', 'fr', 'de', 'ar', 'ja']
|
|
275
321
|
|
|
276
|
-
//
|
|
322
|
+
// Custom locale
|
|
277
323
|
datevolt.defineLocale('mr', {
|
|
278
324
|
name: 'mr',
|
|
279
|
-
months: ['जानेवारी','फेब्रुवारी','मार्च'
|
|
325
|
+
months: ['जानेवारी', 'फेब्रुवारी', 'मार्च', ...],
|
|
280
326
|
// ...
|
|
281
327
|
});
|
|
282
328
|
|
|
283
|
-
//
|
|
329
|
+
// Locale data
|
|
284
330
|
datevolt.localeData('en').months
|
|
285
331
|
datevolt().localeData()
|
|
286
332
|
```
|
|
287
333
|
|
|
334
|
+
---
|
|
335
|
+
|
|
288
336
|
### Static Methods
|
|
289
337
|
|
|
290
338
|
```js
|
|
291
|
-
datevolt.max(a, b, c)
|
|
292
|
-
datevolt.min(a, b, c)
|
|
293
|
-
datevolt.invalid()
|
|
339
|
+
datevolt.max(a, b, c) // returns latest
|
|
340
|
+
datevolt.min(a, b, c) // returns earliest
|
|
341
|
+
datevolt.invalid() // invalid datevolt instance
|
|
294
342
|
datevolt.normalizeUnits('y') // 'year'
|
|
295
|
-
datevolt.version
|
|
296
|
-
datevolt.fn
|
|
343
|
+
datevolt.version // '1.0.1'
|
|
344
|
+
datevolt.fn // prototype (for plugins)
|
|
297
345
|
```
|
|
298
346
|
|
|
299
347
|
---
|
|
300
348
|
|
|
301
|
-
##
|
|
349
|
+
## Migrating from moment.js
|
|
302
350
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
```bash
|
|
306
|
-
npm install datevolt
|
|
307
|
-
```
|
|
351
|
+
Drop-in replacement in most cases — just change the import:
|
|
308
352
|
|
|
309
353
|
```js
|
|
310
|
-
//
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
const datevolt = require('datevolt');
|
|
354
|
+
// Before
|
|
355
|
+
const moment = require('moment');
|
|
356
|
+
moment().format('YYYY-MM-DD');
|
|
314
357
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
};
|
|
358
|
+
// After
|
|
359
|
+
const datevolt = require('datevolt');
|
|
360
|
+
datevolt().format('YYYY-MM-DD');
|
|
319
361
|
```
|
|
320
362
|
|
|
321
363
|
---
|
|
322
364
|
|
|
323
|
-
## Why datevolt over moment?
|
|
324
|
-
|
|
325
|
-
| Feature | moment | datevolt |
|
|
326
|
-
|---------|--------|--------|
|
|
327
|
-
| Size (minified) | ~290 KB | ~25 KB |
|
|
328
|
-
| Size (gzipped) | ~72 KB | ~8 KB |
|
|
329
|
-
| Dependencies | 0 | 0 |
|
|
330
|
-
| Tree-shakeable | ❌ | ✅ |
|
|
331
|
-
| Immutable option | ❌ | ✅ `.clone()` |
|
|
332
|
-
| React Native safe | ⚠️ | ✅ |
|
|
333
|
-
| API compatible | ✅ | ✅ |
|
|
334
|
-
|
|
335
|
-
---
|
|
336
|
-
|
|
337
365
|
## License
|
|
338
366
|
|
|
339
|
-
MIT
|
|
367
|
+
MIT © [shaikh-saqlain](https://github.com/shaikh-saqlain)
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "datevolt",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
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",
|
|
7
7
|
"files": [
|
|
8
|
-
"
|
|
8
|
+
"dist/",
|
|
9
9
|
"README.md",
|
|
10
10
|
"LICENSE"
|
|
11
11
|
],
|