chronos-ts
Version:
A comprehensive TypeScript library for date and time manipulation, inspired by Carbon PHP. Features immutable API, intervals, periods, timezones, and i18n support.
848 lines (847 loc) • 18.5 kB
JavaScript
;
/**
* Locale configuration for Chronos
* @module locales
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.defaultLocale = exports.locales = exports.pt = exports.zh = exports.ja = exports.de = exports.ru = exports.ar = exports.it = exports.es = exports.fr = exports.en = void 0;
exports.getLocale = getLocale;
exports.registerLocale = registerLocale;
exports.getAvailableLocales = getAvailableLocales;
/**
* English (US) locale configuration
*/
exports.en = {
code: 'en',
months: [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December',
],
monthsShort: [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec',
],
weekdays: [
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
],
weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
weekdaysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
ordinal: (n) => {
const s = ['th', 'st', 'nd', 'rd'];
const v = n % 100;
return n + (s[(v - 20) % 10] || s[v] || s[0]);
},
formats: {
LT: 'h:mm A',
LTS: 'h:mm:ss A',
L: 'MM/DD/YYYY',
LL: 'MMMM D, YYYY',
LLL: 'MMMM D, YYYY h:mm A',
LLLL: 'dddd, MMMM D, YYYY h:mm A',
l: 'M/D/YYYY',
ll: 'MMM D, YYYY',
lll: 'MMM D, YYYY h:mm A',
llll: 'ddd, MMM D, YYYY h:mm A',
},
relativeTime: {
future: 'in %s',
past: '%s ago',
s: 'a few seconds',
ss: '%d seconds',
m: 'a minute',
mm: '%d minutes',
h: 'an hour',
hh: '%d hours',
d: 'a day',
dd: '%d days',
w: 'a week',
ww: '%d weeks',
M: 'a month',
MM: '%d months',
y: 'a year',
yy: '%d years',
},
meridiem: (hour, _minute, isLowercase) => {
const m = hour < 12 ? 'AM' : 'PM';
return isLowercase ? m.toLowerCase() : m;
},
week: {
dow: 0, // Sunday is the first day of the week
doy: 6, // The week that contains Jan 1st is the first week of the year
},
};
/**
* French locale configuration
*/
exports.fr = {
code: 'fr',
months: [
'janvier',
'février',
'mars',
'avril',
'mai',
'juin',
'juillet',
'août',
'septembre',
'octobre',
'novembre',
'décembre',
],
monthsShort: [
'janv.',
'févr.',
'mars',
'avr.',
'mai',
'juin',
'juil.',
'août',
'sept.',
'oct.',
'nov.',
'déc.',
],
weekdays: [
'dimanche',
'lundi',
'mardi',
'mercredi',
'jeudi',
'vendredi',
'samedi',
],
weekdaysShort: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
weekdaysMin: ['di', 'lu', 'ma', 'me', 'je', 've', 'sa'],
ordinal: (n) => n + (n === 1 ? 'er' : 'e'),
formats: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd D MMMM YYYY HH:mm',
l: 'D/M/YYYY',
ll: 'D MMM YYYY',
lll: 'D MMM YYYY HH:mm',
llll: 'ddd D MMM YYYY HH:mm',
},
relativeTime: {
future: 'dans %s',
past: 'il y a %s',
s: 'quelques secondes',
ss: '%d secondes',
m: 'une minute',
mm: '%d minutes',
h: 'une heure',
hh: '%d heures',
d: 'un jour',
dd: '%d jours',
w: 'une semaine',
ww: '%d semaines',
M: 'un mois',
MM: '%d mois',
y: 'un an',
yy: '%d ans',
},
week: {
dow: 1, // Monday is the first day of the week
doy: 4, // The week that contains Jan 4th is the first week of the year
},
};
/**
* Spanish locale configuration
*/
exports.es = {
code: 'es',
months: [
'enero',
'febrero',
'marzo',
'abril',
'mayo',
'junio',
'julio',
'agosto',
'septiembre',
'octubre',
'noviembre',
'diciembre',
],
monthsShort: [
'ene.',
'feb.',
'mar.',
'abr.',
'may.',
'jun.',
'jul.',
'ago.',
'sep.',
'oct.',
'nov.',
'dic.',
],
weekdays: [
'domingo',
'lunes',
'martes',
'miércoles',
'jueves',
'viernes',
'sábado',
],
weekdaysShort: ['dom.', 'lun.', 'mar.', 'mié.', 'jue.', 'vie.', 'sáb.'],
weekdaysMin: ['do', 'lu', 'ma', 'mi', 'ju', 'vi', 'sá'],
ordinal: (n) => n + 'º',
formats: {
LT: 'H:mm',
LTS: 'H:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D [de] MMMM [de] YYYY',
LLL: 'D [de] MMMM [de] YYYY H:mm',
LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
l: 'D/M/YYYY',
ll: 'D MMM YYYY',
lll: 'D MMM YYYY H:mm',
llll: 'ddd, D MMM YYYY H:mm',
},
relativeTime: {
future: 'en %s',
past: 'hace %s',
s: 'unos segundos',
ss: '%d segundos',
m: 'un minuto',
mm: '%d minutos',
h: 'una hora',
hh: '%d horas',
d: 'un día',
dd: '%d días',
w: 'una semana',
ww: '%d semanas',
M: 'un mes',
MM: '%d meses',
y: 'un año',
yy: '%d años',
},
week: {
dow: 1,
doy: 4,
},
};
/**
* Italian locale configuration
*/
exports.it = {
code: 'it',
months: [
'gennaio',
'febbraio',
'marzo',
'aprile',
'maggio',
'giugno',
'luglio',
'agosto',
'settembre',
'ottobre',
'novembre',
'dicembre',
],
monthsShort: [
'gen',
'feb',
'mar',
'apr',
'mag',
'giu',
'lug',
'ago',
'set',
'ott',
'nov',
'dic',
],
weekdays: [
'domenica',
'lunedì',
'martedì',
'mercoledì',
'giovedì',
'venerdì',
'sabato',
],
weekdaysShort: ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'],
weekdaysMin: ['do', 'lu', 'ma', 'me', 'gi', 've', 'sa'],
ordinal: (n) => n + 'º',
formats: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd D MMMM YYYY HH:mm',
l: 'D/M/YYYY',
ll: 'D MMM YYYY',
lll: 'D MMM YYYY HH:mm',
llll: 'ddd D MMM YYYY HH:mm',
},
relativeTime: {
future: 'in %s',
past: '%s fa',
s: 'alcuni secondi',
ss: '%d secondi',
m: 'un minuto',
mm: '%d minuti',
h: 'unora',
hh: '%d ore',
d: 'un giorno',
dd: '%d giorni',
w: 'una settimana',
ww: '%d settimane',
M: 'un mese',
MM: '%d mesi',
y: 'un anno',
yy: '%d anni',
},
week: { dow: 1, doy: 4 },
};
/**
* Arabic locale configuration (Modern Standard Arabic)
*/
exports.ar = {
code: 'ar',
months: [
'يناير',
'فبراير',
'مارس',
'أبريل',
'مايو',
'يونيو',
'يوليو',
'أغسطس',
'سبتمبر',
'أكتوبر',
'نوفمبر',
'ديسمبر',
],
monthsShort: [
'ينا',
'فبر',
'مار',
'أبر',
'ماي',
'يون',
'يول',
'أغس',
'سبت',
'أكت',
'نوف',
'ديس',
],
weekdays: [
'الأحد',
'الاثنين',
'الثلاثاء',
'الأربعاء',
'الخميس',
'الجمعة',
'السبت',
],
weekdaysShort: ['أح', 'اث', 'ثل', 'أر', 'خم', 'جم', 'سب'],
weekdaysMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
ordinal: (n) => String(n),
formats: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd D MMMM YYYY HH:mm',
l: 'D/M/YYYY',
ll: 'D MMM YYYY',
lll: 'D MMM YYYY HH:mm',
llll: 'ddd D MMM YYYY HH:mm',
},
relativeTime: {
future: 'بعد %s',
past: 'منذ %s',
s: 'ثوانٍ',
ss: '%d ثانية',
m: 'دقيقة',
mm: '%d دقائق',
h: 'ساعة',
hh: '%d ساعات',
d: 'يوم',
dd: '%d أيام',
w: 'أسبوع',
ww: '%d أسابيع',
M: 'شهر',
MM: '%d أشهر',
y: 'سنة',
yy: '%d سنوات',
},
week: { dow: 6, doy: 12 },
};
/**
* Russian locale configuration
*/
exports.ru = {
code: 'ru',
months: [
'января',
'февраля',
'марта',
'апреля',
'мая',
'июня',
'июля',
'августа',
'сентября',
'октября',
'ноября',
'декабря',
],
monthsShort: [
'янв',
'фев',
'мар',
'апр',
'май',
'июн',
'июл',
'авг',
'сен',
'окт',
'ноя',
'дек',
],
weekdays: [
'воскресенье',
'понедельник',
'вторник',
'среда',
'четверг',
'пятница',
'суббота',
],
weekdaysShort: ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],
weekdaysMin: ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],
ordinal: (n) => String(n),
formats: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD.MM.YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd, D MMMM YYYY HH:mm',
l: 'D.M.YYYY',
ll: 'D MMM YYYY',
lll: 'D MMM YYYY HH:mm',
llll: 'ddd, D MMM YYYY HH:mm',
},
relativeTime: {
future: 'через %s',
past: '%s назад',
s: 'несколько секунд',
ss: '%d секунд',
m: 'минута',
mm: '%d минут',
h: 'час',
hh: '%d часов',
d: 'день',
dd: '%d дней',
w: 'неделя',
ww: '%d недель',
M: 'месяц',
MM: '%d месяцев',
y: 'год',
yy: '%d лет',
},
week: { dow: 1, doy: 4 },
};
/**
* German locale configuration
*/
exports.de = {
code: 'de',
months: [
'Januar',
'Februar',
'März',
'April',
'Mai',
'Juni',
'Juli',
'August',
'September',
'Oktober',
'November',
'Dezember',
],
monthsShort: [
'Jan.',
'Feb.',
'März',
'Apr.',
'Mai',
'Juni',
'Juli',
'Aug.',
'Sep.',
'Okt.',
'Nov.',
'Dez.',
],
weekdays: [
'Sonntag',
'Montag',
'Dienstag',
'Mittwoch',
'Donnerstag',
'Freitag',
'Samstag',
],
weekdaysShort: ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],
weekdaysMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
ordinal: (n) => n + '.',
formats: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD.MM.YYYY',
LL: 'D. MMMM YYYY',
LLL: 'D. MMMM YYYY HH:mm',
LLLL: 'dddd, D. MMMM YYYY HH:mm',
l: 'D.M.YYYY',
ll: 'D. MMM YYYY',
lll: 'D. MMM YYYY HH:mm',
llll: 'ddd, D. MMM YYYY HH:mm',
},
relativeTime: {
future: 'in %s',
past: 'vor %s',
s: 'ein paar Sekunden',
ss: '%d Sekunden',
m: 'einer Minute',
mm: '%d Minuten',
h: 'einer Stunde',
hh: '%d Stunden',
d: 'einem Tag',
dd: '%d Tagen',
w: 'einer Woche',
ww: '%d Wochen',
M: 'einem Monat',
MM: '%d Monaten',
y: 'einem Jahr',
yy: '%d Jahren',
},
week: {
dow: 1,
doy: 4,
},
};
/**
* Japanese locale configuration
*/
exports.ja = {
code: 'ja',
months: [
'1月',
'2月',
'3月',
'4月',
'5月',
'6月',
'7月',
'8月',
'9月',
'10月',
'11月',
'12月',
],
monthsShort: [
'1月',
'2月',
'3月',
'4月',
'5月',
'6月',
'7月',
'8月',
'9月',
'10月',
'11月',
'12月',
],
weekdays: [
'日曜日',
'月曜日',
'火曜日',
'水曜日',
'木曜日',
'金曜日',
'土曜日',
],
weekdaysShort: ['日', '月', '火', '水', '木', '金', '土'],
weekdaysMin: ['日', '月', '火', '水', '木', '金', '土'],
ordinal: (n) => n + '日',
formats: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'YYYY/MM/DD',
LL: 'YYYY年M月D日',
LLL: 'YYYY年M月D日 HH:mm',
LLLL: 'YYYY年M月D日 dddd HH:mm',
l: 'YYYY/M/D',
ll: 'YYYY年M月D日',
lll: 'YYYY年M月D日 HH:mm',
llll: 'YYYY年M月D日(ddd) HH:mm',
},
relativeTime: {
future: '%s後',
past: '%s前',
s: '数秒',
ss: '%d秒',
m: '1分',
mm: '%d分',
h: '1時間',
hh: '%d時間',
d: '1日',
dd: '%d日',
w: '1週間',
ww: '%d週間',
M: '1ヶ月',
MM: '%dヶ月',
y: '1年',
yy: '%d年',
},
week: {
dow: 0,
doy: 6,
},
};
/**
* Chinese (Simplified) locale configuration
*/
exports.zh = {
code: 'zh',
months: [
'一月',
'二月',
'三月',
'四月',
'五月',
'六月',
'七月',
'八月',
'九月',
'十月',
'十一月',
'十二月',
],
monthsShort: [
'1月',
'2月',
'3月',
'4月',
'5月',
'6月',
'7月',
'8月',
'9月',
'10月',
'11月',
'12月',
],
weekdays: [
'星期日',
'星期一',
'星期二',
'星期三',
'星期四',
'星期五',
'星期六',
],
weekdaysShort: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
weekdaysMin: ['日', '一', '二', '三', '四', '五', '六'],
ordinal: (n) => n + '日',
formats: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'YYYY/MM/DD',
LL: 'YYYY年M月D日',
LLL: 'YYYY年M月D日 HH:mm',
LLLL: 'YYYY年M月D日dddd HH:mm',
l: 'YYYY/M/D',
ll: 'YYYY年M月D日',
lll: 'YYYY年M月D日 HH:mm',
llll: 'YYYY年M月D日dddd HH:mm',
},
relativeTime: {
future: '%s后',
past: '%s前',
s: '几秒',
ss: '%d 秒',
m: '1 分钟',
mm: '%d 分钟',
h: '1 小时',
hh: '%d 小时',
d: '1 天',
dd: '%d 天',
w: '1 周',
ww: '%d 周',
M: '1 个月',
MM: '%d 个月',
y: '1 年',
yy: '%d 年',
},
week: {
dow: 1,
doy: 4,
},
};
/**
* Portuguese (Brazil) locale configuration
*/
exports.pt = {
code: 'pt',
months: [
'janeiro',
'fevereiro',
'março',
'abril',
'maio',
'junho',
'julho',
'agosto',
'setembro',
'outubro',
'novembro',
'dezembro',
],
monthsShort: [
'jan',
'fev',
'mar',
'abr',
'mai',
'jun',
'jul',
'ago',
'set',
'out',
'nov',
'dez',
],
weekdays: [
'domingo',
'segunda-feira',
'terça-feira',
'quarta-feira',
'quinta-feira',
'sexta-feira',
'sábado',
],
weekdaysShort: ['dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sáb'],
weekdaysMin: ['do', '2ª', '3ª', '4ª', '5ª', '6ª', 'sá'],
ordinal: (n) => n + 'º',
formats: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D [de] MMMM [de] YYYY',
LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',
LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',
l: 'D/M/YYYY',
ll: 'D MMM YYYY',
lll: 'D MMM YYYY HH:mm',
llll: 'ddd, D MMM YYYY HH:mm',
},
relativeTime: {
future: 'em %s',
past: 'há %s',
s: 'poucos segundos',
ss: '%d segundos',
m: 'um minuto',
mm: '%d minutos',
h: 'uma hora',
hh: '%d horas',
d: 'um dia',
dd: '%d dias',
w: 'uma semana',
ww: '%d semanas',
M: 'um mês',
MM: '%d meses',
y: 'um ano',
yy: '%d anos',
},
week: {
dow: 1,
doy: 4,
},
};
/**
* All available locales
*/
exports.locales = {
en: exports.en,
fr: exports.fr,
es: exports.es,
de: exports.de,
ja: exports.ja,
zh: exports.zh,
pt: exports.pt,
it: exports.it,
ar: exports.ar,
ru: exports.ru,
};
/**
* Default locale
*/
exports.defaultLocale = exports.en;
/**
* Get a locale by code
*/
function getLocale(code) {
var _a;
return (_a = exports.locales[code]) !== null && _a !== void 0 ? _a : exports.defaultLocale;
}
/**
* Register a new locale
*/
function registerLocale(config) {
exports.locales[config.code] = config;
}
/**
* Get available locale codes
*/
function getAvailableLocales() {
return Object.keys(exports.locales);
}