@alexstukovnikov/oz-time 1.0.0 → 1.0.2
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 +70 -251
- package/package.json +45 -48
- package/src/core/core.js +509 -0
- package/src/core/factory.js +194 -0
- package/src/index.js +22 -0
- package/src/modules/arithmetic.js +100 -0
- package/src/modules/compare.js +197 -0
- package/src/modules/duration.js +165 -0
- package/src/modules/format.js +162 -0
- package/src/modules/interval.js +190 -0
- package/src/modules/timezone.js +112 -0
- package/src/utils/calendar.js +277 -0
- package/src/utils/units.js +135 -0
- package/dist/oz-time.cjs +0 -1
- package/dist/oz-time.esm.js +0 -426
package/README.md
CHANGED
|
@@ -4,7 +4,8 @@ JavaScript-библиотека для работы с датой и време
|
|
|
4
4
|
|
|
5
5
|
`OzTime` предоставляет неизменяемые объекты времени, фабричные функции создания экземпляров, арифметику по фиксированным и календарным единицам, сравнение, форматирование, работу с часовыми поясами, интервалы и длительности.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
- Документация API: [AlexStukovnikov.github.io/oz-time](https://AlexStukovnikov.github.io/oz-time/)
|
|
8
|
+
- Пакет npm: [`@alexstukovnikov/oz-time`](https://www.npmjs.com/package/@alexstukovnikov/oz-time)
|
|
8
9
|
|
|
9
10
|
## Содержание
|
|
10
11
|
|
|
@@ -12,20 +13,16 @@ JavaScript-библиотека для работы с датой и време
|
|
|
12
13
|
- [Возможности](#возможности)
|
|
13
14
|
- [Установка](#установка)
|
|
14
15
|
- [Быстрый старт](#быстрый-старт)
|
|
15
|
-
- [
|
|
16
|
+
- [Основные сценарии](#основные-сценарии)
|
|
16
17
|
- [Создание экземпляров](#создание-экземпляров)
|
|
17
18
|
- [Арифметика](#арифметика)
|
|
18
19
|
- [Сравнение](#сравнение)
|
|
19
20
|
- [Форматирование](#форматирование)
|
|
20
21
|
- [Часовые пояса](#часовые-пояса)
|
|
21
|
-
- [Интервалы](
|
|
22
|
-
- [Длительности](#длительности)
|
|
22
|
+
- [Интервалы и длительности](#интервалы-и-длительности)
|
|
23
23
|
- [Поддерживаемые единицы времени](#поддерживаемые-единицы-времени)
|
|
24
24
|
- [Токены форматирования](#токены-форматирования)
|
|
25
|
-
- [Публичный API](#публичный-api)
|
|
26
25
|
- [FAQ](#faq)
|
|
27
|
-
- [Разработка](#разработка)
|
|
28
|
-
- [Генерация документации](#генерация-документации)
|
|
29
26
|
- [Ограничения и особенности](#ограничения-и-особенности)
|
|
30
27
|
- [Лицензия](#лицензия)
|
|
31
28
|
|
|
@@ -50,48 +47,21 @@ JavaScript-библиотека для работы с датой и време
|
|
|
50
47
|
## Возможности
|
|
51
48
|
|
|
52
49
|
- Неизменяемые экземпляры `OzTime`
|
|
53
|
-
- Фабричные функции:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
- `fromDate`
|
|
57
|
-
- `fromISO`
|
|
58
|
-
- `fromComponents`
|
|
59
|
-
- Арифметика по времени:
|
|
60
|
-
- `add`
|
|
61
|
-
- `subtract`
|
|
62
|
-
- Сравнение:
|
|
63
|
-
- `isSame`
|
|
64
|
-
- `isBefore`
|
|
65
|
-
- `isAfter`
|
|
66
|
-
- `isBetween`
|
|
50
|
+
- Фабричные функции: `now`, `fromTimestamp`, `fromDate`, `fromISO`, `fromComponents`
|
|
51
|
+
- Арифметика по времени: `add`, `subtract`
|
|
52
|
+
- Сравнение: `isSame`, `isBefore`, `isAfter`, `isBetween`
|
|
67
53
|
- Форматирование по шаблону
|
|
68
|
-
- Работа с часовыми поясами:
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
-
|
|
72
|
-
- `Interval`
|
|
73
|
-
- `interval`
|
|
74
|
-
- Длительности:
|
|
75
|
-
- `Duration`
|
|
76
|
-
- `duration`
|
|
77
|
-
- Календарные утилиты:
|
|
78
|
-
- `isLeapYear`
|
|
79
|
-
- `daysInMonth`
|
|
54
|
+
- Работа с часовыми поясами: `setTimezone`, `getTimezoneOffset`
|
|
55
|
+
- Интервалы: `Interval`, `interval`
|
|
56
|
+
- Длительности: `Duration`, `duration`
|
|
57
|
+
- Календарные утилиты: `isLeapYear`, `daysInMonth`
|
|
80
58
|
|
|
81
59
|
## Установка
|
|
82
60
|
|
|
83
|
-
### Как зависимость проекта
|
|
84
|
-
|
|
85
61
|
```bash
|
|
86
62
|
npm install @alexstukovnikov/oz-time
|
|
87
63
|
```
|
|
88
64
|
|
|
89
|
-
### Для локальной разработки
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
npm install
|
|
93
|
-
```
|
|
94
|
-
|
|
95
65
|
## Быстрый старт
|
|
96
66
|
|
|
97
67
|
```js
|
|
@@ -114,107 +84,72 @@ const oneHour = duration(1, 'hour');
|
|
|
114
84
|
console.log(oneHour.asMinutes()); // ожидаемый результат: 60
|
|
115
85
|
```
|
|
116
86
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
| Сценарий | Что использовать | Почему |
|
|
120
|
-
| ----------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------ |
|
|
121
|
-
| Нужен текущий момент времени | `now()` | Самый простой способ получить новый экземпляр `OzTime` для текущего момента. |
|
|
122
|
-
| Есть Unix timestamp в миллисекундах | `fromTimestamp()` | Подходит для работы с временем из API, БД и системных источников. |
|
|
123
|
-
| Есть нативный `Date` | `fromDate()` | Удобно интегрировать библиотеку в существующий код на JavaScript. |
|
|
124
|
-
| Есть ISO-строка | `fromISO()` | Лучший вариант для внешних API и сериализованных значений времени. |
|
|
125
|
-
| Нужно создать дату вручную из компонентов | `fromComponents()` | Подходит, когда год, месяц, день и время приходят по отдельности. |
|
|
126
|
-
| Нужно прибавить или вычесть время | `add()` / `subtract()` | Возвращают новый экземпляр и не изменяют исходный объект. |
|
|
127
|
-
| Нужно сравнить два значения | `isSame()` / `isBefore()` / `isAfter()` | Дают читаемый API для логики сравнения. |
|
|
128
|
-
| Нужно проверить попадание в диапазон | `isBetween()` | Удобнее, чем писать проверку вручную. |
|
|
129
|
-
| Нужно получить красивую строку | `format()` | Форматирование по шаблону с токенами. |
|
|
130
|
-
| Нужно изменить отображаемый часовой пояс | `setTimezone()` | Меняет timezone у нового экземпляра, не меняя абсолютный момент времени. |
|
|
131
|
-
| Нужно узнать смещение UTC | `getTimezoneOffset()` | Полезно для отображения, отладки и расчётов. |
|
|
132
|
-
| Нужно описать диапазон времени | `Interval` / `interval()` | Подходит для проверки попадания, пересечений и длительности интервала. |
|
|
133
|
-
| Нужно описать фиксированную длительность | `Duration` / `duration()` | Удобно для преобразования между миллисекундами, секундами, минутами, часами и днями. |
|
|
134
|
-
| Нужно проверить високосный год | `isLeapYear()` | Простая календарная утилита. |
|
|
135
|
-
| Нужно узнать число дней в месяце | `daysInMonth()` | Удобно для валидации и генерации дат. |
|
|
136
|
-
|
|
137
|
-
## Создание экземпляров
|
|
138
|
-
|
|
139
|
-
### `now(timezone?, locale?)`
|
|
140
|
-
|
|
141
|
-
Создаёт экземпляр `OzTime` для текущего момента времени.
|
|
87
|
+
### Цепочка операций
|
|
142
88
|
|
|
143
89
|
```js
|
|
144
|
-
import {
|
|
145
|
-
|
|
146
|
-
const current = now('Europe/Moscow', 'ru-RU');
|
|
147
|
-
console.log(current.getTimezone()); // ожидаемый результат: Europe/Moscow
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
### `fromTimestamp(timestamp, timezone?, locale?)`
|
|
151
|
-
|
|
152
|
-
Создаёт экземпляр из Unix timestamp в миллисекундах.
|
|
153
|
-
|
|
154
|
-
```js
|
|
155
|
-
import { fromTimestamp } from '@alexstukovnikov/oz-time';
|
|
156
|
-
|
|
157
|
-
const time = fromTimestamp(1716638400000, 'UTC', 'ru-RU');
|
|
158
|
-
console.log(time.toISOString()); // ожидаемый результат: 2024-05-25T12:00:00.000Z
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
### `fromDate(date, timezone?, locale?)`
|
|
162
|
-
|
|
163
|
-
Создаёт экземпляр из объекта `Date`.
|
|
90
|
+
import { fromISO } from '@alexstukovnikov/oz-time';
|
|
164
91
|
|
|
165
|
-
|
|
166
|
-
|
|
92
|
+
const result = fromISO('2024-05-25T12:00:00Z', 'UTC', 'ru-RU')
|
|
93
|
+
.add(1, 'day')
|
|
94
|
+
.add(2, 'hour')
|
|
95
|
+
.subtract(30, 'minute')
|
|
96
|
+
.setTimezone('Europe/Moscow')
|
|
97
|
+
.format('DD.MM.YYYY HH:mm:ss');
|
|
167
98
|
|
|
168
|
-
|
|
169
|
-
console.log(time.toTimestamp()); // ожидаемый результат: 1716638400000
|
|
99
|
+
console.log(result);
|
|
170
100
|
```
|
|
171
101
|
|
|
172
|
-
|
|
102
|
+
## Основные сценарии
|
|
103
|
+
|
|
104
|
+
| Сценарий | Что использовать | Почему |
|
|
105
|
+
| ----------------------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------- |
|
|
106
|
+
| Нужен текущий момент времени | `now()` | Самый простой способ получить новый экземпляр `OzTime` для текущего момента |
|
|
107
|
+
| Есть Unix timestamp в миллисекундах | `fromTimestamp()` | Подходит для работы с временем из API, БД и системных источников |
|
|
108
|
+
| Есть нативный `Date` | `fromDate()` | Удобно интегрировать библиотеку в существующий JavaScript-код |
|
|
109
|
+
| Есть ISO-строка | `fromISO()` | Подходит для внешних API и сериализованных значений времени |
|
|
110
|
+
| Нужно создать дату вручную из компонентов | `fromComponents()` | Удобно, когда год, месяц, день и время приходят по отдельности |
|
|
111
|
+
| Нужно прибавить или вычесть время | `add()` / `subtract()` | Возвращают новый экземпляр и не изменяют исходный объект |
|
|
112
|
+
| Нужно сравнить два значения | `isSame()` / `isBefore()` / `isAfter()` | Дают читаемый API для логики сравнения |
|
|
113
|
+
| Нужно проверить попадание в диапазон | `isBetween()` | Удобнее, чем писать проверку вручную |
|
|
114
|
+
| Нужно получить строковое представление | `format()` | Форматирование по шаблону с токенами |
|
|
115
|
+
| Нужно изменить отображаемый часовой пояс | `setTimezone()` | Меняет timezone у нового экземпляра, не меняя абсолютный момент времени |
|
|
116
|
+
| Нужно узнать смещение относительно UTC | `getTimezoneOffset()` | Полезно для отображения, отладки и расчётов |
|
|
117
|
+
| Нужно описать диапазон времени | `Interval` / `interval()` | Подходит для проверки попадания, пересечений и длительности интервала |
|
|
118
|
+
| Нужно описать фиксированную длительность | `Duration` / `duration()` | Удобно для преобразования между миллисекундами, секундами, минутами, часами и днями |
|
|
119
|
+
| Нужно проверить високосный год | `isLeapYear()` | Простая календарная утилита |
|
|
120
|
+
| Нужно узнать число дней в месяце | `daysInMonth()` | Удобно для валидации и генерации дат |
|
|
173
121
|
|
|
174
|
-
|
|
122
|
+
## Создание экземпляров
|
|
175
123
|
|
|
176
124
|
```js
|
|
177
|
-
import { fromISO } from '@alexstukovnikov/oz-time';
|
|
125
|
+
import { now, fromTimestamp, fromDate, fromISO, fromComponents } from '@alexstukovnikov/oz-time';
|
|
178
126
|
|
|
179
|
-
const
|
|
180
|
-
|
|
127
|
+
const a = now('Europe/Moscow', 'ru-RU');
|
|
128
|
+
const b = fromTimestamp(1716638400000, 'UTC', 'ru-RU');
|
|
129
|
+
const c = fromDate(new Date('2024-05-25T12:00:00Z'), 'UTC', 'ru-RU');
|
|
130
|
+
const d = fromISO('2024-05-25T12:00:00Z', 'UTC', 'ru-RU');
|
|
131
|
+
const e = fromComponents(2024, 5, 25, 12, 0, 0, 0, 'UTC', 'ru-RU');
|
|
181
132
|
```
|
|
182
133
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
import { fromComponents } from '@alexstukovnikov/oz-time';
|
|
189
|
-
|
|
190
|
-
const time = fromComponents(2024, 5, 25, 12, 0, 0, 0, 'UTC', 'ru-RU');
|
|
191
|
-
console.log(time.toISOString()); // ожидаемый результат: 2024-05-25T12:00:00.000Z
|
|
192
|
-
```
|
|
134
|
+
- `now()` — создаёт экземпляр `OzTime` для текущего момента времени.
|
|
135
|
+
- `fromTimestamp()` — создаёт экземпляр из Unix timestamp в миллисекундах.
|
|
136
|
+
- `fromDate()` — создаёт экземпляр из объекта `Date`.
|
|
137
|
+
- `fromISO()` — создаёт экземпляр из ISO-строки.
|
|
138
|
+
- `fromComponents()` — создаёт экземпляр из отдельных компонентов даты и времени.
|
|
193
139
|
|
|
194
140
|
## Арифметика
|
|
195
141
|
|
|
196
142
|
Все арифметические операции возвращают новый экземпляр `OzTime` и не изменяют исходный объект.
|
|
197
143
|
|
|
198
|
-
### Добавление
|
|
199
|
-
|
|
200
|
-
```js
|
|
201
|
-
import { fromISO } from '@alexstukovnikov/oz-time';
|
|
202
|
-
|
|
203
|
-
const time = fromISO('2024-05-25T12:00:00Z');
|
|
204
|
-
const result = time.add(1, 'day');
|
|
205
|
-
|
|
206
|
-
console.log(result.toISOString()); // ожидаемый результат: 2024-05-26T12:00:00.000Z
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
### Вычитание времени
|
|
144
|
+
### Добавление и вычитание
|
|
210
145
|
|
|
211
146
|
```js
|
|
212
147
|
import { fromISO } from '@alexstukovnikov/oz-time';
|
|
213
148
|
|
|
214
149
|
const time = fromISO('2024-05-25T12:00:00Z');
|
|
215
|
-
const result = time.subtract(2, 'hour');
|
|
216
150
|
|
|
217
|
-
console.log(
|
|
151
|
+
console.log(time.add(1, 'day').toISOString()); // ожидаемый результат: 2024-05-26T12:00:00.000Z
|
|
152
|
+
console.log(time.subtract(2, 'hour').toISOString()); // ожидаемый результат: 2024-05-25T10:00:00.000Z
|
|
218
153
|
```
|
|
219
154
|
|
|
220
155
|
### Разница между датами
|
|
@@ -241,54 +176,22 @@ console.log(result.toISOString()); // ожидаемый результат: 202
|
|
|
241
176
|
|
|
242
177
|
## Сравнение
|
|
243
178
|
|
|
244
|
-
### `isSame`
|
|
245
|
-
|
|
246
179
|
```js
|
|
247
180
|
import { fromISO } from '@alexstukovnikov/oz-time';
|
|
248
181
|
|
|
249
182
|
const a = fromISO('2024-05-25T12:00:00.100Z');
|
|
250
183
|
const b = fromISO('2024-05-25T12:00:00.900Z');
|
|
184
|
+
const c = fromISO('2024-05-26T12:00:00Z');
|
|
251
185
|
|
|
252
186
|
console.log(a.isSame(b, 'second')); // ожидаемый результат: true
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
```js
|
|
258
|
-
import { fromISO } from '@alexstukovnikov/oz-time';
|
|
259
|
-
|
|
260
|
-
const a = fromISO('2024-05-25T12:00:00Z');
|
|
261
|
-
const b = fromISO('2024-05-26T12:00:00Z');
|
|
262
|
-
|
|
263
|
-
console.log(a.isBefore(b)); // ожидаемый результат: true
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
### `isAfter`
|
|
267
|
-
|
|
268
|
-
```js
|
|
269
|
-
import { fromISO } from '@alexstukovnikov/oz-time';
|
|
270
|
-
|
|
271
|
-
const a = fromISO('2024-05-26T12:00:00Z');
|
|
272
|
-
const b = fromISO('2024-05-25T12:00:00Z');
|
|
273
|
-
|
|
274
|
-
console.log(a.isAfter(b)); // ожидаемый результат: true
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
### `isBetween`
|
|
278
|
-
|
|
279
|
-
```js
|
|
280
|
-
import { fromISO } from '@alexstukovnikov/oz-time';
|
|
281
|
-
|
|
282
|
-
const target = fromISO('2024-05-25T12:00:00Z');
|
|
283
|
-
const start = fromISO('2024-05-25T10:00:00Z');
|
|
284
|
-
const end = fromISO('2024-05-25T14:00:00Z');
|
|
285
|
-
|
|
286
|
-
console.log(target.isBetween(start, end)); // ожидаемый результат: true
|
|
187
|
+
console.log(a.isBefore(c)); // ожидаемый результат: true
|
|
188
|
+
console.log(c.isAfter(a)); // ожидаемый результат: true
|
|
189
|
+
console.log(a.isBetween(a.subtract(1, 'day'), c)); // ожидаемый результат: true
|
|
287
190
|
```
|
|
288
191
|
|
|
289
192
|
## Форматирование
|
|
290
193
|
|
|
291
|
-
Функция `format()` и метод `OzTime#format()` поддерживают
|
|
194
|
+
Функция `format()` и метод `OzTime#format()` поддерживают шаблоны форматирования.
|
|
292
195
|
|
|
293
196
|
```js
|
|
294
197
|
import { fromISO } from '@alexstukovnikov/oz-time';
|
|
@@ -323,7 +226,9 @@ const time = fromISO('2024-05-25T12:00:00Z', 'Europe/Moscow', 'ru-RU');
|
|
|
323
226
|
console.log(time.getTimezoneOffset()); // ожидаемый результат: 180
|
|
324
227
|
```
|
|
325
228
|
|
|
326
|
-
## Интервалы
|
|
229
|
+
## Интервалы и длительности
|
|
230
|
+
|
|
231
|
+
### Интервалы
|
|
327
232
|
|
|
328
233
|
Интервал представляет диапазон между двумя экземплярами `OzTime`, включая границы.
|
|
329
234
|
|
|
@@ -350,7 +255,7 @@ const b = new Interval(fromISO('2024-05-25T11:00:00Z'), fromISO('2024-05-25T13:0
|
|
|
350
255
|
console.log(a.overlaps(b)); // ожидаемый результат: true
|
|
351
256
|
```
|
|
352
257
|
|
|
353
|
-
|
|
258
|
+
### Длительности
|
|
354
259
|
|
|
355
260
|
`Duration` используется для работы с фиксированными единицами времени.
|
|
356
261
|
|
|
@@ -425,44 +330,6 @@ console.log(a.add(b).asMinutes()); // ожидаемый результат: 75
|
|
|
425
330
|
| `SSS` | Миллисекунды | `123` |
|
|
426
331
|
| `A` | AM/PM | `AM`, `PM` |
|
|
427
332
|
|
|
428
|
-
## Публичный API
|
|
429
|
-
|
|
430
|
-
### Core
|
|
431
|
-
|
|
432
|
-
- `OzTime`
|
|
433
|
-
- `now`
|
|
434
|
-
- `fromTimestamp`
|
|
435
|
-
- `fromDate`
|
|
436
|
-
- `fromISO`
|
|
437
|
-
- `fromComponents`
|
|
438
|
-
|
|
439
|
-
### Арифметика и сравнение
|
|
440
|
-
|
|
441
|
-
- `add`
|
|
442
|
-
- `subtract`
|
|
443
|
-
- `isSame`
|
|
444
|
-
- `isBefore`
|
|
445
|
-
- `isAfter`
|
|
446
|
-
- `isBetween`
|
|
447
|
-
|
|
448
|
-
### Форматирование и часовые пояса
|
|
449
|
-
|
|
450
|
-
- `format`
|
|
451
|
-
- `setTimezone`
|
|
452
|
-
- `getTimezoneOffset`
|
|
453
|
-
|
|
454
|
-
### Интервалы и длительности
|
|
455
|
-
|
|
456
|
-
- `Interval`
|
|
457
|
-
- `interval`
|
|
458
|
-
- `Duration`
|
|
459
|
-
- `duration`
|
|
460
|
-
|
|
461
|
-
### Календарные утилиты
|
|
462
|
-
|
|
463
|
-
- `isLeapYear`
|
|
464
|
-
- `daysInMonth`
|
|
465
|
-
|
|
466
333
|
## FAQ
|
|
467
334
|
|
|
468
335
|
### Чем `fromISO()` отличается от `fromTimestamp()`?
|
|
@@ -504,63 +371,15 @@ console.log(a.add(b).asMinutes()); // ожидаемый результат: 75
|
|
|
504
371
|
|
|
505
372
|
Используй `Interval`, когда есть начало и конец диапазона. Используй `Duration`, когда нужна именно фиксированная длина времени, например 2 часа, 30 минут или 7 дней.
|
|
506
373
|
|
|
507
|
-
## Разработка
|
|
508
|
-
|
|
509
|
-
### Запуск dev-режима
|
|
510
|
-
|
|
511
|
-
```bash
|
|
512
|
-
npm run dev
|
|
513
|
-
```
|
|
514
|
-
|
|
515
|
-
### Сборка библиотеки
|
|
516
|
-
|
|
517
|
-
```bash
|
|
518
|
-
npm run build
|
|
519
|
-
```
|
|
520
|
-
|
|
521
|
-
### Запуск тестов
|
|
522
|
-
|
|
523
|
-
```bash
|
|
524
|
-
npm test
|
|
525
|
-
```
|
|
526
|
-
|
|
527
|
-
### Однократный запуск тестов
|
|
528
|
-
|
|
529
|
-
```bash
|
|
530
|
-
npm run test:run
|
|
531
|
-
```
|
|
532
|
-
|
|
533
|
-
### Покрытие тестами
|
|
534
|
-
|
|
535
|
-
```bash
|
|
536
|
-
npm run test:coverage
|
|
537
|
-
```
|
|
538
|
-
|
|
539
|
-
## Генерация документации
|
|
540
|
-
|
|
541
|
-
### Генерация HTML-документации JSDoc
|
|
542
|
-
|
|
543
|
-
```bash
|
|
544
|
-
npm run docs
|
|
545
|
-
```
|
|
546
|
-
|
|
547
|
-
### Полная пересборка документации
|
|
548
|
-
|
|
549
|
-
```bash
|
|
550
|
-
npm run docs:build
|
|
551
|
-
```
|
|
552
|
-
|
|
553
|
-
После генерации документация будет находиться в папке `docs/`.
|
|
554
|
-
|
|
555
374
|
## Ограничения и особенности
|
|
556
375
|
|
|
557
|
-
- Внутреннее значение времени хранится как Unix timestamp в
|
|
558
|
-
- Часовой пояс не меняет абсолютный момент времени, а влияет на форматирование и вычисление
|
|
559
|
-
- Методы `add`, `subtract`, `setTimezone` и другие операции не изменяют текущий экземпляр, а возвращают
|
|
560
|
-
- `Duration` поддерживает только фиксированные единицы
|
|
561
|
-
- Календарная арифметика через `month` и `year` учитывает реальную длину
|
|
562
|
-
- Разница в `month` и `year` считается календарно, а не через точное число
|
|
563
|
-
- Поддержка часовых поясов зависит от `Intl` и доступных IANA time zone в среде
|
|
376
|
+
- Внутреннее значение времени хранится как Unix timestamp в миллисекундах
|
|
377
|
+
- Часовой пояс не меняет абсолютный момент времени, а влияет на форматирование и вычисление смещения
|
|
378
|
+
- Методы `add`, `subtract`, `setTimezone` и другие операции не изменяют текущий экземпляр, а возвращают новый
|
|
379
|
+
- `Duration` поддерживает только фиксированные единицы времени
|
|
380
|
+
- Календарная арифметика через `month` и `year` учитывает реальную длину месяцев
|
|
381
|
+
- Разница в `month` и `year` считается календарно, а не через точное число миллисекунд
|
|
382
|
+
- Поддержка часовых поясов зависит от `Intl` и доступных IANA time zone в среде выполнения
|
|
564
383
|
|
|
565
384
|
## Лицензия
|
|
566
385
|
|
package/package.json
CHANGED
|
@@ -1,48 +1,45 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@alexstukovnikov/oz-time",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Lightweight JavaScript date-time library",
|
|
5
|
-
"repository": {
|
|
6
|
-
"type": "git",
|
|
7
|
-
"url": "https://github.com/AlexStukovnikov/oz-time.git"
|
|
8
|
-
},
|
|
9
|
-
"type": "module",
|
|
10
|
-
"main": "./
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"vitest": "^4.1.7"
|
|
47
|
-
}
|
|
48
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@alexstukovnikov/oz-time",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "Lightweight JavaScript date-time library",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/AlexStukovnikov/oz-time.git"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"main": "./src/index.js",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": "./src/index.js"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"src",
|
|
16
|
+
"README.md"
|
|
17
|
+
],
|
|
18
|
+
"sideEffects": false,
|
|
19
|
+
"scripts": {
|
|
20
|
+
"dev": "vite",
|
|
21
|
+
"build": "vite build",
|
|
22
|
+
"test": "vitest",
|
|
23
|
+
"test:run": "vitest run",
|
|
24
|
+
"test:coverage": "vitest run --coverage",
|
|
25
|
+
"docs": "jsdoc -c jsdoc.json",
|
|
26
|
+
"docs:clean": "rimraf docs",
|
|
27
|
+
"docs:build": "npm run docs:clean && npm run docs",
|
|
28
|
+
"prepublishOnly": "npm run build"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"date",
|
|
32
|
+
"time",
|
|
33
|
+
"datetime"
|
|
34
|
+
],
|
|
35
|
+
"author": "",
|
|
36
|
+
"license": "ISC",
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@vitest/coverage-v8": "^4.1.7",
|
|
39
|
+
"@vitest/ui": "^4.1.7",
|
|
40
|
+
"docdash": "^2.0.2",
|
|
41
|
+
"jsdoc": "^4.0.5",
|
|
42
|
+
"vite": "^8.0.14",
|
|
43
|
+
"vitest": "^4.1.7"
|
|
44
|
+
}
|
|
45
|
+
}
|