305 lines
14 KiB
JavaScript
305 lines
14 KiB
JavaScript
const dateLocales = {
|
||
de: {
|
||
months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
|
||
monthsShort: 'Jan_Feb_März_Apr_Mai_Juni_Juli_Aug_Sept_Okt_Nov_Dez'.split('_'),
|
||
weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
|
||
weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
|
||
weekdaysLetter: 'S_M_D_M_D_F_S'.split('_')
|
||
},
|
||
no: {
|
||
months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
|
||
monthsShort: 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
|
||
weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
|
||
weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),
|
||
weekdaysLetter: []
|
||
},
|
||
en: {
|
||
months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
|
||
monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
|
||
weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
|
||
weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
|
||
weekdaysLetter: []
|
||
},
|
||
es: {
|
||
months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
|
||
monthsShort: 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
|
||
weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
|
||
weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
|
||
weekdaysLetter: 'D_L_M_X_J_V_S'.split('_')
|
||
},
|
||
af: {
|
||
months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),
|
||
monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
|
||
weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),
|
||
weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
|
||
weekdaysLetter: []
|
||
},
|
||
ar: {
|
||
months: ['كانون الثاني يناير', 'شباط فبراير', 'آذار مارس', 'نيسان أبريل', 'أيار مايو', 'حزيران يونيو', 'تموز يوليو', 'آب أغسطس', 'أيلول سبتمبر', 'تشرين الأول أكتوبر', 'تشرين الثاني نوفمبر', 'كانون الأول ديسمبر'],
|
||
monthsShort: ['كانون الثاني يناير', 'شباط فبراير', 'آذار مارس', 'نيسان أبريل', 'أيار مايو', 'حزيران يونيو', 'تموز يوليو', 'آب أغسطس', 'أيلول سبتمبر', 'تشرين الأول أكتوبر', 'تشرين الثاني نوفمبر', 'كانون الأول ديسمبر'],
|
||
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
|
||
weekdaysLetter: []
|
||
},
|
||
be: {
|
||
months: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_'),
|
||
monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
|
||
weekdays: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
|
||
weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
|
||
weekdaysLetter: []
|
||
},
|
||
bg: {
|
||
months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),
|
||
monthsShort: 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
|
||
weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),
|
||
weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
|
||
weekdaysLetter: []
|
||
},
|
||
bn: {
|
||
months: 'জানুয়ারী_ফেবুয়ারী_মার্চ_এপ্রিল_মে_জুন_জুলাই_অগাস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
|
||
monthsShort: 'জানু_ফেব_মার্চ_এপর_মে_জুন_জুল_অগ_সেপ্ট_অক্টো_নভ_ডিসেম্'.split('_'),
|
||
weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পত্তিবার_শুক্রবার_শনিবার'.split('_'),
|
||
weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পত্তি_শুক্র_শনি'.split('_'),
|
||
weekdaysLetter: []
|
||
},
|
||
bo: {
|
||
months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
|
||
monthsShort: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
|
||
weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),
|
||
weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
|
||
weekdaysLetter: []
|
||
},
|
||
br: {
|
||
months: 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),
|
||
monthsShort: 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
|
||
weekdays: 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'),
|
||
weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
|
||
weekdaysLetter: []
|
||
},
|
||
bs: {
|
||
months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),
|
||
monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),
|
||
weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
|
||
weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
|
||
weekdaysLetter: []
|
||
},
|
||
ca: {
|
||
months: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),
|
||
monthsShort: 'gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.'.split('_'),
|
||
weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),
|
||
weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
|
||
weekdaysLetter: 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_')
|
||
},
|
||
gl: {
|
||
months: 'Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro'.split('_'),
|
||
monthsShort: 'Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.'.split('_'),
|
||
weekdays: 'Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado'.split('_'),
|
||
weekdaysShort: 'Dom._Lun._Mar._Mér._Xov._Ven._Sáb.'.split('_'),
|
||
weekdaysLetter: 'Do_Lu_Ma_Mé_Xo_Ve_Sá'.split('_')
|
||
},
|
||
eu: {
|
||
months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),
|
||
monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),
|
||
weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),
|
||
weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),
|
||
weekdaysLetter: 'ig_al_ar_az_og_ol_lr'.split('_')
|
||
},
|
||
pt: {
|
||
months: 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
|
||
monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
|
||
weekdays: 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),
|
||
weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
|
||
weekdaysLetter: []
|
||
},
|
||
it: {
|
||
months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
|
||
monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
|
||
weekdays: 'Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato'.split('_'),
|
||
weekdaysShort: 'Dom_Lun_Mar_Mer_Gio_Ven_Sab'.split('_'),
|
||
weekdaysLetter: []
|
||
},
|
||
fr: {
|
||
months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
|
||
monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
|
||
weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
|
||
weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
|
||
weekdaysLetter: []
|
||
},
|
||
ru: {
|
||
months: 'Январь_Февраль_Март_Апрель_Май_Июнь_Июль_Август_Сентябрь_Октябрь_Ноябрь_Декабрь'.split('_'),
|
||
monthsShort: 'Янв_Фев_Мар_Апр_Май_Июн_Июл_Авг_Сен_Окт_Ноя_Дек'.split('_'),
|
||
weekdays: 'Воскресенье_Понедельник_Вторник_Среда_Четверг_Пятница_Суббота'.split('_'),
|
||
weekdaysShort: 'Вс_Пн_Вт_Ср_Чт_Пт_Сб'.split('_'),
|
||
weekdaysLetter: []
|
||
},
|
||
ua: {
|
||
months: 'Січень_Лютий_Березень_Квітень_Травень_Червень_Липень_Серпень_Вересень_Жовтень_Листопад_Грудень'.split('_'),
|
||
monthsShort: 'Січ_Лют_Берез_Квіт_Трав_Черв_Лип_Серп_Верес_Жовт_Листоп_Груд'.split('_'),
|
||
weekdays: 'Неділя_Понеділок_Вівторок_Середа_Четвер_П’ятниця_Субота'.split('_'),
|
||
weekdaysShort: 'Нд_Пн_Вт_Ср_Чт_Пт_Сб'.split('_'),
|
||
weekdaysLetter: []
|
||
}
|
||
};
|
||
|
||
const time = {
|
||
getDaysInMonth (d) {
|
||
const resultDate = this.getFirstDayOfMonth(d);
|
||
resultDate.setMonth(resultDate.getMonth() + 1);
|
||
resultDate.setDate(resultDate.getDate() - 1);
|
||
return resultDate.getDate();
|
||
},
|
||
|
||
getFirstDayOfMonth (d) {
|
||
return new Date(d.getFullYear(), d.getMonth(), 1);
|
||
},
|
||
|
||
getFirstWeekDay (d) {
|
||
return this.getFirstDayOfMonth(d).getDay();
|
||
},
|
||
|
||
getTimeMode (d) {
|
||
return d.getHours() >= 12 ? 'pm' : 'am';
|
||
},
|
||
|
||
getFullMonth (d, locale = 'en') {
|
||
const month = d.getMonth();
|
||
const l = ((typeof locale === 'string') ? dateLocales[locale] : locale) || dateLocales.en;
|
||
return (l.hasOwnProperty('months')) ? l.months[month] || 'Unknown' : 'Unknown';
|
||
},
|
||
|
||
getShortMonth (d, locale = 'en') {
|
||
const month = d.getMonth();
|
||
const l = ((typeof locale === 'string') ? dateLocales[locale] : locale) || dateLocales.en;
|
||
return (l.hasOwnProperty('monthsShort')) ? l.monthsShort[month] || 'Unknown' : 'Unknown';
|
||
},
|
||
|
||
getFullDayOfWeek (day, locale = 'en') {
|
||
const l = ((typeof locale === 'string') ? dateLocales[locale] : locale) || dateLocales.en;
|
||
return (l.hasOwnProperty('weekdays')) ? l.weekdays[day] || 'Unknown' : 'Unknown';
|
||
},
|
||
|
||
getShortDayOfWeek (day, locale = 'en') {
|
||
const l = ((typeof locale === 'string') ? dateLocales[locale] : locale) || dateLocales.en;
|
||
return (l.hasOwnProperty('weekdaysShort')) ? l.weekdaysShort[day] || 'Unknown' : 'Unknown';
|
||
},
|
||
|
||
getDayOfWeekLetter (day, locale = 'en') {
|
||
const l = ((typeof locale === 'string') ? dateLocales[locale] : locale) || dateLocales.en;
|
||
return (l.hasOwnProperty('weekdaysLetter')) ? l.weekdaysLetter[day] || this.getFullDayOfWeek(day, locale).charAt(0) : 'Unknown';
|
||
},
|
||
|
||
clone (d) {
|
||
return new Date(d.getTime());
|
||
},
|
||
|
||
cloneAsDate (d) {
|
||
const clonedDate = this.clone(d);
|
||
clonedDate.setHours(0, 0, 0, 0);
|
||
return clonedDate;
|
||
},
|
||
|
||
isDateObject (d) {
|
||
return d instanceof Date;
|
||
},
|
||
|
||
addDays (d, days) {
|
||
const newDate = this.clone(d);
|
||
newDate.setDate(d.getDate() + days);
|
||
return newDate;
|
||
},
|
||
|
||
addMonths (d, months) {
|
||
const newDate = this.clone(d);
|
||
newDate.setMonth(d.getMonth() + months, 1);
|
||
return newDate;
|
||
},
|
||
|
||
addYears (d, years) {
|
||
const newDate = this.clone(d);
|
||
newDate.setFullYear(d.getFullYear() + years);
|
||
return newDate;
|
||
},
|
||
|
||
setDay (d, day) {
|
||
const newDate = this.clone(d);
|
||
newDate.setDate(day);
|
||
return newDate;
|
||
},
|
||
|
||
setMonth (d, month) {
|
||
const newDate = this.clone(d);
|
||
newDate.setMonth(month);
|
||
return newDate;
|
||
},
|
||
|
||
setYear (d, year) {
|
||
const newDate = this.clone(d);
|
||
newDate.setFullYear(year);
|
||
return newDate;
|
||
},
|
||
|
||
setHours (d, hours) {
|
||
const newDate = this.clone(d);
|
||
newDate.setHours(hours);
|
||
return newDate;
|
||
},
|
||
|
||
setMinutes (d, minutes) {
|
||
const newDate = this.clone(d);
|
||
newDate.setMinutes(minutes);
|
||
return newDate;
|
||
},
|
||
|
||
toggleTimeMode (d) {
|
||
const newDate = this.clone(d);
|
||
const hours = newDate.getHours();
|
||
|
||
newDate.setHours(hours - (hours > 12 ? -12 : 12));
|
||
return newDate;
|
||
},
|
||
|
||
formatTime (date, format) {
|
||
let hours = date.getHours();
|
||
let mins = date.getMinutes().toString();
|
||
|
||
if (format === 'ampm') {
|
||
const isAM = hours < 12;
|
||
const additional = isAM ? ' am' : ' pm';
|
||
|
||
hours = hours % 12;
|
||
hours = (hours || 12).toString();
|
||
if (mins.length < 2) mins = '0' + mins;
|
||
|
||
return hours + (mins === '00' ? '' : ':' + mins) + additional;
|
||
}
|
||
|
||
hours = hours.toString();
|
||
if (hours.length < 2) hours = '0' + hours;
|
||
if (mins.length < 2) mins = '0' + mins;
|
||
return hours + ':' + mins;
|
||
},
|
||
|
||
dateOutOfRange (date, minDate, maxDate) {
|
||
return ((minDate && !(date >= minDate)) || (maxDate && !(date <= maxDate)));
|
||
},
|
||
|
||
closestDate (to, date1, date2) {
|
||
const toTime = to.getTime();
|
||
|
||
const diff1 = Math.abs(toTime - date1.getTime());
|
||
const diff2 = Math.abs(toTime - date2.getTime());
|
||
|
||
return diff1 < diff2 ? date1 : date2;
|
||
},
|
||
|
||
formatDate (date, locale = 'en') {
|
||
if (locale === 'en') {
|
||
return `${date.getDate()} ${time.getFullMonth(date, locale)} ${date.getFullYear()}`;
|
||
} else {
|
||
return `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear()}`;
|
||
}
|
||
}
|
||
};
|
||
|
||
export default time;
|