Js-joda — библиотека для работы с датой и временем в JavaScript,
основанная на API java.time из Java 8. Главная цель
библиотеки — предоставить строгую, предсказуемую и безопасную модель
работы со временем без типичных проблем стандартного объекта
Date.
Библиотека ориентирована на:
Js-joda особенно полезна в крупных приложениях, backend-разработке, финансовых системах, расписаниях, CRM и любых проектах, где требуется точная работа со временем.
Наиболее распространённый способ подключения библиотеки — установка
через npm.
npm install @js-joda/core
После установки становятся доступны базовые классы:
LocalDateLocalTimeLocalDateTimeZonedDateTimeDurationPeriodInstantZoneIdDateTimeFormatterДля проектов на Node.js со стандартной системой модулей используется
require.
const { LocalDate } = require('@js-joda/core');
const date = LocalDate.now();
console.log(date.toString());
В современных проектах применяется синтаксис import.
import { LocalDate } from '@js-joda/core';
const date = LocalDate.now();
console.log(date.toString());
Js-joda разделена на несколько пакетов.
npm install @js-joda/core
Содержит все базовые классы и API.
npm install @js-joda/timezone
Добавляет полноценную поддержку IANA timezone database.
Пример:
import { ZonedDateTime, ZoneId } from '@js-joda/core';
import '@js-joda/timezone';
const date = ZonedDateTime.now(ZoneId.of('Europe/Berlin'));
console.log(date.toString());
Без пакета @js-joda/timezone многие временные зоны
недоступны.
npm install @js-joda/locale
Пакет используется для локализации и расширенного форматирования.
После установки рекомендуется проверить работу библиотеки.
import { LocalDate } from '@js-joda/core';
const current = LocalDate.now();
console.log(current);
Ожидаемый результат:
2026-05-24
Дата будет соответствовать текущему дню системы.
Js-joda можно подключить напрямую в HTML.
<script src="https://cdn.jsdelivr.net/npm/@js-joda/core/dist/js-joda.min.js"></script>
После подключения библиотека становится доступна через глобальный
объект JSJoda.
<script>
const date = JSJoda.LocalDate.now();
console.log(date.toString());
</script>
Vite полностью совместим с Js-joda.
npm install @js-joda/core
import { LocalDateTime } from '@js-joda/core';
const now = LocalDateTime.now();
console.log(now.toString());
Дополнительной конфигурации не требуется.
npm install @js-joda/core
import { LocalDate } from '@js-joda/core';
Webpack корректно собирает библиотеку без дополнительных loader-конфигураций.
Js-joda имеет встроенную поддержку TypeScript.
npm install @js-joda/core
import { LocalDate } from '@js-joda/core';
const date: LocalDate = LocalDate.now();
console.log(date.toString());
Дополнительные типы устанавливать не требуется.
После подключения можно импортировать сразу несколько компонентов.
import {
LocalDate,
LocalTime,
LocalDateTime,
ZonedDateTime,
Duration
} from '@js-joda/core';
Js-joda поддерживает tree shaking.
Это позволяет импортировать только используемые классы.
import { LocalDate } from '@js-joda/core';
В итоговый bundle не попадут неиспользуемые части библиотеки.
Библиотека совместима с Babel без специальной настройки.
Пример .babelrc:
{
"presets": ["@babel/preset-env"]
}
Js-joda поддерживает:
В стандартном пакете отсутствует база временных зон, чтобы уменьшить размер библиотеки.
Поэтому для работы с:
Europe/MoscowAsia/TokyoAmerica/New_Yorkнеобходимо установить дополнительный модуль.
npm install @js-joda/timezone
import '@js-joda/timezone';
Важно понимать: пакет подключается ради побочных эффектов, поэтому импорт не записывается в переменную.
import {
ZonedDateTime,
ZoneId
} from '@js-joda/core';
import '@js-joda/timezone';
const tokyo = ZonedDateTime.now(
ZoneId.of('Asia/Tokyo')
);
console.log(tokyo.toString());
Типичная ошибка:
unsupported ZoneId
Причина — не подключён пакет @js-joda/timezone.
index.js
const { LocalDateTime } = require('@js-joda/core');
const now = LocalDateTime.now();
console.log(now.toString());
node index.js
npm install @js-joda/core
import { LocalDate } from '@js-joda/core';
function App() {
const today = LocalDate.now();
return (
<div>
{today.toString()}
</div>
);
}
export default App;
import { LocalDate } from '@js-joda/core';
export default {
setup() {
const today = LocalDate.now();
return {
today
};
}
};
import { Component } from '@angular/core';
import { LocalDate } from '@js-joda/core';
@Component({
selector: 'app-root',
template: `{{ date }}`
})
export class AppComponent {
date = LocalDate.now().toString();
}
Основной пакет имеет сравнительно небольшой размер.
Дополнительные timezone-данные увеличивают bundle, поэтому:
После подключения Js-joda становится доступна совершенно другая модель работы со временем.
const date = new Date();
Проблемы:
import { LocalDate } from '@js-joda/core';
const date = LocalDate.now();
Преимущества:
npm list @js-joda/core
{
"dependencies": {
"@js-joda/core": "^5.6.1"
}
}
npm uninstall @js-joda/core
yarn remove @js-joda/core
yarn add @js-joda/core
yarn add @js-joda/timezone
pnpm add @js-joda/core
pnpm add @js-joda/timezone
project/
│
├── src/
│ ├── date/
│ │ ├── formatter.js
│ │ ├── timezone.js
│ │ └── parser.js
│ │
│ └── app.js
│
├── package.json
└── node_modules/
Во многих проектах создают единый файл для работы со временем.
// date.js
import {
LocalDate,
LocalDateTime,
DateTimeFormatter
} from '@js-joda/core';
export {
LocalDate,
LocalDateTime,
DateTimeFormatter
};
Использование:
import {
LocalDate
} from './date.js';
const date = LocalDate.now();
import {
ZoneId
} from '@js-joda/core';
import '@js-joda/timezone';
console.log(
ZoneId.of('Europe/London')
);
| Класс | Назначение |
|---|---|
LocalDate |
Дата без времени |
LocalTime |
Время без даты |
LocalDateTime |
Дата и время |
ZonedDateTime |
Дата, время и timezone |
Instant |
Точка времени UTC |
Duration |
Продолжительность |
Period |
Период |
DateTimeFormatter |
Форматирование |
npm install @js-joda/core @js-joda/timezone
import {
LocalDate,
ZonedDateTime,
ZoneId
} from '@js-joda/core';
import '@js-joda/timezone';
Такой набор покрывает большинство задач в веб-разработке и backend-приложениях.