UNPKG

kk-date

Version:

kk-date is a fastest JavaScript library that parses, validations, manipulates, and displays dates and times. If you use Moment.js or Day.js already you can easily use kk-date.

325 lines (309 loc) 10.9 kB
const cache_ttl = 7 * 24 * 60 * 60 * 1000; // 7 days const timeInMilliseconds = { years: 365 * 24 * 60 * 60 * 1000, // 1 year (365 days) months: 31 * 24 * 60 * 60 * 1000, // 1 month (31 days) weeks: 7 * 24 * 60 * 60 * 1000, // 1 week (7 days) days: 24 * 60 * 60 * 1000, // 1 day (24 hours) hours: 60 * 60 * 1000, // 1 hour minutes: 60 * 1000, // 1 minute seconds: 1000, // 1 second }; const format_types = { dddd: 'dddd', YYYY: 'YYYY', DD: 'DD', MM: 'MM', 'YYYY-MM-DD': 'YYYY-MM-DD', 'YYYY-MM-DD HH:mm:ss': 'YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD HH:mm': 'YYYY-MM-DD HH:mm', 'YYYY.MM.DD': 'YYYY.MM.DD', 'MM/DD/YYYY': 'MM/DD/YYYY', 'DD/MM/YYYY': 'DD/MM/YYYY', 'YYYY-MM-DD HH': 'YYYY-MM-DD HH', 'DD-MM-YYYY HH': 'DD-MM-YYYY HH', 'YYYY.MM.DD HH': 'YYYY.MM.DD HH', YYYYMMDD: 'YYYYMMDD', 'YYYY.MM.DD HH:mm:ss': 'YYYY.MM.DD HH:mm:ss', 'YYYY.MM.DD HH:mm': 'YYYY.MM.DD HH:mm', 'DD.MM.YYYY': 'DD.MM.YYYY', 'DD.MM.YYYY HH:mm:ss': 'DD.MM.YYYY HH:mm:ss', 'DD.MM.YYYY HH:mm': 'DD.MM.YYYY HH:mm', 'DD-MM-YYYY': 'DD-MM-YYYY', 'DD-MM-YYYY HH:mm:ss': 'DD-MM-YYYY HH:mm:ss', 'DD-MM-YYYY HH:mm': 'DD-MM-YYYY HH:mm', 'DD MMMM YYYY': 'DD MMMM YYYY', 'Do MMMM YYYY': 'Do MMMM YYYY', 'Do MMM YYYY': 'Do MMM YYYY', 'DD MMMM YYYY dddd': 'DD MMMM YYYY dddd', 'dddd, DD MMMM YYYY': 'dddd, DD MMMM YYYY', 'DD MMMM dddd YYYY': 'DD MMMM dddd YYYY', 'MMMM YYYY': 'MMMM YYYY', 'HH:mm:ss': 'HH:mm:ss', 'HH:mm:ss.SSS': 'HH:mm:ss.SSS', 'HH:mm': 'HH:mm', 'hh:mm': 'hh:mm', 'hh:mm:ss': 'hh:mm:ss', 'hh:mm:ss.SSS': 'hh:mm:ss.SSS', HH: 'HH', mm: 'mm', ss: 'ss', MMM: 'MMM', // Short month name (Jan, Feb, etc.) MMMM: 'MMMM', // Full month name (January, February, etc.) ddd: 'ddd', // Short weekday name (Mon, Tue, etc.) 'DD MMM YYYY': 'DD MMM YYYY', 'DD MMMM dddd, YYYY': 'DD MMMM dddd, YYYY', 'DD MMM': 'DD MMM', // 01 Jan 'MMM YYYY': 'MMM YYYY', // Jan 2024 'DD MMM YYYY HH:mm': 'DD MMM YYYY HH:mm', // 01 Jan 2024 13:45 'YYYY-MM-DDTHH:mm:ss': 'YYYY-MM-DDTHH:mm:ss', 'YYYY-MM': 'YYYY-MM', 'YYYY MMM DD': 'YYYY MMM DD', 'YYYY MMMM DD': 'YYYY MMMM DD', 'DD MMMM dddd': 'DD MMMM dddd', 'YYYY-DD-MM': 'YYYY-DD-MM', 'D MMMM YYYY': 'D MMMM YYYY', 'DD MMMM': 'DD MMMM', // 19 August }; const format_types_regex = { YYYY: /^(17|18|19|20|21)\d\d$/, MM: /^(0[1-9]|1[0-2])$/, DD: /^(0[1-9]|[12][0-9]|3[01])$/, 'YYYY-MM-DD': /^(|17|18|19|20|21)\d\d-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/, YYYYMMDD: /^(|17|18|19|20|21)\d\d(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])$/, 'YYYY-MM-DD HH:mm:ss': /^(|17|18|19|20|21)\d\d-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]) ([01]\d|2[0-9]):([0-5]\d):([0-5]\d)$/, 'YYYY-MM-DD HH:mm': /^(|17|18|19|20|21)\d\d-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]) ([01]\d|2[0-9]):([0-5]\d)$/, 'YYYY.MM.DD': /^(|17|18|19|20|21)\d\d\.(0[1-9]|1[0-2])\.(0[1-9]|[12][0-9]|3[01])$/, 'YYYY.MM.DD HH:mm:ss': /^(|17|18|19|20|21)\d\d\.(0[1-9]|1[0-2])\.(0[1-9]|[12][0-9]|3[01]) ([01]\d|2[0-9]):([0-5]\d):([0-5]\d)$/, 'YYYY.MM.DD HH:mm': /^(|17|18|19|20|21)\d\d\.(0[1-9]|1[0-2])\.(0[1-9]|[12][0-9]|3[01]) ([01]\d|2[0-9]):([0-5]\d)$/, 'DD.MM.YYYY': /^(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[0-2])\.(|17|18|19|20|21)\d\d$/, 'DD.MM.YYYY HH:mm:ss': /^(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[0-2])\.(|17|18|19|20|21)\d\d ([01]\d|2[0-9]):([0-5]\d):([0-5]\d)$/, 'DD.MM.YYYY HH:mm': /^(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[0-2])\.(|17|18|19|20|21)\d\d ([01]\d|2[0-9]):([0-5]\d)$/, 'DD-MM-YYYY': /^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])-(|17|18|19|20|21)\d\d$/, 'DD-MM-YYYY HH:mm:ss': /^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])-(|17|18|19|20|21)\d\d ([01]\d|2[0-9]):([0-5]\d):([0-5]\d)$/, 'DD-MM-YYYY HH:mm': /^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])-(|17|18|19|20|21)\d\d ([01]\d|2[0-9]):([0-5]\d)$/, 'DD MMMM YYYY': /^([1-9]|[12][0-9]|3[01]) \p{L}+ (17|18|19|20|21)\d\d$/u, 'Do MMM YYYY': /\b(\d{1,2})(st|nd|rd|th|\.|er|ème|te|º|ª|-й|वां|日|일|z|день)\s+[\p{L}\p{M}]+\s+\d{4}\b/u, 'Do MMMM YYYY': /\b(\d{1,2})(st|nd|rd|th|\.|er|ème|te|º|ª|-й|वां|日|일|z|день)?\s+[\p{L}\p{M}]+\s+\d{4}\b/u, 'DD MMMM YYYY dddd': /^([1-9]|[12][0-9]|3[01]) \p{L}+ (17|18|19|20|21)\d\d \p{L}+$/u, 'dddd, DD MMMM YYYY': /^[\p{L}\p{M}]+, ([1-9]|[12][0-9]|3[01])+ [\p{L}\p{M}]+ (17|18|19|20|21)\d\d/u, 'DD MMMM dddd, YYYY': /^([1-9]|[12][0-9]|3[01])+ [\p{L}\p{M}]+ [\p{L}\p{M}]+, (17|18|19|20|21)\d\d/u, 'MMMM YYYY': /^\p{L}+ (17|18|19|20|21)\d\d$/u, 'DD MMMM dddd YYYY': /^[0-3]?[0-9] [\p{L}\p{M}]+ [\p{L}\p{M}]+ (17|18|19|20|21)\d\d$/u, 'HH:mm:ss': /^([01]\d|2[0-9]):([0-5]\d):([0-5]\d)$/, 'HH:mm:ss.SSS': /^([01]\d|2[0-9]):([0-5]\d):([0-5]\d)\.(\d{3})$/, 'HH:mm': /^([01]\d|2[0-9]):([0-5]\d)(?::[0-5]\d)?$/, 'hh:mm': /^(0[1-9]|1[0-2]):([0-5][0-9]) (AM|PM)$/, 'hh:mm:ss': /^(0[1-9]|1[0-2]):([0-5][0-9]):([0-5]\d) (AM|PM)$/, 'hh:mm:ss.SSS': /^(0[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9])\.(\d{3}) (AM|PM)$/, HH: /^([01]\d|2[0-9])$/, mm: /^([0-5]\d)$/, ss: /^([0-5]\d)$/, MMM: /^[\p{L}\p{M}]+$/u, MMMM: /^\p{L}+$/u, ddd: /^[\p{L}\p{M}]$/, 'DD MMM YYYY': /^(0[1-9]|[12][0-9]|3[01]) [\p{L}\p{M}]+ (|17|18|19|20|21)\d\d$/u, 'DD MMM': /^(0[1-9]|[12][0-9]|3[01]) [\p{L}\p{M}]+$$/u, 'MMM YYYY': /^[\p{L}\p{M}]+ (|17|18|19|20|21)\d\d$/u, 'DD MMM YYYY HH:mm': /^(0[1-9]|[12][0-9]|3[01]) [\p{L}\p{M}]+ (|17|18|19|20|21)\d\d ([01]\d|2[0-9]):([0-5]\d)$/u, 'YYYY-MM': /^(17|18|19|20|21)\d\d-(0[1-9]|1[0-2])$/, 'DD MMMM dddd': /^(0[1-9]|[12][0-9]|3[01]) [\p{L}\p{M}]+ [\p{L}\p{M}]+$/u, 'YYYY-DD-MM': /^(17|18|19|20|21)\d\d-(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])$/, 'D MMMM YYYY': /^(0?[1-9]|[12][0-9]|3[01]) \p{L}+ (|17|18|19|20|21)\d\d$/, 'MM/DD/YYYY': /^(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])\/(17|18|19|20|21)\d\d$/, 'DD/MM/YYYY': /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/(17|18|19|20|21)\d\d$/, 'YYYY-MM-DD HH': /^(17|18|19|20|21)\d\d-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]) ([01]\d|2[0-3])$/, 'DD-MM-YYYY HH': /^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])-(17|18|19|20|21)\d\d ([01]\d|2[0-3])$/, 'YYYY.MM.DD HH': /^(17|18|19|20|21)\d\d\.(0[1-9]|1[0-2])\.(0[1-9]|[12][0-9]|3[01]) ([01]\d|2[0-3])$/, 'YYYY MMM DD': /^(|17|18|19|20|21)\d\d [\p{L}\p{M}]+ (0[1-9]|[12][0-9]|3[01])$/u, 'YYYY MMMM DD': /^(|17|18|19|20|21)\d\d [\p{L}\p{M}]+ (0[1-9]|[12][0-9]|3[01])$/u, 'YYYY-MM-DDTHH:mm:ss': /^(17|18|19|20|21)\d\d-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01]\d|2[0-3]):([0-5]\d):([0-5]\d)$/, 'DD MMMM': /^(0?[1-9]|[12][0-9]|3[01]) \p{L}+$/u, }; const format_types_cache = new Map(); for (const key in format_types) { format_types_cache.set(key, format_types[key]); } const format_types_regex_cache = new Map(); for (const key in format_types_regex) { format_types_regex_cache.set(key, format_types_regex[key]); } const month_numbers = { 1: 'January', 2: 'February', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August', 9: 'September', 10: 'October', 11: 'November', 12: 'December', }; const day_numbers = { 1: 'Monday', 2: 'Tuesday', 3: 'Wednesday', 4: 'Thursday', 5: 'Friday', 6: 'Saturday', 7: 'Sunday', }; const iso6391_languages = { ab: 'Abkhazian', aa: 'Afar', af: 'Afrikaans', sq: 'Albanian', am: 'Amharic', ar: 'Arabic', hy: 'Armenian', as: 'Assamese', ay: 'Aymara', az: 'Azerbaijani', bm: 'Bambara', ba: 'Bashkir', eu: 'Basque', be: 'Belarusian', bn: 'Bengali', bh: 'Bihari', bi: 'Bislama', bs: 'Bosnian', br: 'Breton', bg: 'Bulgarian', my: 'Burmese', ca: 'Catalan', ch: 'Chamorro', ce: 'Chechen', ny: 'Chichewa', zh: 'Chinese', cv: 'Chuvash', kw: 'Cornish', co: 'Corsican', hr: 'Croatian', cs: 'Czech', da: 'Danish', dv: 'Divehi', nl: 'Dutch', en: 'English', eo: 'Esperanto', et: 'Estonian', tl: 'Filipino', fi: 'Finnish', fo: 'Faroese', fr: 'French', de: 'German', el: 'Greek', gu: 'Gujarati', hi: 'Hindi', hu: 'Hungarian', is: 'Icelandic', id: 'Indonesian', it: 'Italian', ja: 'Japanese', jw: 'Javanese', ka: 'Georgian', kn: 'Kannada', km: 'Khmer', ko: 'Korean', la: 'Latin', lv: 'Latvian', lt: 'Lithuanian', mk: 'Macedonian', ml: 'Malayalam', mr: 'Marathi', ms: 'Malay', ne: 'Nepali', no: 'Norwegian', fa: 'Persian', pl: 'Polish', pt: 'Portuguese', pa: 'Punjabi', qu: 'Quechua', ro: 'Romanian', ru: 'Russian', sr: 'Serbian', si: 'Sinhalese', sk: 'Slovak', sl: 'Slovenian', es: 'Spanish', su: 'Sundanese', sw: 'Swahili', sv: 'Swedish', ta: 'Tamil', te: 'Telugu', th: 'Thai', tr: 'Turkish', uk: 'Ukrainian', ur: 'Urdu', vi: 'Vietnamese', cy: 'Welsh', xh: 'Xhosa', yi: 'Yiddish', zu: 'Zulu', }; const default_en_day_number = new Intl.DateTimeFormat('en', { day: 'numeric' }); const timezone_cache = new Map(); const timezone_check_cache = new Map(); const timezone_abbreviation_cache = new Map(); const target_timezone_cache = new Map(); const long_timezone_cache = new Map(); const timezone_formatter_cache = new Map(); const cached_dateTimeFormat = { dddd: new Intl.DateTimeFormat('en', { weekday: 'long', }), ddd: new Intl.DateTimeFormat('en', { weekday: 'short', }), MMMM: new Intl.DateTimeFormat('en', { month: 'long', }), MMM: new Intl.DateTimeFormat('en', { month: 'short' }), temp: { dddd: {}, ddd: {}, MMMM: {}, MMM: {}, }, }; const cached_dateTimeFormat_with_locale = { dddd: {}, ddd: {}, MMMM: {}, MMM: {}, }; const global_config = { locale: 'en', timezone: Intl.DateTimeFormat().resolvedOptions().timeZone, userTimezone: Intl.DateTimeFormat().resolvedOptions().timeZone, rtf: {}, weekStartDay: 0, }; const cached_converter_int = {}; const converter_results_cache = new Map(); const formatter_cache = new Map(); const systemTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone; module.exports.cache_ttl = cache_ttl; module.exports.timeInMilliseconds = timeInMilliseconds; module.exports.format_types = format_types; module.exports.format_types_cache = format_types_cache; module.exports.format_types_regex_cache = format_types_regex_cache; module.exports.month_numbers = month_numbers; module.exports.day_numbers = day_numbers; module.exports.iso6391_languages = iso6391_languages; module.exports.default_en_day_number = default_en_day_number; module.exports.format_types_regex = format_types_regex; module.exports.timezone_cache = timezone_cache; module.exports.timezone_check_cache = timezone_check_cache; module.exports.timezone_abbreviation_cache = timezone_abbreviation_cache; module.exports.target_timezone_cache = target_timezone_cache; module.exports.long_timezone_cache = long_timezone_cache; module.exports.timezone_formatter_cache = timezone_formatter_cache; module.exports.cached_dateTimeFormat = cached_dateTimeFormat; module.exports.global_config = global_config; module.exports.systemTimezone = systemTimezone; module.exports.cached_converter_int = cached_converter_int; module.exports.converter_results_cache = converter_results_cache; module.exports.formatter_cache = formatter_cache; module.exports.cached_dateTimeFormat_with_locale = cached_dateTimeFormat_with_locale;