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