diff --git a/ajax/libs/moment.js/2.8.0/locales.js b/ajax/libs/moment.js/2.8.0/locales.js new file mode 100644 index 000000000..f6690304d --- /dev/null +++ b/ajax/libs/moment.js/2.8.0/locales.js @@ -0,0 +1,6807 @@ +// moment.js locale configuration +// locale : afrikaans (af) +// author : Werner Mollentze : https://github.com/wernerm + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('af', { + months : "Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"), + monthsShort : "Jan_Feb_Mar_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("_"), + weekdaysMin : "So_Ma_Di_Wo_Do_Vr_Sa".split("_"), + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'vm' : 'VM'; + } else { + return isLower ? 'nm' : 'NM'; + } + }, + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[Vandag om] LT', + nextDay : '[Môre om] LT', + nextWeek : 'dddd [om] LT', + lastDay : '[Gister om] LT', + lastWeek : '[Laas] dddd [om] LT', + sameElse : 'L' + }, + relativeTime : { + future : "oor %s", + past : "%s gelede", + s : "'n paar sekondes", + m : "'n minuut", + mm : "%d minute", + h : "'n uur", + hh : "%d ure", + d : "'n dag", + dd : "%d dae", + M : "'n maand", + MM : "%d maande", + y : "'n jaar", + yy : "%d jaar" + }, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter + }, + week : { + dow : 1, // Maandag is die eerste dag van die week. + doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar. + } + }); +})); + +// moment.js locale configuration +// locale : Moroccan Arabic (ar-ma) +// author : ElFadili Yassine : https://github.com/ElFadiliY +// author : Abdel Said : https://github.com/abdelsaid + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('ar-ma', { + months : "يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"), + monthsShort : "يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"), + weekdays : "الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"), + weekdaysShort : "احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"), + weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: "[اليوم على الساعة] LT", + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : "في %s", + past : "منذ %s", + s : "ثوان", + m : "دقيقة", + mm : "%d دقائق", + h : "ساعة", + hh : "%d ساعات", + d : "يوم", + dd : "%d أيام", + M : "شهر", + MM : "%d أشهر", + y : "سنة", + yy : "%d سنوات" + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : Arabic Saudi Arabia (ar-sa) +// author : Suhail Alkowaileet : https://github.com/xsoh + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var symbolMap = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠' + }, numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0' + }; + + return moment.defineLocale('ar-sa', { + months : "يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"), + monthsShort : "يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"), + weekdays : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"), + weekdaysShort : "أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"), + weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return "ص"; + } else { + return "م"; + } + }, + calendar : { + sameDay: "[اليوم على الساعة] LT", + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : "في %s", + past : "منذ %s", + s : "ثوان", + m : "دقيقة", + mm : "%d دقائق", + h : "ساعة", + hh : "%d ساعات", + d : "يوم", + dd : "%d أيام", + M : "شهر", + MM : "%d أشهر", + y : "سنة", + yy : "%d سنوات" + }, + preparse: function (string) { + return string.replace(/[۰-۹]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : Arabic (ar) +// author : Abdel Said : https://github.com/abdelsaid +// changes in months, weekdays : Ahmed Elkhatib + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var symbolMap = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠' + }, numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0' + }; + + return moment.defineLocale('ar', { + months : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"), + monthsShort : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"), + weekdays : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"), + weekdaysShort : "أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"), + weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return "ص"; + } else { + return "م"; + } + }, + calendar : { + sameDay: "[اليوم على الساعة] LT", + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : "في %s", + past : "منذ %s", + s : "ثوان", + m : "دقيقة", + mm : "%d دقائق", + h : "ساعة", + hh : "%d ساعات", + d : "يوم", + dd : "%d أيام", + M : "شهر", + MM : "%d أشهر", + y : "سنة", + yy : "%d سنوات" + }, + preparse: function (string) { + return string.replace(/[۰-۹]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : azerbaijani (az) +// author : topchiyev : https://github.com/topchiyev + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var suffixes = { + 1: "-inci", + 5: "-inci", + 8: "-inci", + 70: "-inci", + 80: "-inci", + + 2: "-nci", + 7: "-nci", + 20: "-nci", + 50: "-nci", + + 3: "-üncü", + 4: "-üncü", + 100: "-üncü", + + 6: "-ncı", + + 9: "-uncu", + 10: "-uncu", + 30: "-uncu", + + 60: "-ıncı", + 90: "-ıncı" + }; + return moment.defineLocale('az', { + months : "yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"), + monthsShort : "yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"), + weekdays : "Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"), + weekdaysShort : "Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"), + weekdaysMin : "Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[bugün saat] LT', + nextDay : '[sabah saat] LT', + nextWeek : '[gələn həftə] dddd [saat] LT', + lastDay : '[dünən] LT', + lastWeek : '[keçən həftə] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s sonra", + past : "%s əvvəl", + s : "birneçə saniyyə", + m : "bir dəqiqə", + mm : "%d dəqiqə", + h : "bir saat", + hh : "%d saat", + d : "bir gün", + dd : "%d gün", + M : "bir ay", + MM : "%d ay", + y : "bir il", + yy : "%d il" + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "gecə"; + } else if (hour < 12) { + return "səhər"; + } else if (hour < 17) { + return "gündüz"; + } else { + return "axşam"; + } + }, + ordinal : function (number) { + if (number === 0) { // special case for zero + return number + "-ıncı"; + } + var a = number % 10, + b = number % 100 - a, + c = number >= 100 ? 100 : null; + + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : belarusian (be) +// author : Dmitry Demidov : https://github.com/demidov91 +// author: Praleska: http://praleska.pro/ +// Author : Menelion Elensúle : https://github.com/Oire + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); + } + + function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін', + 'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін', + 'dd': 'дзень_дні_дзён', + 'MM': 'месяц_месяцы_месяцаў', + 'yy': 'год_гады_гадоў' + }; + if (key === 'm') { + return withoutSuffix ? 'хвіліна' : 'хвіліну'; + } + else if (key === 'h') { + return withoutSuffix ? 'гадзіна' : 'гадзіну'; + } + else { + return number + ' ' + plural(format[key], +number); + } + } + + function monthsCaseReplace(m, format) { + var months = { + 'nominative': 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_'), + 'accusative': 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_') + }, + + nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ? + 'accusative' : + 'nominative'; + + return months[nounCase][m.month()]; + } + + function weekdaysCaseReplace(m, format) { + var weekdays = { + 'nominative': 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'), + 'accusative': 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_') + }, + + nounCase = (/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/).test(format) ? + 'accusative' : + 'nominative'; + + return weekdays[nounCase][m.day()]; + } + + return moment.defineLocale('be', { + months : monthsCaseReplace, + monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'), + weekdays : weekdaysCaseReplace, + weekdaysShort : "нд_пн_ат_ср_чц_пт_сб".split("_"), + weekdaysMin : "нд_пн_ат_ср_чц_пт_сб".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY г.", + LLL : "D MMMM YYYY г., LT", + LLLL : "dddd, D MMMM YYYY г., LT" + }, + calendar : { + sameDay: '[Сёння ў] LT', + nextDay: '[Заўтра ў] LT', + lastDay: '[Учора ў] LT', + nextWeek: function () { + return '[У] dddd [ў] LT'; + }, + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return '[У мінулую] dddd [ў] LT'; + case 1: + case 2: + case 4: + return '[У мінулы] dddd [ў] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : "праз %s", + past : "%s таму", + s : "некалькі секунд", + m : relativeTimeWithPlural, + mm : relativeTimeWithPlural, + h : relativeTimeWithPlural, + hh : relativeTimeWithPlural, + d : "дзень", + dd : relativeTimeWithPlural, + M : "месяц", + MM : relativeTimeWithPlural, + y : "год", + yy : relativeTimeWithPlural + }, + + + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "ночы"; + } else if (hour < 12) { + return "раніцы"; + } else if (hour < 17) { + return "дня"; + } else { + return "вечара"; + } + }, + + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы'; + case 'D': + return number + '-га'; + default: + return number; + } + }, + + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : bulgarian (bg) +// author : Krasen Borisov : https://github.com/kraz + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('bg', { + months : "януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"), + monthsShort : "янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"), + weekdays : "неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"), + weekdaysShort : "нед_пон_вто_сря_чет_пет_съб".split("_"), + weekdaysMin : "нд_пн_вт_ср_чт_пт_сб".split("_"), + longDateFormat : { + LT : "H:mm", + L : "D.MM.YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[Днес в] LT', + nextDay : '[Утре в] LT', + nextWeek : 'dddd [в] LT', + lastDay : '[Вчера в] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[В изминалата] dddd [в] LT'; + case 1: + case 2: + case 4: + case 5: + return '[В изминалия] dddd [в] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : "след %s", + past : "преди %s", + s : "няколко секунди", + m : "минута", + mm : "%d минути", + h : "час", + hh : "%d часа", + d : "ден", + dd : "%d дни", + M : "месец", + MM : "%d месеца", + y : "година", + yy : "%d години" + }, + ordinal : function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : Bengali (bn) +// author : Kaushik Gandhi : https://github.com/kaushikgandhi + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var symbolMap = { + '1': '১', + '2': '২', + '3': '৩', + '4': '৪', + '5': '৫', + '6': '৬', + '7': '৭', + '8': '৮', + '9': '৯', + '0': '০' + }, + numberMap = { + '১': '1', + '২': '2', + '৩': '3', + '৪': '4', + '৫': '5', + '৬': '6', + '৭': '7', + '৮': '8', + '৯': '9', + '০': '0' + }; + + return moment.defineLocale('bn', { + months : 'জানুয়ারী_ফেবুয়ারী_মার্চ_এপ্রিল_মে_জুন_জুলাই_অগাস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split("_"), + monthsShort : 'জানু_ফেব_মার্চ_এপর_মে_জুন_জুল_অগ_সেপ্ট_অক্টো_নভ_ডিসেম্'.split("_"), + weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পত্তিবার_শুক্রুবার_শনিবার'.split("_"), + weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পত্তি_শুক্রু_শনি'.split("_"), + weekdaysMin : 'রব_সম_মঙ্গ_বু_ব্রিহ_শু_শনি'.split("_"), + longDateFormat : { + LT : "A h:mm সময়", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY, LT", + LLLL : "dddd, D MMMM YYYY, LT" + }, + calendar : { + sameDay : '[আজ] LT', + nextDay : '[আগামীকাল] LT', + nextWeek : 'dddd, LT', + lastDay : '[গতকাল] LT', + lastWeek : '[গত] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s পরে", + past : "%s আগে", + s : "কএক সেকেন্ড", + m : "এক মিনিট", + mm : "%d মিনিট", + h : "এক ঘন্টা", + hh : "%d ঘন্টা", + d : "এক দিন", + dd : "%d দিন", + M : "এক মাস", + MM : "%d মাস", + y : "এক বছর", + yy : "%d বছর" + }, + preparse: function (string) { + return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + //Bengali is a vast language its spoken + //in different forms in various parts of the world. + //I have just generalized with most common one used + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "রাত"; + } else if (hour < 10) { + return "শকাল"; + } else if (hour < 17) { + return "দুপুর"; + } else if (hour < 20) { + return "বিকেল"; + } else { + return "রাত"; + } + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : tibetan (bo) +// author : Thupten N. Chakrishar : https://github.com/vajradog + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var symbolMap = { + '1': '༡', + '2': '༢', + '3': '༣', + '4': '༤', + '5': '༥', + '6': '༦', + '7': '༧', + '8': '༨', + '9': '༩', + '0': '༠' + }, + numberMap = { + '༡': '1', + '༢': '2', + '༣': '3', + '༤': '4', + '༥': '5', + '༦': '6', + '༧': '7', + '༨': '8', + '༩': '9', + '༠': '0' + }; + + return moment.defineLocale('bo', { + months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split("_"), + monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split("_"), + weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split("_"), + weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split("_"), + weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split("_"), + longDateFormat : { + LT : "A h:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY, LT", + LLLL : "dddd, D MMMM YYYY, LT" + }, + calendar : { + sameDay : '[དི་རིང] LT', + nextDay : '[སང་ཉིན] LT', + nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT', + lastDay : '[ཁ་སང] LT', + lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s ལ་", + past : "%s སྔན་ལ", + s : "ལམ་སང", + m : "སྐར་མ་གཅིག", + mm : "%d སྐར་མ", + h : "ཆུ་ཚོད་གཅིག", + hh : "%d ཆུ་ཚོད", + d : "ཉིན་གཅིག", + dd : "%d ཉིན་", + M : "ཟླ་བ་གཅིག", + MM : "%d ཟླ་བ", + y : "ལོ་གཅིག", + yy : "%d ལོ" + }, + preparse: function (string) { + return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "མཚན་མོ"; + } else if (hour < 10) { + return "ཞོགས་ཀས"; + } else if (hour < 17) { + return "ཉིན་གུང"; + } else if (hour < 20) { + return "དགོང་དག"; + } else { + return "མཚན་མོ"; + } + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : breton (br) +// author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + function relativeTimeWithMutation(number, withoutSuffix, key) { + var format = { + 'mm': "munutenn", + 'MM': "miz", + 'dd': "devezh" + }; + return number + ' ' + mutation(format[key], number); + } + + function specialMutationForYears(number) { + switch (lastNumber(number)) { + case 1: + case 3: + case 4: + case 5: + case 9: + return number + ' bloaz'; + default: + return number + ' vloaz'; + } + } + + function lastNumber(number) { + if (number > 9) { + return lastNumber(number % 10); + } + return number; + } + + function mutation(text, number) { + if (number === 2) { + return softMutation(text); + } + return text; + } + + function softMutation(text) { + var mutationTable = { + 'm': 'v', + 'b': 'v', + 'd': 'z' + }; + if (mutationTable[text.charAt(0)] === undefined) { + return text; + } + return mutationTable[text.charAt(0)] + text.substring(1); + } + + return moment.defineLocale('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("_"), + weekdaysMin : "Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"), + longDateFormat : { + LT : "h[e]mm A", + L : "DD/MM/YYYY", + LL : "D [a viz] MMMM YYYY", + LLL : "D [a viz] MMMM YYYY LT", + LLLL : "dddd, D [a viz] MMMM YYYY LT" + }, + calendar : { + sameDay : '[Hiziv da] LT', + nextDay : '[Warc\'hoazh da] LT', + nextWeek : 'dddd [da] LT', + lastDay : '[Dec\'h da] LT', + lastWeek : 'dddd [paset da] LT', + sameElse : 'L' + }, + relativeTime : { + future : "a-benn %s", + past : "%s 'zo", + s : "un nebeud segondennoù", + m : "ur vunutenn", + mm : relativeTimeWithMutation, + h : "un eur", + hh : "%d eur", + d : "un devezh", + dd : relativeTimeWithMutation, + M : "ur miz", + MM : relativeTimeWithMutation, + y : "ur bloaz", + yy : specialMutationForYears + }, + ordinal : function (number) { + var output = (number === 1) ? 'añ' : 'vet'; + return number + output; + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : bosnian (bs) +// author : Nedim Cholich : https://github.com/frontyard +// based on (hr) translation by Bojan Marković + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + function translate(number, withoutSuffix, key) { + var result = number + " "; + switch (key) { + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } + } + + return moment.defineLocale('bs', { + months : "januar_februar_mart_april_maj_juni_juli_avgust_septembar_oktobar_novembar_decembar".split("_"), + monthsShort : "jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"), + weekdays : "nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"), + weekdaysShort : "ned._pon._uto._sri._čet._pet._sub.".split("_"), + weekdaysMin : "ne_po_ut_sr_če_pe_su".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD. MM. YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd, D. MMMM YYYY LT" + }, + calendar : { + sameDay : '[danas u] LT', + nextDay : '[sutra u] LT', + + nextWeek : function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[jučer u] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : "za %s", + past : "prije %s", + s : "par sekundi", + m : translate, + mm : translate, + h : translate, + hh : translate, + d : "dan", + dd : translate, + M : "mjesec", + MM : translate, + y : "godinu", + yy : translate + }, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : catalan (ca) +// author : Juan G. Hurtado : https://github.com/juanghurtado + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('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("_"), + weekdaysMin : "Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay : function () { + return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + nextDay : function () { + return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + lastDay : function () { + return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : "en %s", + past : "fa %s", + s : "uns segons", + m : "un minut", + mm : "%d minuts", + h : "una hora", + hh : "%d hores", + d : "un dia", + dd : "%d dies", + M : "un mes", + MM : "%d mesos", + y : "un any", + yy : "%d anys" + }, + ordinal : '%dº', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : czech (cs) +// author : petrbela : https://github.com/petrbela + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var months = "leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"), + monthsShort = "led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"); + + function plural(n) { + return (n > 1) && (n < 5) && (~~(n / 10) !== 1); + } + + function translate(number, withoutSuffix, key, isFuture) { + var result = number + " "; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami'; + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou'); + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'minuty' : 'minut'); + } else { + return result + 'minutami'; + } + break; + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'hodiny' : 'hodin'); + } else { + return result + 'hodinami'; + } + break; + case 'd': // a day / in a day / a day ago + return (withoutSuffix || isFuture) ? 'den' : 'dnem'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'dny' : 'dní'); + } else { + return result + 'dny'; + } + break; + case 'M': // a month / in a month / a month ago + return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'měsíce' : 'měsíců'); + } else { + return result + 'měsíci'; + } + break; + case 'y': // a year / in a year / a year ago + return (withoutSuffix || isFuture) ? 'rok' : 'rokem'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'roky' : 'let'); + } else { + return result + 'lety'; + } + break; + } + } + + return moment.defineLocale('cs', { + months : months, + monthsShort : monthsShort, + monthsParse : (function (months, monthsShort) { + var i, _monthsParse = []; + for (i = 0; i < 12; i++) { + // use custom parser to solve problem with July (červenec) + _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); + } + return _monthsParse; + }(months, monthsShort)), + weekdays : "neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"), + weekdaysShort : "ne_po_út_st_čt_pá_so".split("_"), + weekdaysMin : "ne_po_út_st_čt_pá_so".split("_"), + longDateFormat : { + LT: "H.mm", + L : "DD. MM. YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd D. MMMM YYYY LT" + }, + calendar : { + sameDay: "[dnes v] LT", + nextDay: '[zítra v] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v neděli v] LT'; + case 1: + case 2: + return '[v] dddd [v] LT'; + case 3: + return '[ve středu v] LT'; + case 4: + return '[ve čtvrtek v] LT'; + case 5: + return '[v pátek v] LT'; + case 6: + return '[v sobotu v] LT'; + } + }, + lastDay: '[včera v] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulou neděli v] LT'; + case 1: + case 2: + return '[minulé] dddd [v] LT'; + case 3: + return '[minulou středu v] LT'; + case 4: + case 5: + return '[minulý] dddd [v] LT'; + case 6: + return '[minulou sobotu v] LT'; + } + }, + sameElse: "L" + }, + relativeTime : { + future : "za %s", + past : "před %s", + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + ordinal : '%d.', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : chuvash (cv) +// author : Anatoly Mironov : https://github.com/mirontoli + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('cv', { + months : "кăрлач_нарăс_пуш_ака_май_çĕртме_утă_çурла_авăн_юпа_чӳк_раштав".split("_"), + monthsShort : "кăр_нар_пуш_ака_май_çĕр_утă_çур_ав_юпа_чӳк_раш".split("_"), + weekdays : "вырсарникун_тунтикун_ытларикун_юнкун_кĕçнерникун_эрнекун_шăматкун".split("_"), + weekdaysShort : "выр_тун_ытл_юн_кĕç_эрн_шăм".split("_"), + weekdaysMin : "вр_тн_ыт_юн_кç_эр_шм".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD-MM-YYYY", + LL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ]", + LLL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT", + LLLL : "dddd, YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT" + }, + calendar : { + sameDay: '[Паян] LT [сехетре]', + nextDay: '[Ыран] LT [сехетре]', + lastDay: '[Ĕнер] LT [сехетре]', + nextWeek: '[Çитес] dddd LT [сехетре]', + lastWeek: '[Иртнĕ] dddd LT [сехетре]', + sameElse: 'L' + }, + relativeTime : { + future : function (output) { + var affix = /сехет$/i.exec(output) ? "рен" : /çул$/i.exec(output) ? "тан" : "ран"; + return output + affix; + }, + past : "%s каялла", + s : "пĕр-ик çеккунт", + m : "пĕр минут", + mm : "%d минут", + h : "пĕр сехет", + hh : "%d сехет", + d : "пĕр кун", + dd : "%d кун", + M : "пĕр уйăх", + MM : "%d уйăх", + y : "пĕр çул", + yy : "%d çул" + }, + ordinal : '%d-мĕш', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : Welsh (cy) +// author : Robert Allen + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale("cy", { + months: "Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"), + monthsShort: "Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"), + weekdays: "Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"), + weekdaysShort: "Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"), + weekdaysMin: "Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"), + // time formats are the same as en-gb + longDateFormat: { + LT: "HH:mm", + L: "DD/MM/YYYY", + LL: "D MMMM YYYY", + LLL: "D MMMM YYYY LT", + LLLL: "dddd, D MMMM YYYY LT" + }, + calendar: { + sameDay: '[Heddiw am] LT', + nextDay: '[Yfory am] LT', + nextWeek: 'dddd [am] LT', + lastDay: '[Ddoe am] LT', + lastWeek: 'dddd [diwethaf am] LT', + sameElse: 'L' + }, + relativeTime: { + future: "mewn %s", + past: "%s yn ôl", + s: "ychydig eiliadau", + m: "munud", + mm: "%d munud", + h: "awr", + hh: "%d awr", + d: "diwrnod", + dd: "%d diwrnod", + M: "mis", + MM: "%d mis", + y: "blwyddyn", + yy: "%d flynedd" + }, + // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh + ordinal: function (number) { + var b = number, + output = '', + lookup = [ + '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed + 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed + ]; + + if (b > 20) { + if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) { + output = 'fed'; // not 30ain, 70ain or 90ain + } else { + output = 'ain'; + } + } else if (b > 0) { + output = lookup[b]; + } + + return number + output; + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : danish (da) +// author : Ulrik Nielsen : https://github.com/mrbase + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('da', { + months : "januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"), + monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"), + weekdays : "søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"), + weekdaysShort : "søn_man_tir_ons_tor_fre_lør".split("_"), + weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd [d.] D. MMMM YYYY LT" + }, + calendar : { + sameDay : '[I dag kl.] LT', + nextDay : '[I morgen kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[I går kl.] LT', + lastWeek : '[sidste] dddd [kl] LT', + sameElse : 'L' + }, + relativeTime : { + future : "om %s", + past : "%s siden", + s : "få sekunder", + m : "et minut", + mm : "%d minutter", + h : "en time", + hh : "%d timer", + d : "en dag", + dd : "%d dage", + M : "en måned", + MM : "%d måneder", + y : "et år", + yy : "%d år" + }, + ordinal : '%d.', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : austrian german (de-at) +// author : lluchs : https://github.com/lluchs +// author: Menelion Elensúle: https://github.com/Oire +// author : Martin Groller : https://github.com/MadMG + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + return moment.defineLocale('de-at', { + months : "Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"), + monthsShort : "Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"), + weekdays : "Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"), + weekdaysShort : "So._Mo._Di._Mi._Do._Fr._Sa.".split("_"), + weekdaysMin : "So_Mo_Di_Mi_Do_Fr_Sa".split("_"), + longDateFormat : { + LT: "HH:mm [Uhr]", + L : "DD.MM.YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd, D. MMMM YYYY LT" + }, + calendar : { + sameDay: "[Heute um] LT", + sameElse: "L", + nextDay: '[Morgen um] LT', + nextWeek: 'dddd [um] LT', + lastDay: '[Gestern um] LT', + lastWeek: '[letzten] dddd [um] LT' + }, + relativeTime : { + future : "in %s", + past : "vor %s", + s : "ein paar Sekunden", + m : processRelativeTime, + mm : "%d Minuten", + h : processRelativeTime, + hh : "%d Stunden", + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + ordinal : '%d.', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : german (de) +// author : lluchs : https://github.com/lluchs +// author: Menelion Elensúle: https://github.com/Oire + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + return moment.defineLocale('de', { + months : "Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"), + monthsShort : "Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"), + weekdays : "Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"), + weekdaysShort : "So._Mo._Di._Mi._Do._Fr._Sa.".split("_"), + weekdaysMin : "So_Mo_Di_Mi_Do_Fr_Sa".split("_"), + longDateFormat : { + LT: "HH:mm [Uhr]", + L : "DD.MM.YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd, D. MMMM YYYY LT" + }, + calendar : { + sameDay: "[Heute um] LT", + sameElse: "L", + nextDay: '[Morgen um] LT', + nextWeek: 'dddd [um] LT', + lastDay: '[Gestern um] LT', + lastWeek: '[letzten] dddd [um] LT' + }, + relativeTime : { + future : "in %s", + past : "vor %s", + s : "ein paar Sekunden", + m : processRelativeTime, + mm : "%d Minuten", + h : processRelativeTime, + hh : "%d Stunden", + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + ordinal : '%d.', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : modern greek (el) +// author : Aggelos Karalias : https://github.com/mehiel + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('el', { + monthsNominativeEl : "Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"), + monthsGenitiveEl : "Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"), + months : function (momentToFormat, format) { + if (/D/.test(format.substring(0, format.indexOf("MMMM")))) { // if there is a day number before 'MMMM' + return this._monthsGenitiveEl[momentToFormat.month()]; + } else { + return this._monthsNominativeEl[momentToFormat.month()]; + } + }, + monthsShort : "Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"), + weekdays : "Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"), + weekdaysShort : "Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"), + weekdaysMin : "Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"), + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'μμ' : 'ΜΜ'; + } else { + return isLower ? 'πμ' : 'ΠΜ'; + } + }, + longDateFormat : { + LT : "h:mm A", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendarEl : { + sameDay : '[Σήμερα {}] LT', + nextDay : '[Αύριο {}] LT', + nextWeek : 'dddd [{}] LT', + lastDay : '[Χθες {}] LT', + lastWeek : function () { + switch (this.day()) { + case 6: + return '[το προηγούμενο] dddd [{}] LT'; + default: + return '[την προηγούμενη] dddd [{}] LT'; + } + }, + sameElse : 'L' + }, + calendar : function (key, mom) { + var output = this._calendarEl[key], + hours = mom && mom.hours(); + + if (typeof output === 'function') { + output = output.apply(mom); + } + + return output.replace("{}", (hours % 12 === 1 ? "στη" : "στις")); + }, + relativeTime : { + future : "σε %s", + past : "%s πριν", + s : "δευτερόλεπτα", + m : "ένα λεπτό", + mm : "%d λεπτά", + h : "μία ώρα", + hh : "%d ώρες", + d : "μία μέρα", + dd : "%d μέρες", + M : "ένας μήνας", + MM : "%d μήνες", + y : "ένας χρόνος", + yy : "%d χρόνια" + }, + ordinal : function (number) { + return number + 'η'; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : australian english (en-au) + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('en-au', { + 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("_"), + weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), + longDateFormat : { + LT : "h:mm A", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : "in %s", + past : "%s ago", + s : "a few seconds", + m : "a minute", + mm : "%d minutes", + h : "an hour", + hh : "%d hours", + d : "a day", + dd : "%d days", + M : "a month", + MM : "%d months", + y : "a year", + yy : "%d years" + }, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : canadian english (en-ca) +// author : Jonathan Abourbih : https://github.com/jonbca + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('en-ca', { + 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("_"), + weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), + longDateFormat : { + LT : "h:mm A", + L : "YYYY-MM-DD", + LL : "D MMMM, YYYY", + LLL : "D MMMM, YYYY LT", + LLLL : "dddd, D MMMM, YYYY LT" + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : "in %s", + past : "%s ago", + s : "a few seconds", + m : "a minute", + mm : "%d minutes", + h : "an hour", + hh : "%d hours", + d : "a day", + dd : "%d days", + M : "a month", + MM : "%d months", + y : "a year", + yy : "%d years" + }, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } + }); +})); + +// moment.js locale configuration +// locale : great britain english (en-gb) +// author : Chris Gedrim : https://github.com/chrisgedrim + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('en-gb', { + 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("_"), + weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : "in %s", + past : "%s ago", + s : "a few seconds", + m : "a minute", + mm : "%d minutes", + h : "an hour", + hh : "%d hours", + d : "a day", + dd : "%d days", + M : "a month", + MM : "%d months", + y : "a year", + yy : "%d years" + }, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : esperanto (eo) +// author : Colin Dean : https://github.com/colindean +// komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko. +// Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni! + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('eo', { + months : "januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"), + monthsShort : "jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"), + weekdays : "Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"), + weekdaysShort : "Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab".split("_"), + weekdaysMin : "Di_Lu_Ma_Me_Ĵa_Ve_Sa".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "YYYY-MM-DD", + LL : "D[-an de] MMMM, YYYY", + LLL : "D[-an de] MMMM, YYYY LT", + LLLL : "dddd, [la] D[-an de] MMMM, YYYY LT" + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'p.t.m.' : 'P.T.M.'; + } else { + return isLower ? 'a.t.m.' : 'A.T.M.'; + } + }, + calendar : { + sameDay : '[Hodiaŭ je] LT', + nextDay : '[Morgaŭ je] LT', + nextWeek : 'dddd [je] LT', + lastDay : '[Hieraŭ je] LT', + lastWeek : '[pasinta] dddd [je] LT', + sameElse : 'L' + }, + relativeTime : { + future : "je %s", + past : "antaŭ %s", + s : "sekundoj", + m : "minuto", + mm : "%d minutoj", + h : "horo", + hh : "%d horoj", + d : "tago",//ne 'diurno', ĉar estas uzita por proksimumo + dd : "%d tagoj", + M : "monato", + MM : "%d monatoj", + y : "jaro", + yy : "%d jaroj" + }, + ordinal : "%da", + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : spanish (es) +// author : Julio Napurí : https://github.com/julionc + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var monthsShortDot = "ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"), + monthsShort = "ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"); + + return moment.defineLocale('es', { + months : "enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"), + monthsShort : function (m, format) { + if (/-MMM-/.test(format)) { + return monthsShort[m.month()]; + } else { + return monthsShortDot[m.month()]; + } + }, + weekdays : "domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"), + weekdaysShort : "dom._lun._mar._mié._jue._vie._sáb.".split("_"), + weekdaysMin : "Do_Lu_Ma_Mi_Ju_Vi_Sá".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD/MM/YYYY", + LL : "D [de] MMMM [del] YYYY", + LLL : "D [de] MMMM [del] YYYY LT", + LLLL : "dddd, D [de] MMMM [del] YYYY LT" + }, + calendar : { + sameDay : function () { + return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextDay : function () { + return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastDay : function () { + return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : "en %s", + past : "hace %s", + s : "unos segundos", + m : "un minuto", + mm : "%d minutos", + h : "una hora", + hh : "%d horas", + d : "un día", + dd : "%d días", + M : "un mes", + MM : "%d meses", + y : "un año", + yy : "%d años" + }, + ordinal : '%dº', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : estonian (et) +// author : Henry Kehlmann : https://github.com/madhenry +// improvements : Illimar Tambek : https://github.com/ragulka + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'], + 'm' : ['ühe minuti', 'üks minut'], + 'mm': [number + ' minuti', number + ' minutit'], + 'h' : ['ühe tunni', 'tund aega', 'üks tund'], + 'hh': [number + ' tunni', number + ' tundi'], + 'd' : ['ühe päeva', 'üks päev'], + 'M' : ['kuu aja', 'kuu aega', 'üks kuu'], + 'MM': [number + ' kuu', number + ' kuud'], + 'y' : ['ühe aasta', 'aasta', 'üks aasta'], + 'yy': [number + ' aasta', number + ' aastat'] + }; + if (withoutSuffix) { + return format[key][2] ? format[key][2] : format[key][1]; + } + return isFuture ? format[key][0] : format[key][1]; + } + + return moment.defineLocale('et', { + months : "jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"), + monthsShort : "jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"), + weekdays : "pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"), + weekdaysShort : "P_E_T_K_N_R_L".split("_"), + weekdaysMin : "P_E_T_K_N_R_L".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD.MM.YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd, D. MMMM YYYY LT" + }, + calendar : { + sameDay : '[Täna,] LT', + nextDay : '[Homme,] LT', + nextWeek : '[Järgmine] dddd LT', + lastDay : '[Eile,] LT', + lastWeek : '[Eelmine] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s pärast", + past : "%s tagasi", + s : processRelativeTime, + m : processRelativeTime, + mm : processRelativeTime, + h : processRelativeTime, + hh : processRelativeTime, + d : processRelativeTime, + dd : '%d päeva', + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + ordinal : '%d.', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : euskara (eu) +// author : Eneko Illarramendi : https://github.com/eillarra + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('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("_"), + weekdaysMin : "ig_al_ar_az_og_ol_lr".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "YYYY-MM-DD", + LL : "YYYY[ko] MMMM[ren] D[a]", + LLL : "YYYY[ko] MMMM[ren] D[a] LT", + LLLL : "dddd, YYYY[ko] MMMM[ren] D[a] LT", + l : "YYYY-M-D", + ll : "YYYY[ko] MMM D[a]", + lll : "YYYY[ko] MMM D[a] LT", + llll : "ddd, YYYY[ko] MMM D[a] LT" + }, + calendar : { + sameDay : '[gaur] LT[etan]', + nextDay : '[bihar] LT[etan]', + nextWeek : 'dddd LT[etan]', + lastDay : '[atzo] LT[etan]', + lastWeek : '[aurreko] dddd LT[etan]', + sameElse : 'L' + }, + relativeTime : { + future : "%s barru", + past : "duela %s", + s : "segundo batzuk", + m : "minutu bat", + mm : "%d minutu", + h : "ordu bat", + hh : "%d ordu", + d : "egun bat", + dd : "%d egun", + M : "hilabete bat", + MM : "%d hilabete", + y : "urte bat", + yy : "%d urte" + }, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : Persian +// author : Ebrahim Byagowi : https://github.com/ebraminio + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var symbolMap = { + '1': '۱', + '2': '۲', + '3': '۳', + '4': '۴', + '5': '۵', + '6': '۶', + '7': '۷', + '8': '۸', + '9': '۹', + '0': '۰' + }, numberMap = { + '۱': '1', + '۲': '2', + '۳': '3', + '۴': '4', + '۵': '5', + '۶': '6', + '۷': '7', + '۸': '8', + '۹': '9', + '۰': '0' + }; + + return moment.defineLocale('fa', { + months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), + weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), + weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'), + longDateFormat : { + LT : 'HH:mm', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY LT', + LLLL : 'dddd, D MMMM YYYY LT' + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return "قبل از ظهر"; + } else { + return "بعد از ظهر"; + } + }, + calendar : { + sameDay : '[امروز ساعت] LT', + nextDay : '[فردا ساعت] LT', + nextWeek : 'dddd [ساعت] LT', + lastDay : '[دیروز ساعت] LT', + lastWeek : 'dddd [پیش] [ساعت] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'در %s', + past : '%s پیش', + s : 'چندین ثانیه', + m : 'یک دقیقه', + mm : '%d دقیقه', + h : 'یک ساعت', + hh : '%d ساعت', + d : 'یک روز', + dd : '%d روز', + M : 'یک ماه', + MM : '%d ماه', + y : 'یک سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/[۰-۹]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + ordinal : '%dم', + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : finnish (fi) +// author : Tarmo Aidantausta : https://github.com/bleadof + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '), + numbersFuture = [ + 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', + numbersPast[7], numbersPast[8], numbersPast[9] + ]; + + function translate(number, withoutSuffix, key, isFuture) { + var result = ""; + switch (key) { + case 's': + return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; + case 'm': + return isFuture ? 'minuutin' : 'minuutti'; + case 'mm': + result = isFuture ? 'minuutin' : 'minuuttia'; + break; + case 'h': + return isFuture ? 'tunnin' : 'tunti'; + case 'hh': + result = isFuture ? 'tunnin' : 'tuntia'; + break; + case 'd': + return isFuture ? 'päivän' : 'päivä'; + case 'dd': + result = isFuture ? 'päivän' : 'päivää'; + break; + case 'M': + return isFuture ? 'kuukauden' : 'kuukausi'; + case 'MM': + result = isFuture ? 'kuukauden' : 'kuukautta'; + break; + case 'y': + return isFuture ? 'vuoden' : 'vuosi'; + case 'yy': + result = isFuture ? 'vuoden' : 'vuotta'; + break; + } + result = verbalNumber(number, isFuture) + " " + result; + return result; + } + + function verbalNumber(number, isFuture) { + return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number; + } + + return moment.defineLocale('fi', { + months : "tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"), + monthsShort : "tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"), + weekdays : "sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"), + weekdaysShort : "su_ma_ti_ke_to_pe_la".split("_"), + weekdaysMin : "su_ma_ti_ke_to_pe_la".split("_"), + longDateFormat : { + LT : "HH.mm", + L : "DD.MM.YYYY", + LL : "Do MMMM[ta] YYYY", + LLL : "Do MMMM[ta] YYYY, [klo] LT", + LLLL : "dddd, Do MMMM[ta] YYYY, [klo] LT", + l : "D.M.YYYY", + ll : "Do MMM YYYY", + lll : "Do MMM YYYY, [klo] LT", + llll : "ddd, Do MMM YYYY, [klo] LT" + }, + calendar : { + sameDay : '[tänään] [klo] LT', + nextDay : '[huomenna] [klo] LT', + nextWeek : 'dddd [klo] LT', + lastDay : '[eilen] [klo] LT', + lastWeek : '[viime] dddd[na] [klo] LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s päästä", + past : "%s sitten", + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + ordinal : "%d.", + 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. + } + }); +})); + +// moment.js locale configuration +// locale : faroese (fo) +// author : Ragnar Johannesen : https://github.com/ragnar123 + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('fo', { + months : "januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"), + monthsShort : "jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"), + weekdays : "sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"), + weekdaysShort : "sun_mán_týs_mik_hós_frí_ley".split("_"), + weekdaysMin : "su_má_tý_mi_hó_fr_le".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D. MMMM, YYYY LT" + }, + calendar : { + sameDay : '[Í dag kl.] LT', + nextDay : '[Í morgin kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[Í gjár kl.] LT', + lastWeek : '[síðstu] dddd [kl] LT', + sameElse : 'L' + }, + relativeTime : { + future : "um %s", + past : "%s síðani", + s : "fá sekund", + m : "ein minutt", + mm : "%d minuttir", + h : "ein tími", + hh : "%d tímar", + d : "ein dagur", + dd : "%d dagar", + M : "ein mánaði", + MM : "%d mánaðir", + y : "eitt ár", + yy : "%d ár" + }, + ordinal : '%d.', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : canadian french (fr-ca) +// author : Jonathan Abourbih : https://github.com/jonbca + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('fr-ca', { + 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("_"), + weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "YYYY-MM-DD", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: "[Aujourd'hui à] LT", + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L' + }, + relativeTime : { + future : "dans %s", + past : "il y a %s", + s : "quelques secondes", + m : "une minute", + mm : "%d minutes", + h : "une heure", + hh : "%d heures", + d : "un jour", + dd : "%d jours", + M : "un mois", + MM : "%d mois", + y : "un an", + yy : "%d ans" + }, + ordinal : function (number) { + return number + (number === 1 ? 'er' : ''); + } + }); +})); + +// moment.js locale configuration +// locale : french (fr) +// author : John Fischer : https://github.com/jfroffice + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('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("_"), + weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: "[Aujourd'hui à] LT", + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L' + }, + relativeTime : { + future : "dans %s", + past : "il y a %s", + s : "quelques secondes", + m : "une minute", + mm : "%d minutes", + h : "une heure", + hh : "%d heures", + d : "un jour", + dd : "%d jours", + M : "un mois", + MM : "%d mois", + y : "un an", + yy : "%d ans" + }, + ordinal : function (number) { + return number + (number === 1 ? 'er' : ''); + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : galician (gl) +// author : Juan G. Hurtado : https://github.com/juanghurtado + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('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("_"), + weekdaysMin : "Do_Lu_Ma_Mé_Xo_Ve_Sá".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay : function () { + return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; + }, + nextDay : function () { + return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; + }, + nextWeek : function () { + return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; + }, + lastDay : function () { + return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT'; + }, + lastWeek : function () { + return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : function (str) { + if (str === "uns segundos") { + return "nuns segundos"; + } + return "en " + str; + }, + past : "hai %s", + s : "uns segundos", + m : "un minuto", + mm : "%d minutos", + h : "unha hora", + hh : "%d horas", + d : "un día", + dd : "%d días", + M : "un mes", + MM : "%d meses", + y : "un ano", + yy : "%d anos" + }, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : Hebrew (he) +// author : Tomer Cohen : https://github.com/tomer +// author : Moshe Simantov : https://github.com/DevelopmentIL +// author : Tal Ater : https://github.com/TalAter + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('he', { + months : "ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"), + monthsShort : "ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"), + weekdays : "ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"), + weekdaysShort : "א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"), + weekdaysMin : "א_ב_ג_ד_ה_ו_ש".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D [ב]MMMM YYYY", + LLL : "D [ב]MMMM YYYY LT", + LLLL : "dddd, D [ב]MMMM YYYY LT", + l : "D/M/YYYY", + ll : "D MMM YYYY", + lll : "D MMM YYYY LT", + llll : "ddd, D MMM YYYY LT" + }, + calendar : { + sameDay : '[היום ב־]LT', + nextDay : '[מחר ב־]LT', + nextWeek : 'dddd [בשעה] LT', + lastDay : '[אתמול ב־]LT', + lastWeek : '[ביום] dddd [האחרון בשעה] LT', + sameElse : 'L' + }, + relativeTime : { + future : "בעוד %s", + past : "לפני %s", + s : "מספר שניות", + m : "דקה", + mm : "%d דקות", + h : "שעה", + hh : function (number) { + if (number === 2) { + return "שעתיים"; + } + return number + " שעות"; + }, + d : "יום", + dd : function (number) { + if (number === 2) { + return "יומיים"; + } + return number + " ימים"; + }, + M : "חודש", + MM : function (number) { + if (number === 2) { + return "חודשיים"; + } + return number + " חודשים"; + }, + y : "שנה", + yy : function (number) { + if (number === 2) { + return "שנתיים"; + } + return number + " שנים"; + } + } + }); +})); + +// moment.js locale configuration +// locale : hindi (hi) +// author : Mayank Singhal : https://github.com/mayanksinghal + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var symbolMap = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' + }, + numberMap = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' + }; + + return moment.defineLocale('hi', { + months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split("_"), + monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split("_"), + weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split("_"), + weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split("_"), + weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split("_"), + longDateFormat : { + LT : "A h:mm बजे", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY, LT", + LLLL : "dddd, D MMMM YYYY, LT" + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[कल] LT', + nextWeek : 'dddd, LT', + lastDay : '[कल] LT', + lastWeek : '[पिछले] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s में", + past : "%s पहले", + s : "कुछ ही क्षण", + m : "एक मिनट", + mm : "%d मिनट", + h : "एक घंटा", + hh : "%d घंटे", + d : "एक दिन", + dd : "%d दिन", + M : "एक महीने", + MM : "%d महीने", + y : "एक वर्ष", + yy : "%d वर्ष" + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + // Hindi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "रात"; + } else if (hour < 10) { + return "सुबह"; + } else if (hour < 17) { + return "दोपहर"; + } else if (hour < 20) { + return "शाम"; + } else { + return "रात"; + } + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : hrvatski (hr) +// author : Bojan Marković : https://github.com/bmarkovic + +// based on (sl) translation by Robert Sedovšek + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + function translate(number, withoutSuffix, key) { + var result = number + " "; + switch (key) { + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } + } + + return moment.defineLocale('hr', { + months : "sječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_"), + monthsShort : "sje._vel._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"), + weekdays : "nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"), + weekdaysShort : "ned._pon._uto._sri._čet._pet._sub.".split("_"), + weekdaysMin : "ne_po_ut_sr_če_pe_su".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD. MM. YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd, D. MMMM YYYY LT" + }, + calendar : { + sameDay : '[danas u] LT', + nextDay : '[sutra u] LT', + + nextWeek : function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[jučer u] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : "za %s", + past : "prije %s", + s : "par sekundi", + m : translate, + mm : translate, + h : translate, + hh : translate, + d : "dan", + dd : translate, + M : "mjesec", + MM : translate, + y : "godinu", + yy : translate + }, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : hungarian (hu) +// author : Adam Brunner : https://github.com/adambrunner + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' '); + + function translate(number, withoutSuffix, key, isFuture) { + var num = number, + suffix; + + switch (key) { + case 's': + return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce'; + case 'm': + return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'mm': + return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'h': + return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'hh': + return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'd': + return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'dd': + return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'M': + return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'MM': + return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'y': + return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); + case 'yy': + return num + (isFuture || withoutSuffix ? ' év' : ' éve'); + } + + return ''; + } + + function week(isFuture) { + return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]'; + } + + return moment.defineLocale('hu', { + months : "január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"), + monthsShort : "jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"), + weekdays : "vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"), + weekdaysShort : "vas_hét_kedd_sze_csüt_pén_szo".split("_"), + weekdaysMin : "v_h_k_sze_cs_p_szo".split("_"), + longDateFormat : { + LT : "H:mm", + L : "YYYY.MM.DD.", + LL : "YYYY. MMMM D.", + LLL : "YYYY. MMMM D., LT", + LLLL : "YYYY. MMMM D., dddd LT" + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower === true ? 'de' : 'DE'; + } else { + return isLower === true ? 'du' : 'DU'; + } + }, + calendar : { + sameDay : '[ma] LT[-kor]', + nextDay : '[holnap] LT[-kor]', + nextWeek : function () { + return week.call(this, true); + }, + lastDay : '[tegnap] LT[-kor]', + lastWeek : function () { + return week.call(this, false); + }, + sameElse : 'L' + }, + relativeTime : { + future : "%s múlva", + past : "%s", + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : Armenian (hy-am) +// author : Armendarabyan : https://github.com/armendarabyan + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + function monthsCaseReplace(m, format) { + var months = { + 'nominative': 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_'), + 'accusative': 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_') + }, + + nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ? + 'accusative' : + 'nominative'; + + return months[nounCase][m.month()]; + } + + function monthsShortCaseReplace(m, format) { + var monthsShort = 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'); + + return monthsShort[m.month()]; + } + + function weekdaysCaseReplace(m, format) { + var weekdays = 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'); + + return weekdays[m.day()]; + } + + return moment.defineLocale('hy-am', { + months : monthsCaseReplace, + monthsShort : monthsShortCaseReplace, + weekdays : weekdaysCaseReplace, + weekdaysShort : "կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"), + weekdaysMin : "կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY թ.", + LLL : "D MMMM YYYY թ., LT", + LLLL : "dddd, D MMMM YYYY թ., LT" + }, + calendar : { + sameDay: '[այսօր] LT', + nextDay: '[վաղը] LT', + lastDay: '[երեկ] LT', + nextWeek: function () { + return 'dddd [օրը ժամը] LT'; + }, + lastWeek: function () { + return '[անցած] dddd [օրը ժամը] LT'; + }, + sameElse: 'L' + }, + relativeTime : { + future : "%s հետո", + past : "%s առաջ", + s : "մի քանի վայրկյան", + m : "րոպե", + mm : "%d րոպե", + h : "ժամ", + hh : "%d ժամ", + d : "օր", + dd : "%d օր", + M : "ամիս", + MM : "%d ամիս", + y : "տարի", + yy : "%d տարի" + }, + + meridiem : function (hour) { + if (hour < 4) { + return "գիշերվա"; + } else if (hour < 12) { + return "առավոտվա"; + } else if (hour < 17) { + return "ցերեկվա"; + } else { + return "երեկոյան"; + } + }, + + ordinal: function (number, period) { + switch (period) { + case 'DDD': + case 'w': + case 'W': + case 'DDDo': + if (number === 1) { + return number + '-ին'; + } + return number + '-րդ'; + default: + return number; + } + }, + + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : Bahasa Indonesia (id) +// author : Mohammad Satrio Utomo : https://github.com/tyok +// reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('id', { + months : "Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"), + monthsShort : "Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"), + weekdays : "Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"), + weekdaysShort : "Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"), + weekdaysMin : "Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"), + longDateFormat : { + LT : "HH.mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY [pukul] LT", + LLLL : "dddd, D MMMM YYYY [pukul] LT" + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'siang'; + } else if (hours < 19) { + return 'sore'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Besok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kemarin pukul] LT', + lastWeek : 'dddd [lalu pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : "dalam %s", + past : "%s yang lalu", + s : "beberapa detik", + m : "semenit", + mm : "%d menit", + h : "sejam", + hh : "%d jam", + d : "sehari", + dd : "%d hari", + M : "sebulan", + MM : "%d bulan", + y : "setahun", + yy : "%d tahun" + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : icelandic (is) +// author : Hinrik Örn Sigurðsson : https://github.com/hinrik + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + function plural(n) { + if (n % 100 === 11) { + return true; + } else if (n % 10 === 1) { + return false; + } + return true; + } + + function translate(number, withoutSuffix, key, isFuture) { + var result = number + " "; + switch (key) { + case 's': + return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum'; + case 'm': + return withoutSuffix ? 'mínúta' : 'mínútu'; + case 'mm': + if (plural(number)) { + return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum'); + } else if (withoutSuffix) { + return result + 'mínúta'; + } + return result + 'mínútu'; + case 'hh': + if (plural(number)) { + return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum'); + } + return result + 'klukkustund'; + case 'd': + if (withoutSuffix) { + return 'dagur'; + } + return isFuture ? 'dag' : 'degi'; + case 'dd': + if (plural(number)) { + if (withoutSuffix) { + return result + 'dagar'; + } + return result + (isFuture ? 'daga' : 'dögum'); + } else if (withoutSuffix) { + return result + 'dagur'; + } + return result + (isFuture ? 'dag' : 'degi'); + case 'M': + if (withoutSuffix) { + return 'mánuður'; + } + return isFuture ? 'mánuð' : 'mánuði'; + case 'MM': + if (plural(number)) { + if (withoutSuffix) { + return result + 'mánuðir'; + } + return result + (isFuture ? 'mánuði' : 'mánuðum'); + } else if (withoutSuffix) { + return result + 'mánuður'; + } + return result + (isFuture ? 'mánuð' : 'mánuði'); + case 'y': + return withoutSuffix || isFuture ? 'ár' : 'ári'; + case 'yy': + if (plural(number)) { + return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); + } + return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); + } + } + + return moment.defineLocale('is', { + months : "janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"), + monthsShort : "jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"), + weekdays : "sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"), + weekdaysShort : "sun_mán_þri_mið_fim_fös_lau".split("_"), + weekdaysMin : "Su_Má_Þr_Mi_Fi_Fö_La".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD/MM/YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY [kl.] LT", + LLLL : "dddd, D. MMMM YYYY [kl.] LT" + }, + calendar : { + sameDay : '[í dag kl.] LT', + nextDay : '[á morgun kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[í gær kl.] LT', + lastWeek : '[síðasta] dddd [kl.] LT', + sameElse : 'L' + }, + relativeTime : { + future : "eftir %s", + past : "fyrir %s síðan", + s : translate, + m : translate, + mm : translate, + h : "klukkustund", + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + ordinal : '%d.', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : italian (it) +// author : Lorenzo : https://github.com/aliem +// author: Mattia Larentis: https://github.com/nostalgiaz + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('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("_"), + weekdaysMin : "D_L_Ma_Me_G_V_S".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay: '[Oggi alle] LT', + nextDay: '[Domani alle] LT', + nextWeek: 'dddd [alle] LT', + lastDay: '[Ieri alle] LT', + lastWeek: '[lo scorso] dddd [alle] LT', + sameElse: 'L' + }, + relativeTime : { + future : function (s) { + return ((/^[0-9].+$/).test(s) ? "tra" : "in") + " " + s; + }, + past : "%s fa", + s : "alcuni secondi", + m : "un minuto", + mm : "%d minuti", + h : "un'ora", + hh : "%d ore", + d : "un giorno", + dd : "%d giorni", + M : "un mese", + MM : "%d mesi", + y : "un anno", + yy : "%d anni" + }, + ordinal: '%dº', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : japanese (ja) +// author : LI Long : https://github.com/baryon + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('ja', { + months : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), + monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), + weekdays : "日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"), + weekdaysShort : "日_月_火_水_木_金_土".split("_"), + weekdaysMin : "日_月_火_水_木_金_土".split("_"), + longDateFormat : { + LT : "Ah時m分", + L : "YYYY/MM/DD", + LL : "YYYY年M月D日", + LLL : "YYYY年M月D日LT", + LLLL : "YYYY年M月D日LT dddd" + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return "午前"; + } else { + return "午後"; + } + }, + calendar : { + sameDay : '[今日] LT', + nextDay : '[明日] LT', + nextWeek : '[来週]dddd LT', + lastDay : '[昨日] LT', + lastWeek : '[前週]dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s後", + past : "%s前", + s : "数秒", + m : "1分", + mm : "%d分", + h : "1時間", + hh : "%d時間", + d : "1日", + dd : "%d日", + M : "1ヶ月", + MM : "%dヶ月", + y : "1年", + yy : "%d年" + } + }); +})); + +// moment.js locale configuration +// locale : Georgian (ka) +// author : Irakli Janiashvili : https://github.com/irakli-janiashvili + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + function monthsCaseReplace(m, format) { + var months = { + 'nominative': 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'), + 'accusative': 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_') + }, + + nounCase = (/D[oD] *MMMM?/).test(format) ? + 'accusative' : + 'nominative'; + + return months[nounCase][m.month()]; + } + + function weekdaysCaseReplace(m, format) { + var weekdays = { + 'nominative': 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'), + 'accusative': 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_') + }, + + nounCase = (/(წინა|შემდეგ)/).test(format) ? + 'accusative' : + 'nominative'; + + return weekdays[nounCase][m.day()]; + } + + return moment.defineLocale('ka', { + months : monthsCaseReplace, + monthsShort : "იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"), + weekdays : weekdaysCaseReplace, + weekdaysShort : "კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"), + weekdaysMin : "კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"), + longDateFormat : { + LT : "h:mm A", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[დღეს] LT[-ზე]', + nextDay : '[ხვალ] LT[-ზე]', + lastDay : '[გუშინ] LT[-ზე]', + nextWeek : '[შემდეგ] dddd LT[-ზე]', + lastWeek : '[წინა] dddd LT-ზე', + sameElse : 'L' + }, + relativeTime : { + future : function (s) { + return (/(წამი|წუთი|საათი|წელი)/).test(s) ? + s.replace(/ი$/, "ში") : + s + "ში"; + }, + past : function (s) { + if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) { + return s.replace(/(ი|ე)$/, "ის წინ"); + } + if ((/წელი/).test(s)) { + return s.replace(/წელი$/, "წლის წინ"); + } + }, + s : "რამდენიმე წამი", + m : "წუთი", + mm : "%d წუთი", + h : "საათი", + hh : "%d საათი", + d : "დღე", + dd : "%d დღე", + M : "თვე", + MM : "%d თვე", + y : "წელი", + yy : "%d წელი" + }, + ordinal : function (number) { + if (number === 0) { + return number; + } + + if (number === 1) { + return number + "-ლი"; + } + + if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) { + return "მე-" + number; + } + + return number + "-ე"; + }, + week : { + dow : 1, + doy : 7 + } + }); +})); + +// moment.js locale configuration +// locale : khmer (km) +// author : Kruy Vanna : https://github.com/kruyvanna + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('km', { + months: "មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"), + monthsShort: "មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"), + weekdays: "អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"), + weekdaysShort: "អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"), + weekdaysMin: "អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"), + longDateFormat: { + LT: "HH:mm", + L: "DD/MM/YYYY", + LL: "D MMMM YYYY", + LLL: "D MMMM YYYY LT", + LLLL: "dddd, D MMMM YYYY LT" + }, + calendar: { + sameDay: '[ថ្ងៃនៈ ម៉ោង] LT', + nextDay: '[ស្អែក ម៉ោង] LT', + nextWeek: 'dddd [ម៉ោង] LT', + lastDay: '[ម្សិលមិញ ម៉ោង] LT', + lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT', + sameElse: 'L' + }, + relativeTime: { + future: "%sទៀត", + past: "%sមុន", + s: "ប៉ុន្មានវិនាទី", + m: "មួយនាទី", + mm: "%d នាទី", + h: "មួយម៉ោង", + hh: "%d ម៉ោង", + d: "មួយថ្ងៃ", + dd: "%d ថ្ងៃ", + M: "មួយខែ", + MM: "%d ខែ", + y: "មួយឆ្នាំ", + yy: "%d ឆ្នាំ" + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : korean (ko) +// +// authors +// +// - Kyungwook, Park : https://github.com/kyungw00k +// - Jeeeyul Lee +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('ko', { + months : "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"), + monthsShort : "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"), + weekdays : "일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"), + weekdaysShort : "일_월_화_수_목_금_토".split("_"), + weekdaysMin : "일_월_화_수_목_금_토".split("_"), + longDateFormat : { + LT : "A h시 mm분", + L : "YYYY.MM.DD", + LL : "YYYY년 MMMM D일", + LLL : "YYYY년 MMMM D일 LT", + LLLL : "YYYY년 MMMM D일 dddd LT" + }, + meridiem : function (hour, minute, isUpper) { + return hour < 12 ? '오전' : '오후'; + }, + calendar : { + sameDay : '오늘 LT', + nextDay : '내일 LT', + nextWeek : 'dddd LT', + lastDay : '어제 LT', + lastWeek : '지난주 dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s 후", + past : "%s 전", + s : "몇초", + ss : "%d초", + m : "일분", + mm : "%d분", + h : "한시간", + hh : "%d시간", + d : "하루", + dd : "%d일", + M : "한달", + MM : "%d달", + y : "일년", + yy : "%d년" + }, + ordinal : '%d일', + meridiemParse : /(오전|오후)/, + isPM : function (token) { + return token === "오후"; + } + }); +})); + +// moment.js locale configuration +// locale : Luxembourgish (lb) +// author : mweimerskirch : https://github.com/mweimerskirch, David Raison : https://github.com/kwisatz + +// Note: Luxembourgish has a very particular phonological rule ("Eifeler Regel") that causes the +// deletion of the final "n" in certain contexts. That's what the "eifelerRegelAppliesToWeekday" +// and "eifelerRegelAppliesToNumber" methods are meant for + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eng Minutt', 'enger Minutt'], + 'h': ['eng Stonn', 'enger Stonn'], + 'd': ['een Dag', 'engem Dag'], + 'M': ['ee Mount', 'engem Mount'], + 'y': ['ee Joer', 'engem Joer'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + function processFutureTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return "a " + string; + } + return "an " + string; + } + + function processPastTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return "viru " + string; + } + return "virun " + string; + } + + /** + * Returns true if the word before the given number loses the "-n" ending. + * e.g. "an 10 Deeg" but "a 5 Deeg" + * + * @param number {integer} + * @returns {boolean} + */ + function eifelerRegelAppliesToNumber(number) { + number = parseInt(number, 10); + if (isNaN(number)) { + return false; + } + if (number < 0) { + // Negative Number --> always true + return true; + } else if (number < 10) { + // Only 1 digit + if (4 <= number && number <= 7) { + return true; + } + return false; + } else if (number < 100) { + // 2 digits + var lastDigit = number % 10, firstDigit = number / 10; + if (lastDigit === 0) { + return eifelerRegelAppliesToNumber(firstDigit); + } + return eifelerRegelAppliesToNumber(lastDigit); + } else if (number < 10000) { + // 3 or 4 digits --> recursively check first digit + while (number >= 10) { + number = number / 10; + } + return eifelerRegelAppliesToNumber(number); + } else { + // Anything larger than 4 digits: recursively check first n-3 digits + number = number / 1000; + return eifelerRegelAppliesToNumber(number); + } + } + + return moment.defineLocale('lb', { + months: "Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"), + monthsShort: "Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"), + weekdays: "Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"), + weekdaysShort: "So._Mé._Dë._Më._Do._Fr._Sa.".split("_"), + weekdaysMin: "So_Mé_Dë_Më_Do_Fr_Sa".split("_"), + longDateFormat: { + LT: "H:mm [Auer]", + L: "DD.MM.YYYY", + LL: "D. MMMM YYYY", + LLL: "D. MMMM YYYY LT", + LLLL: "dddd, D. MMMM YYYY LT" + }, + calendar: { + sameDay: "[Haut um] LT", + sameElse: "L", + nextDay: '[Muer um] LT', + nextWeek: 'dddd [um] LT', + lastDay: '[Gëschter um] LT', + lastWeek: function () { + // Different date string for "Dënschdeg" (Tuesday) and "Donneschdeg" (Thursday) due to phonological rule + switch (this.day()) { + case 2: + case 4: + return '[Leschten] dddd [um] LT'; + default: + return '[Leschte] dddd [um] LT'; + } + } + }, + relativeTime : { + future : processFutureTime, + past : processPastTime, + s : "e puer Sekonnen", + m : processRelativeTime, + mm : "%d Minutten", + h : processRelativeTime, + hh : "%d Stonnen", + d : processRelativeTime, + dd : "%d Deeg", + M : processRelativeTime, + MM : "%d Méint", + y : processRelativeTime, + yy : "%d Joer" + }, + ordinal: '%d.', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : Lithuanian (lt) +// author : Mindaugas Mozūras : https://github.com/mmozuras + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var units = { + "m" : "minutė_minutės_minutę", + "mm": "minutės_minučių_minutes", + "h" : "valanda_valandos_valandą", + "hh": "valandos_valandų_valandas", + "d" : "diena_dienos_dieną", + "dd": "dienos_dienų_dienas", + "M" : "mėnuo_mėnesio_mėnesį", + "MM": "mėnesiai_mėnesių_mėnesius", + "y" : "metai_metų_metus", + "yy": "metai_metų_metus" + }, + weekDays = "sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"); + + function translateSeconds(number, withoutSuffix, key, isFuture) { + if (withoutSuffix) { + return "kelios sekundės"; + } else { + return isFuture ? "kelių sekundžių" : "kelias sekundes"; + } + } + + function translateSingular(number, withoutSuffix, key, isFuture) { + return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]); + } + + function special(number) { + return number % 10 === 0 || (number > 10 && number < 20); + } + + function forms(key) { + return units[key].split("_"); + } + + function translate(number, withoutSuffix, key, isFuture) { + var result = number + " "; + if (number === 1) { + return result + translateSingular(number, withoutSuffix, key[0], isFuture); + } else if (withoutSuffix) { + return result + (special(number) ? forms(key)[1] : forms(key)[0]); + } else { + if (isFuture) { + return result + forms(key)[1]; + } else { + return result + (special(number) ? forms(key)[1] : forms(key)[2]); + } + } + } + + function relativeWeekDay(moment, format) { + var nominative = format.indexOf('dddd HH:mm') === -1, + weekDay = weekDays[moment.day()]; + + return nominative ? weekDay : weekDay.substring(0, weekDay.length - 2) + "į"; + } + + return moment.defineLocale("lt", { + months : "sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"), + monthsShort : "sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"), + weekdays : relativeWeekDay, + weekdaysShort : "Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"), + weekdaysMin : "S_P_A_T_K_Pn_Š".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "YYYY-MM-DD", + LL : "YYYY [m.] MMMM D [d.]", + LLL : "YYYY [m.] MMMM D [d.], LT [val.]", + LLLL : "YYYY [m.] MMMM D [d.], dddd, LT [val.]", + l : "YYYY-MM-DD", + ll : "YYYY [m.] MMMM D [d.]", + lll : "YYYY [m.] MMMM D [d.], LT [val.]", + llll : "YYYY [m.] MMMM D [d.], ddd, LT [val.]" + }, + calendar : { + sameDay : "[Šiandien] LT", + nextDay : "[Rytoj] LT", + nextWeek : "dddd LT", + lastDay : "[Vakar] LT", + lastWeek : "[Praėjusį] dddd LT", + sameElse : "L" + }, + relativeTime : { + future : "po %s", + past : "prieš %s", + s : translateSeconds, + m : translateSingular, + mm : translate, + h : translateSingular, + hh : translate, + d : translateSingular, + dd : translate, + M : translateSingular, + MM : translate, + y : translateSingular, + yy : translate + }, + ordinal : function (number) { + return number + '-oji'; + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : latvian (lv) +// author : Kristaps Karlsons : https://github.com/skakri + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var units = { + 'mm': 'minūti_minūtes_minūte_minūtes', + 'hh': 'stundu_stundas_stunda_stundas', + 'dd': 'dienu_dienas_diena_dienas', + 'MM': 'mēnesi_mēnešus_mēnesis_mēneši', + 'yy': 'gadu_gadus_gads_gadi' + }; + + function format(word, number, withoutSuffix) { + var forms = word.split('_'); + if (withoutSuffix) { + return number % 10 === 1 && number !== 11 ? forms[2] : forms[3]; + } else { + return number % 10 === 1 && number !== 11 ? forms[0] : forms[1]; + } + } + + function relativeTimeWithPlural(number, withoutSuffix, key) { + return number + ' ' + format(units[key], number, withoutSuffix); + } + + return moment.defineLocale('lv', { + months : "janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"), + monthsShort : "jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"), + weekdays : "svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"), + weekdaysShort : "Sv_P_O_T_C_Pk_S".split("_"), + weekdaysMin : "Sv_P_O_T_C_Pk_S".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "YYYY. [gada] D. MMMM", + LLL : "YYYY. [gada] D. MMMM, LT", + LLLL : "YYYY. [gada] D. MMMM, dddd, LT" + }, + calendar : { + sameDay : '[Šodien pulksten] LT', + nextDay : '[Rīt pulksten] LT', + nextWeek : 'dddd [pulksten] LT', + lastDay : '[Vakar pulksten] LT', + lastWeek : '[Pagājušā] dddd [pulksten] LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s vēlāk", + past : "%s agrāk", + s : "dažas sekundes", + m : "minūti", + mm : relativeTimeWithPlural, + h : "stundu", + hh : relativeTimeWithPlural, + d : "dienu", + dd : relativeTimeWithPlural, + M : "mēnesi", + MM : relativeTimeWithPlural, + y : "gadu", + yy : relativeTimeWithPlural + }, + ordinal : '%d.', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : macedonian (mk) +// author : Borislav Mickov : https://github.com/B0k0 + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('mk', { + months : "јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"), + monthsShort : "јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"), + weekdays : "недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"), + weekdaysShort : "нед_пон_вто_сре_чет_пет_саб".split("_"), + weekdaysMin : "нe_пo_вт_ср_че_пе_сa".split("_"), + longDateFormat : { + LT : "H:mm", + L : "D.MM.YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[Денес во] LT', + nextDay : '[Утре во] LT', + nextWeek : 'dddd [во] LT', + lastDay : '[Вчера во] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[Во изминатата] dddd [во] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Во изминатиот] dddd [во] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : "после %s", + past : "пред %s", + s : "неколку секунди", + m : "минута", + mm : "%d минути", + h : "час", + hh : "%d часа", + d : "ден", + dd : "%d дена", + M : "месец", + MM : "%d месеци", + y : "година", + yy : "%d години" + }, + ordinal : function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : malayalam (ml) +// author : Floyd Pink : https://github.com/floydpink + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('ml', { + months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split("_"), + monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split("_"), + weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split("_"), + weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split("_"), + weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split("_"), + longDateFormat : { + LT : "A h:mm -നു", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY, LT", + LLLL : "dddd, D MMMM YYYY, LT" + }, + calendar : { + sameDay : '[ഇന്ന്] LT', + nextDay : '[നാളെ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ഇന്നലെ] LT', + lastWeek : '[കഴിഞ്ഞ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s കഴിഞ്ഞ്", + past : "%s മുൻപ്", + s : "അൽപ നിമിഷങ്ങൾ", + m : "ഒരു മിനിറ്റ്", + mm : "%d മിനിറ്റ്", + h : "ഒരു മണിക്കൂർ", + hh : "%d മണിക്കൂർ", + d : "ഒരു ദിവസം", + dd : "%d ദിവസം", + M : "ഒരു മാസം", + MM : "%d മാസം", + y : "ഒരു വർഷം", + yy : "%d വർഷം" + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "രാത്രി"; + } else if (hour < 12) { + return "രാവിലെ"; + } else if (hour < 17) { + return "ഉച്ച കഴിഞ്ഞ്"; + } else if (hour < 20) { + return "വൈകുന്നേരം"; + } else { + return "രാത്രി"; + } + } + }); +})); + +// moment.js locale configuration +// locale : Marathi (mr) +// author : Harshad Kale : https://github.com/kalehv + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var symbolMap = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' + }, + numberMap = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' + }; + + return moment.defineLocale('mr', { + months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split("_"), + monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split("_"), + weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split("_"), + weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split("_"), + weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split("_"), + longDateFormat : { + LT : "A h:mm वाजता", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY, LT", + LLLL : "dddd, D MMMM YYYY, LT" + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[उद्या] LT', + nextWeek : 'dddd, LT', + lastDay : '[काल] LT', + lastWeek: '[मागील] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s नंतर", + past : "%s पूर्वी", + s : "सेकंद", + m: "एक मिनिट", + mm: "%d मिनिटे", + h : "एक तास", + hh : "%d तास", + d : "एक दिवस", + dd : "%d दिवस", + M : "एक महिना", + MM : "%d महिने", + y : "एक वर्ष", + yy : "%d वर्षे" + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiem: function (hour, minute, isLower) + { + if (hour < 4) { + return "रात्री"; + } else if (hour < 10) { + return "सकाळी"; + } else if (hour < 17) { + return "दुपारी"; + } else if (hour < 20) { + return "सायंकाळी"; + } else { + return "रात्री"; + } + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : Bahasa Malaysia (ms-MY) +// author : Weldan Jamili : https://github.com/weldan + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('ms-my', { + months : "Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"), + monthsShort : "Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"), + weekdays : "Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"), + weekdaysShort : "Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"), + weekdaysMin : "Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"), + longDateFormat : { + LT : "HH.mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY [pukul] LT", + LLLL : "dddd, D MMMM YYYY [pukul] LT" + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Esok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kelmarin pukul] LT', + lastWeek : 'dddd [lepas pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : "dalam %s", + past : "%s yang lepas", + s : "beberapa saat", + m : "seminit", + mm : "%d minit", + h : "sejam", + hh : "%d jam", + d : "sehari", + dd : "%d hari", + M : "sebulan", + MM : "%d bulan", + y : "setahun", + yy : "%d tahun" + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : Burmese (my) +// author : Squar team, mysquar.com + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var symbolMap = { + '1': '၁', + '2': '၂', + '3': '၃', + '4': '၄', + '5': '၅', + '6': '၆', + '7': '၇', + '8': '၈', + '9': '၉', + '0': '၀' + }, numberMap = { + '၁': '1', + '၂': '2', + '၃': '3', + '၄': '4', + '၅': '5', + '၆': '6', + '၇': '7', + '၈': '8', + '၉': '9', + '၀': '0' + }; + return moment.defineLocale('my', { + months: "ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"), + monthsShort: "ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"), + weekdays: "တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"), + weekdaysShort: "နွေ_လာ_င်္ဂါ_ဟူး_ကြာ_သော_နေ".split("_"), + weekdaysMin: "နွေ_လာ_င်္ဂါ_ဟူး_ကြာ_သော_နေ".split("_"), + longDateFormat: { + LT: "HH:mm", + L: "DD/MM/YYYY", + LL: "D MMMM YYYY", + LLL: "D MMMM YYYY LT", + LLLL: "dddd D MMMM YYYY LT" + }, + calendar: { + sameDay: '[ယနေ.] LT [မှာ]', + nextDay: '[မနက်ဖြန်] LT [မှာ]', + nextWeek: 'dddd LT [မှာ]', + lastDay: '[မနေ.က] LT [မှာ]', + lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]', + sameElse: 'L' + }, + relativeTime: { + future: "လာမည့် %s မှာ", + past: "လွန်ခဲ့သော %s က", + s: "စက္ကန်.အနည်းငယ်", + m: "တစ်မိနစ်", + mm: "%d မိနစ်", + h: "တစ်နာရီ", + hh: "%d နာရီ", + d: "တစ်ရက်", + dd: "%d ရက်", + M: "တစ်လ", + MM: "%d လ", + y: "တစ်နှစ်", + yy: "%d နှစ်" + }, + preparse: function (string) { + return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : norwegian bokmål (nb) +// authors : Espen Hovlandsdal : https://github.com/rexxars +// Sigurd Gartmann : https://github.com/sigurdga + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('nb', { + 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ø._ma._ti._on._to._fr._lø.".split("_"), + weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"), + longDateFormat : { + LT : "H.mm", + L : "DD.MM.YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY [kl.] LT", + LLLL : "dddd D. MMMM YYYY [kl.] LT" + }, + calendar : { + sameDay: '[i dag kl.] LT', + nextDay: '[i morgen kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[i går kl.] LT', + lastWeek: '[forrige] dddd [kl.] LT', + sameElse: 'L' + }, + relativeTime : { + future : "om %s", + past : "for %s siden", + s : "noen sekunder", + m : "ett minutt", + mm : "%d minutter", + h : "en time", + hh : "%d timer", + d : "en dag", + dd : "%d dager", + M : "en måned", + MM : "%d måneder", + y : "ett år", + yy : "%d år" + }, + ordinal : '%d.', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : nepali/nepalese +// author : suvash : https://github.com/suvash + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var symbolMap = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' + }, + numberMap = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' + }; + + return moment.defineLocale('ne', { + months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split("_"), + monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split("_"), + weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split("_"), + weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split("_"), + weekdaysMin : 'आइ._सो._मङ्_बु._बि._शु._श.'.split("_"), + longDateFormat : { + LT : "Aको h:mm बजे", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY, LT", + LLLL : "dddd, D MMMM YYYY, LT" + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 3) { + return "राती"; + } else if (hour < 10) { + return "बिहान"; + } else if (hour < 15) { + return "दिउँसो"; + } else if (hour < 18) { + return "बेलुका"; + } else if (hour < 20) { + return "साँझ"; + } else { + return "राती"; + } + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[भोली] LT', + nextWeek : '[आउँदो] dddd[,] LT', + lastDay : '[हिजो] LT', + lastWeek : '[गएको] dddd[,] LT', + sameElse : 'L' + }, + relativeTime : { + future : "%sमा", + past : "%s अगाडी", + s : "केही समय", + m : "एक मिनेट", + mm : "%d मिनेट", + h : "एक घण्टा", + hh : "%d घण्टा", + d : "एक दिन", + dd : "%d दिन", + M : "एक महिना", + MM : "%d महिना", + y : "एक बर्ष", + yy : "%d बर्ष" + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : dutch (nl) +// author : Joris Röling : https://github.com/jjupiter + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var monthsShortWithDots = "jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"), + monthsShortWithoutDots = "jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"); + + return moment.defineLocale('nl', { + months : "januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"), + monthsShort : function (m, format) { + if (/-MMM-/.test(format)) { + return monthsShortWithoutDots[m.month()]; + } else { + return monthsShortWithDots[m.month()]; + } + }, + weekdays : "zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"), + weekdaysShort : "zo._ma._di._wo._do._vr._za.".split("_"), + weekdaysMin : "Zo_Ma_Di_Wo_Do_Vr_Za".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD-MM-YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : "over %s", + past : "%s geleden", + s : "een paar seconden", + m : "één minuut", + mm : "%d minuten", + h : "één uur", + hh : "%d uur", + d : "één dag", + dd : "%d dagen", + M : "één maand", + MM : "%d maanden", + y : "één jaar", + yy : "%d jaar" + }, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : norwegian nynorsk (nn) +// author : https://github.com/mechuwind + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('nn', { + months : "januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"), + monthsShort : "jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"), + weekdays : "sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"), + weekdaysShort : "sun_mån_tys_ons_tor_fre_lau".split("_"), + weekdaysMin : "su_må_ty_on_to_fr_lø".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: '[I dag klokka] LT', + nextDay: '[I morgon klokka] LT', + nextWeek: 'dddd [klokka] LT', + lastDay: '[I går klokka] LT', + lastWeek: '[Føregåande] dddd [klokka] LT', + sameElse: 'L' + }, + relativeTime : { + future : "om %s", + past : "for %s sidan", + s : "nokre sekund", + m : "eit minutt", + mm : "%d minutt", + h : "ein time", + hh : "%d timar", + d : "ein dag", + dd : "%d dagar", + M : "ein månad", + MM : "%d månader", + y : "eit år", + yy : "%d år" + }, + ordinal : '%d.', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : polish (pl) +// author : Rafal Hirsz : https://github.com/evoL + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var monthsNominative = "styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"), + monthsSubjective = "stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"); + + function plural(n) { + return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1); + } + + function translate(number, withoutSuffix, key) { + var result = number + " "; + switch (key) { + case 'm': + return withoutSuffix ? 'minuta' : 'minutę'; + case 'mm': + return result + (plural(number) ? 'minuty' : 'minut'); + case 'h': + return withoutSuffix ? 'godzina' : 'godzinę'; + case 'hh': + return result + (plural(number) ? 'godziny' : 'godzin'); + case 'MM': + return result + (plural(number) ? 'miesiące' : 'miesięcy'); + case 'yy': + return result + (plural(number) ? 'lata' : 'lat'); + } + } + + return moment.defineLocale('pl', { + months : function (momentToFormat, format) { + if (/D MMMM/.test(format)) { + return monthsSubjective[momentToFormat.month()]; + } else { + return monthsNominative[momentToFormat.month()]; + } + }, + monthsShort : "sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"), + weekdays : "niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"), + weekdaysShort : "nie_pon_wt_śr_czw_pt_sb".split("_"), + weekdaysMin : "N_Pn_Wt_Śr_Cz_Pt_So".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay: '[Dziś o] LT', + nextDay: '[Jutro o] LT', + nextWeek: '[W] dddd [o] LT', + lastDay: '[Wczoraj o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[W zeszłą niedzielę o] LT'; + case 3: + return '[W zeszłą środę o] LT'; + case 6: + return '[W zeszłą sobotę o] LT'; + default: + return '[W zeszły] dddd [o] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : "za %s", + past : "%s temu", + s : "kilka sekund", + m : translate, + mm : translate, + h : translate, + hh : translate, + d : "1 dzień", + dd : '%d dni', + M : "miesiąc", + MM : translate, + y : "rok", + yy : translate + }, + ordinal : '%d.', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : brazilian portuguese (pt-br) +// author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('pt-br', { + 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("_"), + weekdaysMin : "dom_2ª_3ª_4ª_5ª_6ª_sáb".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D [de] MMMM [de] YYYY", + LLL : "D [de] MMMM [de] YYYY [às] LT", + LLLL : "dddd, D [de] MMMM [de] YYYY [às] LT" + }, + calendar : { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return (this.day() === 0 || this.day() === 6) ? + '[Último] dddd [às] LT' : // Saturday + Sunday + '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L' + }, + relativeTime : { + future : "em %s", + past : "%s atrás", + s : "segundos", + m : "um minuto", + mm : "%d minutos", + h : "uma hora", + hh : "%d horas", + d : "um dia", + dd : "%d dias", + M : "um mês", + MM : "%d meses", + y : "um ano", + yy : "%d anos" + }, + ordinal : '%dº' + }); +})); + +// moment.js locale configuration +// locale : portuguese (pt) +// author : Jefferson : https://github.com/jalex79 + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('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("_"), + weekdaysMin : "dom_2ª_3ª_4ª_5ª_6ª_sáb".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D [de] MMMM [de] YYYY", + LLL : "D [de] MMMM [de] YYYY LT", + LLLL : "dddd, D [de] MMMM [de] YYYY LT" + }, + calendar : { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return (this.day() === 0 || this.day() === 6) ? + '[Último] dddd [às] LT' : // Saturday + Sunday + '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L' + }, + relativeTime : { + future : "em %s", + past : "há %s", + s : "segundos", + m : "um minuto", + mm : "%d minutos", + h : "uma hora", + hh : "%d horas", + d : "um dia", + dd : "%d dias", + M : "um mês", + MM : "%d meses", + y : "um ano", + yy : "%d anos" + }, + ordinal : '%dº', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : romanian (ro) +// author : Vlad Gurdiga : https://github.com/gurdiga +// author : Valentin Agachi : https://github.com/avaly + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': 'minute', + 'hh': 'ore', + 'dd': 'zile', + 'MM': 'luni', + 'yy': 'ani' + }, + separator = ' '; + if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) { + separator = ' de '; + } + + return number + separator + format[key]; + } + + return moment.defineLocale('ro', { + months : "ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"), + monthsShort : "ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"), + weekdays : "duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"), + weekdaysShort : "Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"), + weekdaysMin : "Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY H:mm", + LLLL : "dddd, D MMMM YYYY H:mm" + }, + calendar : { + sameDay: "[azi la] LT", + nextDay: '[mâine la] LT', + nextWeek: 'dddd [la] LT', + lastDay: '[ieri la] LT', + lastWeek: '[fosta] dddd [la] LT', + sameElse: 'L' + }, + relativeTime : { + future : "peste %s", + past : "%s în urmă", + s : "câteva secunde", + m : "un minut", + mm : relativeTimeWithPlural, + h : "o oră", + hh : relativeTimeWithPlural, + d : "o zi", + dd : relativeTimeWithPlural, + M : "o lună", + MM : relativeTimeWithPlural, + y : "un an", + yy : relativeTimeWithPlural + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : russian (ru) +// author : Viktorminator : https://github.com/Viktorminator +// Author : Menelion Elensúle : https://github.com/Oire + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); + } + + function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут', + 'hh': 'час_часа_часов', + 'dd': 'день_дня_дней', + 'MM': 'месяц_месяца_месяцев', + 'yy': 'год_года_лет' + }; + if (key === 'm') { + return withoutSuffix ? 'минута' : 'минуту'; + } + else { + return number + ' ' + plural(format[key], +number); + } + } + + function monthsCaseReplace(m, format) { + var months = { + 'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), + 'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_') + }, + + nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ? + 'accusative' : + 'nominative'; + + return months[nounCase][m.month()]; + } + + function monthsShortCaseReplace(m, format) { + var monthsShort = { + 'nominative': 'янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), + 'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_') + }, + + nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ? + 'accusative' : + 'nominative'; + + return monthsShort[nounCase][m.month()]; + } + + function weekdaysCaseReplace(m, format) { + var weekdays = { + 'nominative': 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'), + 'accusative': 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_') + }, + + nounCase = (/\[ ?[Вв] ?(?:прошлую|следующую)? ?\] ?dddd/).test(format) ? + 'accusative' : + 'nominative'; + + return weekdays[nounCase][m.day()]; + } + + return moment.defineLocale('ru', { + months : monthsCaseReplace, + monthsShort : monthsShortCaseReplace, + weekdays : weekdaysCaseReplace, + weekdaysShort : "вс_пн_вт_ср_чт_пт_сб".split("_"), + weekdaysMin : "вс_пн_вт_ср_чт_пт_сб".split("_"), + monthsParse : [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[й|я]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i], + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY г.", + LLL : "D MMMM YYYY г., LT", + LLLL : "dddd, D MMMM YYYY г., LT" + }, + calendar : { + sameDay: '[Сегодня в] LT', + nextDay: '[Завтра в] LT', + lastDay: '[Вчера в] LT', + nextWeek: function () { + return this.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT'; + }, + lastWeek: function () { + switch (this.day()) { + case 0: + return '[В прошлое] dddd [в] LT'; + case 1: + case 2: + case 4: + return '[В прошлый] dddd [в] LT'; + case 3: + case 5: + case 6: + return '[В прошлую] dddd [в] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : "через %s", + past : "%s назад", + s : "несколько секунд", + m : relativeTimeWithPlural, + mm : relativeTimeWithPlural, + h : "час", + hh : relativeTimeWithPlural, + d : "день", + dd : relativeTimeWithPlural, + M : "месяц", + MM : relativeTimeWithPlural, + y : "год", + yy : relativeTimeWithPlural + }, + + meridiemParse: /ночи|утра|дня|вечера/i, + isPM : function (input) { + return /^(дня|вечера)$/.test(input); + }, + + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "ночи"; + } else if (hour < 12) { + return "утра"; + } else if (hour < 17) { + return "дня"; + } else { + return "вечера"; + } + }, + + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + return number + '-й'; + case 'D': + return number + '-го'; + case 'w': + case 'W': + return number + '-я'; + default: + return number; + } + }, + + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : slovak (sk) +// author : Martin Minka : https://github.com/k2s +// based on work of petrbela : https://github.com/petrbela + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var months = "január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"), + monthsShort = "jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"); + + function plural(n) { + return (n > 1) && (n < 5); + } + + function translate(number, withoutSuffix, key, isFuture) { + var result = number + " "; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami'; + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou'); + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'minúty' : 'minút'); + } else { + return result + 'minútami'; + } + break; + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'hodiny' : 'hodín'); + } else { + return result + 'hodinami'; + } + break; + case 'd': // a day / in a day / a day ago + return (withoutSuffix || isFuture) ? 'deň' : 'dňom'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'dni' : 'dní'); + } else { + return result + 'dňami'; + } + break; + case 'M': // a month / in a month / a month ago + return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'mesiace' : 'mesiacov'); + } else { + return result + 'mesiacmi'; + } + break; + case 'y': // a year / in a year / a year ago + return (withoutSuffix || isFuture) ? 'rok' : 'rokom'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'roky' : 'rokov'); + } else { + return result + 'rokmi'; + } + break; + } + } + + return moment.defineLocale('sk', { + months : months, + monthsShort : monthsShort, + monthsParse : (function (months, monthsShort) { + var i, _monthsParse = []; + for (i = 0; i < 12; i++) { + // use custom parser to solve problem with July (červenec) + _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); + } + return _monthsParse; + }(months, monthsShort)), + weekdays : "nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"), + weekdaysShort : "ne_po_ut_st_št_pi_so".split("_"), + weekdaysMin : "ne_po_ut_st_št_pi_so".split("_"), + longDateFormat : { + LT: "H:mm", + L : "DD.MM.YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd D. MMMM YYYY LT" + }, + calendar : { + sameDay: "[dnes o] LT", + nextDay: '[zajtra o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v nedeľu o] LT'; + case 1: + case 2: + return '[v] dddd [o] LT'; + case 3: + return '[v stredu o] LT'; + case 4: + return '[vo štvrtok o] LT'; + case 5: + return '[v piatok o] LT'; + case 6: + return '[v sobotu o] LT'; + } + }, + lastDay: '[včera o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulú nedeľu o] LT'; + case 1: + case 2: + return '[minulý] dddd [o] LT'; + case 3: + return '[minulú stredu o] LT'; + case 4: + case 5: + return '[minulý] dddd [o] LT'; + case 6: + return '[minulú sobotu o] LT'; + } + }, + sameElse: "L" + }, + relativeTime : { + future : "za %s", + past : "pred %s", + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + ordinal : '%d.', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : slovenian (sl) +// author : Robert Sedovšek : https://github.com/sedovsek + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + function translate(number, withoutSuffix, key) { + var result = number + " "; + switch (key) { + case 'm': + return withoutSuffix ? 'ena minuta' : 'eno minuto'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2) { + result += 'minuti'; + } else if (number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minut'; + } + return result; + case 'h': + return withoutSuffix ? 'ena ura' : 'eno uro'; + case 'hh': + if (number === 1) { + result += 'ura'; + } else if (number === 2) { + result += 'uri'; + } else if (number === 3 || number === 4) { + result += 'ure'; + } else { + result += 'ur'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dni'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mesec'; + } else if (number === 2) { + result += 'meseca'; + } else if (number === 3 || number === 4) { + result += 'mesece'; + } else { + result += 'mesecev'; + } + return result; + case 'yy': + if (number === 1) { + result += 'leto'; + } else if (number === 2) { + result += 'leti'; + } else if (number === 3 || number === 4) { + result += 'leta'; + } else { + result += 'let'; + } + return result; + } + } + + return moment.defineLocale('sl', { + months : "januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"), + monthsShort : "jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"), + weekdays : "nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"), + weekdaysShort : "ned._pon._tor._sre._čet._pet._sob.".split("_"), + weekdaysMin : "ne_po_to_sr_če_pe_so".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD. MM. YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd, D. MMMM YYYY LT" + }, + calendar : { + sameDay : '[danes ob] LT', + nextDay : '[jutri ob] LT', + + nextWeek : function () { + switch (this.day()) { + case 0: + return '[v] [nedeljo] [ob] LT'; + case 3: + return '[v] [sredo] [ob] LT'; + case 6: + return '[v] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[v] dddd [ob] LT'; + } + }, + lastDay : '[včeraj ob] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[prejšnja] dddd [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prejšnji] dddd [ob] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : "čez %s", + past : "%s nazaj", + s : "nekaj sekund", + m : translate, + mm : translate, + h : translate, + hh : translate, + d : "en dan", + dd : translate, + M : "en mesec", + MM : translate, + y : "eno leto", + yy : translate + }, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : Albanian (sq) +// author : Flakërim Ismani : https://github.com/flakerimi +// author: Menelion Elensúle: https://github.com/Oire (tests) +// author : Oerd Cukalla : https://github.com/oerd (fixes) + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('sq', { + months : "Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"), + monthsShort : "Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"), + weekdays : "E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"), + weekdaysShort : "Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"), + weekdaysMin : "D_H_Ma_Më_E_P_Sh".split("_"), + meridiem : function (hours, minutes, isLower) { + return hours < 12 ? 'PD' : 'MD'; + }, + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[Sot në] LT', + nextDay : '[Nesër në] LT', + nextWeek : 'dddd [në] LT', + lastDay : '[Dje në] LT', + lastWeek : 'dddd [e kaluar në] LT', + sameElse : 'L' + }, + relativeTime : { + future : "në %s", + past : "%s më parë", + s : "disa sekonda", + m : "një minutë", + mm : "%d minuta", + h : "një orë", + hh : "%d orë", + d : "një ditë", + dd : "%d ditë", + M : "një muaj", + MM : "%d muaj", + y : "një vit", + yy : "%d vite" + }, + ordinal : '%d.', + 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. + } + }); +})); + +// moment.js locale configuration +// locale : Serbian-cyrillic (sr-cyrl) +// author : Milan Janačković : https://github.com/milan-j + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var translator = { + words: { //Different grammatical cases + m: ['један минут', 'једне минуте'], + mm: ['минут', 'минуте', 'минута'], + h: ['један сат', 'једног сата'], + hh: ['сат', 'сата', 'сати'], + dd: ['дан', 'дана', 'дана'], + MM: ['месец', 'месеца', 'месеци'], + yy: ['година', 'године', 'година'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator.correctGrammaticalCase(number, wordKey); + } + } + }; + + return moment.defineLocale('sr-cyrl', { + months: ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар'], + monthsShort: ['јан.', 'феб.', 'мар.', 'апр.', 'мај', 'јун', 'јул', 'авг.', 'сеп.', 'окт.', 'нов.', 'дец.'], + weekdays: ['недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота'], + weekdaysShort: ['нед.', 'пон.', 'уто.', 'сре.', 'чет.', 'пет.', 'суб.'], + weekdaysMin: ['не', 'по', 'ут', 'ср', 'че', 'пе', 'су'], + longDateFormat: { + LT: "H:mm", + L: "DD. MM. YYYY", + LL: "D. MMMM YYYY", + LLL: "D. MMMM YYYY LT", + LLLL: "dddd, D. MMMM YYYY LT" + }, + calendar: { + sameDay: '[данас у] LT', + nextDay: '[сутра у] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[у] [недељу] [у] LT'; + case 3: + return '[у] [среду] [у] LT'; + case 6: + return '[у] [суботу] [у] LT'; + case 1: + case 2: + case 4: + case 5: + return '[у] dddd [у] LT'; + } + }, + lastDay : '[јуче у] LT', + lastWeek : function () { + var lastWeekDays = [ + '[прошле] [недеље] [у] LT', + '[прошлог] [понедељка] [у] LT', + '[прошлог] [уторка] [у] LT', + '[прошле] [среде] [у] LT', + '[прошлог] [четвртка] [у] LT', + '[прошлог] [петка] [у] LT', + '[прошле] [суботе] [у] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : "за %s", + past : "пре %s", + s : "неколико секунди", + m : translator.translate, + mm : translator.translate, + h : translator.translate, + hh : translator.translate, + d : "дан", + dd : translator.translate, + M : "месец", + MM : translator.translate, + y : "годину", + yy : translator.translate + }, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : Serbian-latin (sr) +// author : Milan Janačković : https://github.com/milan-j + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var translator = { + words: { //Different grammatical cases + m: ['jedan minut', 'jedne minute'], + mm: ['minut', 'minute', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mesec', 'meseca', 'meseci'], + yy: ['godina', 'godine', 'godina'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator.correctGrammaticalCase(number, wordKey); + } + } + }; + + return moment.defineLocale('sr', { + months: ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar'], + monthsShort: ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun', 'jul', 'avg.', 'sep.', 'okt.', 'nov.', 'dec.'], + weekdays: ['nedelja', 'ponedeljak', 'utorak', 'sreda', 'četvrtak', 'petak', 'subota'], + weekdaysShort: ['ned.', 'pon.', 'uto.', 'sre.', 'čet.', 'pet.', 'sub.'], + weekdaysMin: ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'], + longDateFormat: { + LT: "H:mm", + L: "DD. MM. YYYY", + LL: "D. MMMM YYYY", + LLL: "D. MMMM YYYY LT", + LLLL: "dddd, D. MMMM YYYY LT" + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedelju] [u] LT'; + case 3: + return '[u] [sredu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[juče u] LT', + lastWeek : function () { + var lastWeekDays = [ + '[prošle] [nedelje] [u] LT', + '[prošlog] [ponedeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : "za %s", + past : "pre %s", + s : "nekoliko sekundi", + m : translator.translate, + mm : translator.translate, + h : translator.translate, + hh : translator.translate, + d : "dan", + dd : translator.translate, + M : "mesec", + MM : translator.translate, + y : "godinu", + yy : translator.translate + }, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : swedish (sv) +// author : Jens Alm : https://github.com/ulmus + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('sv', { + months : "januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"), + monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"), + weekdays : "söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"), + weekdaysShort : "sön_mån_tis_ons_tor_fre_lör".split("_"), + weekdaysMin : "sö_må_ti_on_to_fr_lö".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "YYYY-MM-DD", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: '[Idag] LT', + nextDay: '[Imorgon] LT', + lastDay: '[Igår] LT', + nextWeek: 'dddd LT', + lastWeek: '[Förra] dddd[en] LT', + sameElse: 'L' + }, + relativeTime : { + future : "om %s", + past : "för %s sedan", + s : "några sekunder", + m : "en minut", + mm : "%d minuter", + h : "en timme", + hh : "%d timmar", + d : "en dag", + dd : "%d dagar", + M : "en månad", + MM : "%d månader", + y : "ett år", + yy : "%d år" + }, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'e' : + (b === 1) ? 'a' : + (b === 2) ? 'a' : + (b === 3) ? 'e' : 'e'; + return number + output; + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : tamil (ta) +// author : Arjunkumar Krishnamoorthy : https://github.com/tk120404 + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + /*var symbolMap = { + '1': '௧', + '2': '௨', + '3': '௩', + '4': '௪', + '5': '௫', + '6': '௬', + '7': '௭', + '8': '௮', + '9': '௯', + '0': '௦' + }, + numberMap = { + '௧': '1', + '௨': '2', + '௩': '3', + '௪': '4', + '௫': '5', + '௬': '6', + '௭': '7', + '௮': '8', + '௯': '9', + '௦': '0' + }; */ + + return moment.defineLocale('ta', { + months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split("_"), + monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split("_"), + weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split("_"), + weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split("_"), + weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY, LT", + LLLL : "dddd, D MMMM YYYY, LT" + }, + calendar : { + sameDay : '[இன்று] LT', + nextDay : '[நாளை] LT', + nextWeek : 'dddd, LT', + lastDay : '[நேற்று] LT', + lastWeek : '[கடந்த வாரம்] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s இல்", + past : "%s முன்", + s : "ஒரு சில விநாடிகள்", + m : "ஒரு நிமிடம்", + mm : "%d நிமிடங்கள்", + h : "ஒரு மணி நேரம்", + hh : "%d மணி நேரம்", + d : "ஒரு நாள்", + dd : "%d நாட்கள்", + M : "ஒரு மாதம்", + MM : "%d மாதங்கள்", + y : "ஒரு வருடம்", + yy : "%d ஆண்டுகள்" + }, +/* preparse: function (string) { + return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + },*/ + ordinal : function (number) { + return number + 'வது'; + }, + + + // refer http://ta.wikipedia.org/s/1er1 + + meridiem : function (hour, minute, isLower) { + if (hour >= 6 && hour <= 10) { + return " காலை"; + } else if (hour >= 10 && hour <= 14) { + return " நண்பகல்"; + } else if (hour >= 14 && hour <= 18) { + return " எற்பாடு"; + } else if (hour >= 18 && hour <= 20) { + return " மாலை"; + } else if (hour >= 20 && hour <= 24) { + return " இரவு"; + } else if (hour >= 0 && hour <= 6) { + return " வைகறை"; + } + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : thai (th) +// author : Kridsada Thanabulpong : https://github.com/sirn + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('th', { + months : "มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"), + monthsShort : "มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา".split("_"), + weekdays : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"), + weekdaysShort : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"), // yes, three characters difference + weekdaysMin : "อา._จ._อ._พ._พฤ._ศ._ส.".split("_"), + longDateFormat : { + LT : "H นาฬิกา m นาที", + L : "YYYY/MM/DD", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY เวลา LT", + LLLL : "วันddddที่ D MMMM YYYY เวลา LT" + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return "ก่อนเที่ยง"; + } else { + return "หลังเที่ยง"; + } + }, + calendar : { + sameDay : '[วันนี้ เวลา] LT', + nextDay : '[พรุ่งนี้ เวลา] LT', + nextWeek : 'dddd[หน้า เวลา] LT', + lastDay : '[เมื่อวานนี้ เวลา] LT', + lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT', + sameElse : 'L' + }, + relativeTime : { + future : "อีก %s", + past : "%sที่แล้ว", + s : "ไม่กี่วินาที", + m : "1 นาที", + mm : "%d นาที", + h : "1 ชั่วโมง", + hh : "%d ชั่วโมง", + d : "1 วัน", + dd : "%d วัน", + M : "1 เดือน", + MM : "%d เดือน", + y : "1 ปี", + yy : "%d ปี" + } + }); +})); + +// moment.js locale configuration +// locale : Tagalog/Filipino (tl-ph) +// author : Dan Hagman + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('tl-ph', { + months : "Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"), + monthsShort : "Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"), + weekdays : "Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"), + weekdaysShort : "Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"), + weekdaysMin : "Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "MM/D/YYYY", + LL : "MMMM D, YYYY", + LLL : "MMMM D, YYYY LT", + LLLL : "dddd, MMMM DD, YYYY LT" + }, + calendar : { + sameDay: "[Ngayon sa] LT", + nextDay: '[Bukas sa] LT', + nextWeek: 'dddd [sa] LT', + lastDay: '[Kahapon sa] LT', + lastWeek: 'dddd [huling linggo] LT', + sameElse: 'L' + }, + relativeTime : { + future : "sa loob ng %s", + past : "%s ang nakalipas", + s : "ilang segundo", + m : "isang minuto", + mm : "%d minuto", + h : "isang oras", + hh : "%d oras", + d : "isang araw", + dd : "%d araw", + M : "isang buwan", + MM : "%d buwan", + y : "isang taon", + yy : "%d taon" + }, + ordinal : function (number) { + return number; + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : turkish (tr) +// authors : Erhan Gundogan : https://github.com/erhangundogan, +// Burak Yiğit Kaya: https://github.com/BYK + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + var suffixes = { + 1: "'inci", + 5: "'inci", + 8: "'inci", + 70: "'inci", + 80: "'inci", + + 2: "'nci", + 7: "'nci", + 20: "'nci", + 50: "'nci", + + 3: "'üncü", + 4: "'üncü", + 100: "'üncü", + + 6: "'ncı", + + 9: "'uncu", + 10: "'uncu", + 30: "'uncu", + + 60: "'ıncı", + 90: "'ıncı" + }; + + return moment.defineLocale('tr', { + months : "Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"), + monthsShort : "Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"), + weekdays : "Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"), + weekdaysShort : "Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"), + weekdaysMin : "Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[bugün saat] LT', + nextDay : '[yarın saat] LT', + nextWeek : '[haftaya] dddd [saat] LT', + lastDay : '[dün] LT', + lastWeek : '[geçen hafta] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s sonra", + past : "%s önce", + s : "birkaç saniye", + m : "bir dakika", + mm : "%d dakika", + h : "bir saat", + hh : "%d saat", + d : "bir gün", + dd : "%d gün", + M : "bir ay", + MM : "%d ay", + y : "bir yıl", + yy : "%d yıl" + }, + ordinal : function (number) { + if (number === 0) { // special case for zero + return number + "'ıncı"; + } + var a = number % 10, + b = number % 100 - a, + c = number >= 100 ? 100 : null; + + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : Morocco Central Atlas Tamaziɣt in Latin (tzm-latn) +// author : Abdel Said : https://github.com/abdelsaid + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('tzm-latn', { + months : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"), + monthsShort : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"), + weekdays : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"), + weekdaysShort : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"), + weekdaysMin : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: "[asdkh g] LT", + nextDay: '[aska g] LT', + nextWeek: 'dddd [g] LT', + lastDay: '[assant g] LT', + lastWeek: 'dddd [g] LT', + sameElse: 'L' + }, + relativeTime : { + future : "dadkh s yan %s", + past : "yan %s", + s : "imik", + m : "minuḍ", + mm : "%d minuḍ", + h : "saɛa", + hh : "%d tassaɛin", + d : "ass", + dd : "%d ossan", + M : "ayowr", + MM : "%d iyyirn", + y : "asgas", + yy : "%d isgasn" + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : Morocco Central Atlas Tamaziɣt (tzm) +// author : Abdel Said : https://github.com/abdelsaid + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('tzm', { + months : "ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"), + monthsShort : "ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"), + weekdays : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"), + weekdaysShort : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"), + weekdaysMin : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: "[ⴰⵙⴷⵅ ⴴ] LT", + nextDay: '[ⴰⵙⴽⴰ ⴴ] LT', + nextWeek: 'dddd [ⴴ] LT', + lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT', + lastWeek: 'dddd [ⴴ] LT', + sameElse: 'L' + }, + relativeTime : { + future : "ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s", + past : "ⵢⴰⵏ %s", + s : "ⵉⵎⵉⴽ", + m : "ⵎⵉⵏⵓⴺ", + mm : "%d ⵎⵉⵏⵓⴺ", + h : "ⵙⴰⵄⴰ", + hh : "%d ⵜⴰⵙⵙⴰⵄⵉⵏ", + d : "ⴰⵙⵙ", + dd : "%d oⵙⵙⴰⵏ", + M : "ⴰⵢoⵓⵔ", + MM : "%d ⵉⵢⵢⵉⵔⵏ", + y : "ⴰⵙⴳⴰⵙ", + yy : "%d ⵉⵙⴳⴰⵙⵏ" + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : ukrainian (uk) +// author : zemlanin : https://github.com/zemlanin +// Author : Menelion Elensúle : https://github.com/Oire + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); + } + + function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': 'хвилина_хвилини_хвилин', + 'hh': 'година_години_годин', + 'dd': 'день_дні_днів', + 'MM': 'місяць_місяці_місяців', + 'yy': 'рік_роки_років' + }; + if (key === 'm') { + return withoutSuffix ? 'хвилина' : 'хвилину'; + } + else if (key === 'h') { + return withoutSuffix ? 'година' : 'годину'; + } + else { + return number + ' ' + plural(format[key], +number); + } + } + + function monthsCaseReplace(m, format) { + var months = { + 'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'), + 'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_') + }, + + nounCase = (/D[oD]? *MMMM?/).test(format) ? + 'accusative' : + 'nominative'; + + return months[nounCase][m.month()]; + } + + function weekdaysCaseReplace(m, format) { + var weekdays = { + 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'), + 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'), + 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_') + }, + + nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ? + 'accusative' : + ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ? + 'genitive' : + 'nominative'); + + return weekdays[nounCase][m.day()]; + } + + function processHoursFunction(str) { + return function () { + return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; + }; + } + + return moment.defineLocale('uk', { + months : monthsCaseReplace, + monthsShort : "січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"), + weekdays : weekdaysCaseReplace, + weekdaysShort : "нд_пн_вт_ср_чт_пт_сб".split("_"), + weekdaysMin : "нд_пн_вт_ср_чт_пт_сб".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY р.", + LLL : "D MMMM YYYY р., LT", + LLLL : "dddd, D MMMM YYYY р., LT" + }, + calendar : { + sameDay: processHoursFunction('[Сьогодні '), + nextDay: processHoursFunction('[Завтра '), + lastDay: processHoursFunction('[Вчора '), + nextWeek: processHoursFunction('[У] dddd ['), + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return processHoursFunction('[Минулої] dddd [').call(this); + case 1: + case 2: + case 4: + return processHoursFunction('[Минулого] dddd [').call(this); + } + }, + sameElse: 'L' + }, + relativeTime : { + future : "за %s", + past : "%s тому", + s : "декілька секунд", + m : relativeTimeWithPlural, + mm : relativeTimeWithPlural, + h : "годину", + hh : relativeTimeWithPlural, + d : "день", + dd : relativeTimeWithPlural, + M : "місяць", + MM : relativeTimeWithPlural, + y : "рік", + yy : relativeTimeWithPlural + }, + + // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason + + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "ночі"; + } else if (hour < 12) { + return "ранку"; + } else if (hour < 17) { + return "дня"; + } else { + return "вечора"; + } + }, + + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return number + '-й'; + case 'D': + return number + '-го'; + default: + return number; + } + }, + + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : uzbek +// author : Sardor Muminov : https://github.com/muminoff + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('uz', { + months : "январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"), + monthsShort : "янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"), + weekdays : "Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"), + weekdaysShort : "Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"), + weekdaysMin : "Як_Ду_Се_Чо_Па_Жу_Ша".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "D MMMM YYYY, dddd LT" + }, + calendar : { + sameDay : '[Бугун соат] LT [да]', + nextDay : '[Эртага] LT [да]', + nextWeek : 'dddd [куни соат] LT [да]', + lastDay : '[Кеча соат] LT [да]', + lastWeek : '[Утган] dddd [куни соат] LT [да]', + sameElse : 'L' + }, + relativeTime : { + future : "Якин %s ичида", + past : "Бир неча %s олдин", + s : "фурсат", + m : "бир дакика", + mm : "%d дакика", + h : "бир соат", + hh : "%d соат", + d : "бир кун", + dd : "%d кун", + M : "бир ой", + MM : "%d ой", + y : "бир йил", + yy : "%d йил" + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 4th is the first week of the year. + } + }); +})); + +// moment.js locale configuration +// locale : vietnamese (vi) +// author : Bang Nguyen : https://github.com/bangnk + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('vi', { + months : "tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"), + monthsShort : "Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"), + weekdays : "chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"), + weekdaysShort : "CN_T2_T3_T4_T5_T6_T7".split("_"), + weekdaysMin : "CN_T2_T3_T4_T5_T6_T7".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM [năm] YYYY", + LLL : "D MMMM [năm] YYYY LT", + LLLL : "dddd, D MMMM [năm] YYYY LT", + l : "DD/M/YYYY", + ll : "D MMM YYYY", + lll : "D MMM YYYY LT", + llll : "ddd, D MMM YYYY LT" + }, + calendar : { + sameDay: "[Hôm nay lúc] LT", + nextDay: '[Ngày mai lúc] LT', + nextWeek: 'dddd [tuần tới lúc] LT', + lastDay: '[Hôm qua lúc] LT', + lastWeek: 'dddd [tuần rồi lúc] LT', + sameElse: 'L' + }, + relativeTime : { + future : "%s tới", + past : "%s trước", + s : "vài giây", + m : "một phút", + mm : "%d phút", + h : "một giờ", + hh : "%d giờ", + d : "một ngày", + dd : "%d ngày", + M : "một tháng", + MM : "%d tháng", + y : "một năm", + yy : "%d năm" + }, + ordinal : function (number) { + return number; + }, + 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. + } + }); +})); + +// moment.js locale configuration +// locale : chinese +// author : suupic : https://github.com/suupic +// author : Zeno Zeng : https://github.com/zenozeng + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('zh-cn', { + months : "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"), + monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), + weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"), + weekdaysShort : "周日_周一_周二_周三_周四_周五_周六".split("_"), + weekdaysMin : "日_一_二_三_四_五_六".split("_"), + longDateFormat : { + LT : "Ah点mm", + L : "YYYY-MM-DD", + LL : "YYYY年MMMD日", + LLL : "YYYY年MMMD日LT", + LLLL : "YYYY年MMMD日ddddLT", + l : "YYYY-MM-DD", + ll : "YYYY年MMMD日", + lll : "YYYY年MMMD日LT", + llll : "YYYY年MMMD日ddddLT" + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return "凌晨"; + } else if (hm < 900) { + return "早上"; + } else if (hm < 1130) { + return "上午"; + } else if (hm < 1230) { + return "中午"; + } else if (hm < 1800) { + return "下午"; + } else { + return "晚上"; + } + }, + calendar : { + sameDay : function () { + return this.minutes() === 0 ? "[今天]Ah[点整]" : "[今天]LT"; + }, + nextDay : function () { + return this.minutes() === 0 ? "[明天]Ah[点整]" : "[明天]LT"; + }, + lastDay : function () { + return this.minutes() === 0 ? "[昨天]Ah[点整]" : "[昨天]LT"; + }, + nextWeek : function () { + var startOfWeek, prefix; + startOfWeek = moment().startOf('week'); + prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]'; + return this.minutes() === 0 ? prefix + "dddAh点整" : prefix + "dddAh点mm"; + }, + lastWeek : function () { + var startOfWeek, prefix; + startOfWeek = moment().startOf('week'); + prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]'; + return this.minutes() === 0 ? prefix + "dddAh点整" : prefix + "dddAh点mm"; + }, + sameElse : 'LL' + }, + ordinal : function (number, period) { + switch (period) { + case "d": + case "D": + case "DDD": + return number + "日"; + case "M": + return number + "月"; + case "w": + case "W": + return number + "周"; + default: + return number; + } + }, + relativeTime : { + future : "%s内", + past : "%s前", + s : "几秒", + m : "1分钟", + mm : "%d分钟", + h : "1小时", + hh : "%d小时", + d : "1天", + dd : "%d天", + M : "1个月", + MM : "%d个月", + y : "1年", + yy : "%d年" + }, + week : { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + 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. + } + }); +})); + +// moment.js locale configuration +// locale : traditional chinese (zh-tw) +// author : Ben : https://github.com/ben-lin + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('../moment')); // Node + } else { + factory(window.moment); // Browser global + } +}(function (moment) { + return moment.defineLocale('zh-tw', { + months : "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"), + monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), + weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"), + weekdaysShort : "週日_週一_週二_週三_週四_週五_週六".split("_"), + weekdaysMin : "日_一_二_三_四_五_六".split("_"), + longDateFormat : { + LT : "Ah點mm", + L : "YYYY年MMMD日", + LL : "YYYY年MMMD日", + LLL : "YYYY年MMMD日LT", + LLLL : "YYYY年MMMD日ddddLT", + l : "YYYY年MMMD日", + ll : "YYYY年MMMD日", + lll : "YYYY年MMMD日LT", + llll : "YYYY年MMMD日ddddLT" + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 900) { + return "早上"; + } else if (hm < 1130) { + return "上午"; + } else if (hm < 1230) { + return "中午"; + } else if (hm < 1800) { + return "下午"; + } else { + return "晚上"; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + ordinal : function (number, period) { + switch (period) { + case "d" : + case "D" : + case "DDD" : + return number + "日"; + case "M" : + return number + "月"; + case "w" : + case "W" : + return number + "週"; + default : + return number; + } + }, + relativeTime : { + future : "%s內", + past : "%s前", + s : "幾秒", + m : "一分鐘", + mm : "%d分鐘", + h : "一小時", + hh : "%d小時", + d : "一天", + dd : "%d天", + M : "一個月", + MM : "%d個月", + y : "一年", + yy : "%d年" + } + }); +})); diff --git a/ajax/libs/moment.js/2.8.0/locales.min.js b/ajax/libs/moment.js/2.8.0/locales.min.js new file mode 100644 index 000000000..492076a57 --- /dev/null +++ b/ajax/libs/moment.js/2.8.0/locales.min.js @@ -0,0 +1,4 @@ +!function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_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("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiem:function(a,b,c){return 12>a?c?"vm":"VM":c?"nm":"NM"},longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){var b={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},c={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};return a.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},meridiem:function(a){return 12>a?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return c[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){var b={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},c={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};return a.defineLocale("ar",{months:"يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"),monthsShort:"يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},meridiem:function(a){return 12>a?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return c[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){var b={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};return a.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiem:function(a){return 4>a?"gecə":12>a?"səhər":17>a?"gündüz":"axşam"},ordinal:function(a){if(0===a)return a+"-ıncı";var c=a%10,d=a%100-c,e=a>=100?100:null;return a+(b[c]||b[d]||b[e])},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function c(a,c,d){var e={mm:c?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:c?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};return"m"===d?c?"хвіліна":"хвіліну":"h"===d?c?"гадзіна":"гадзіну":a+" "+b(e[d],+a)}function d(a,b){var c={nominative:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_"),accusative:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_")},d=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function e(a,b){var c={nominative:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),accusative:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_")},d=/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/.test(b)?"accusative":"nominative";return c[d][a.day()]}return a.defineLocale("be",{months:d,monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:e,weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., LT",LLLL:"dddd, D MMMM YYYY г., LT"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:c,mm:c,h:c,hh:c,d:"дзень",dd:c,M:"месяц",MM:c,y:"год",yy:c},meridiem:function(a){return 4>a?"ночы":12>a?"раніцы":17>a?"дня":"вечара"},ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a%10!==2&&a%10!==3||a%100===12||a%100===13?a+"-ы":a+"-і";case"D":return a+"-га";default:return a}},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&20>c?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){var b={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},c={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};return a.defineLocale("bn",{months:"জানুয়ারী_ফেবুয়ারী_মার্চ_এপ্রিল_মে_জুন_জুলাই_অগাস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপর_মে_জুন_জুল_অগ_সেপ্ট_অক্টো_নভ_ডিসেম্".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পত্তিবার_শুক্রুবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পত্তি_শুক্রু_শনি".split("_"),weekdaysMin:"রব_সম_মঙ্গ_বু_ব্রিহ_শু_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কএক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(a){return a.replace(/[১২৩৪৫৬৭৮৯০]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 4>a?"রাত":10>a?"শকাল":17>a?"দুপুর":20>a?"বিকেল":"রাত"},week:{dow:0,doy:6}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){var b={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},c={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};return a.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(a){return a.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 4>a?"མཚན་མོ":10>a?"ཞོགས་ཀས":17>a?"ཉིན་གུང":20>a?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c){var d={mm:"munutenn",MM:"miz",dd:"devezh"};return a+" "+e(d[c],a)}function c(a){switch(d(a)){case 1:case 3:case 4:case 5:case 9:return a+" bloaz";default:return a+" vloaz"}}function d(a){return a>9?d(a%10):a}function e(a,b){return 2===b?f(a):a}function f(a){var b={m:"v",b:"v",d:"z"};return void 0===b[a.charAt(0)]?a:b[a.charAt(0)]+a.substring(1)}return a.defineLocale("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("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),longDateFormat:{LT:"h[e]mm A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY LT",LLLL:"dddd, D [a viz] MMMM YYYY LT"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:b,h:"un eur",hh:"%d eur",d:"un devezh",dd:b,M:"ur miz",MM:b,y:"ur bloaz",yy:c},ordinal:function(a){var b=1===a?"añ":"vet";return a+b},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}return a.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),longDateFormat:{LT:"H:mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:b,mm:b,h:b,hh:b,d:"dan",dd:b,M:"mjesec",MM:b,y:"godinu",yy:b},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("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("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a){return a>1&&5>a&&1!==~~(a/10)}function c(a,c,d,e){var f=a+" ";switch(d){case"s":return c||e?"pár sekund":"pár sekundami";case"m":return c?"minuta":e?"minutu":"minutou";case"mm":return c||e?f+(b(a)?"minuty":"minut"):f+"minutami";break;case"h":return c?"hodina":e?"hodinu":"hodinou";case"hh":return c||e?f+(b(a)?"hodiny":"hodin"):f+"hodinami";break;case"d":return c||e?"den":"dnem";case"dd":return c||e?f+(b(a)?"dny":"dní"):f+"dny";break;case"M":return c||e?"měsíc":"měsícem";case"MM":return c||e?f+(b(a)?"měsíce":"měsíců"):f+"měsíci";break;case"y":return c||e?"rok":"rokem";case"yy":return c||e?f+(b(a)?"roky":"let"):f+"lety"}}var d="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),e="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");return a.defineLocale("cs",{months:d,monthsShort:e,monthsParse:function(a,b){var c,d=[];for(c=0;12>c;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(d,e),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H.mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd D. MMMM YYYY LT"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:c,m:c,mm:c,h:c,hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("cv",{months:"кăрлач_нарăс_пуш_ака_май_çĕртме_утă_çурла_авăн_юпа_чӳк_раштав".split("_"),monthsShort:"кăр_нар_пуш_ака_май_çĕр_утă_çур_ав_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кĕçнерникун_эрнекун_шăматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кĕç_эрн_шăм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кç_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",L:"DD-MM-YYYY",LL:"YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ]",LLL:"YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT",LLLL:"dddd, YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ĕнер] LT [сехетре]",nextWeek:"[Çитес] dddd LT [сехетре]",lastWeek:"[Иртнĕ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(a){var b=/сехет$/i.exec(a)?"рен":/çул$/i.exec(a)?"тан":"ран";return a+b},past:"%s каялла",s:"пĕр-ик çеккунт",m:"пĕр минут",mm:"%d минут",h:"пĕр сехет",hh:"%d сехет",d:"пĕр кун",dd:"%d кун",M:"пĕр уйăх",MM:"%d уйăх",y:"пĕр çул",yy:"%d çул"},ordinal:"%d-мĕш",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},ordinal:function(a){var b=a,c="",d=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"];return b>20?c=40===b||50===b||60===b||80===b||100===b?"fed":"ain":b>0&&(c=d[b]),a+c},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd [d.] D. MMMM YYYY LT"},calendar:{sameDay:"[I dag kl.] LT",nextDay:"[I morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[I går kl.] LT",lastWeek:"[sidste] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c){var d={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?d[c][0]:d[c][1]}return a.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm [Uhr]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[Heute um] LT",sameElse:"L",nextDay:"[Morgen um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gestern um] LT",lastWeek:"[letzten] dddd [um] LT"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:b,mm:"%d Minuten",h:b,hh:"%d Stunden",d:b,dd:b,M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c){var d={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?d[c][0]:d[c][1]}return a.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm [Uhr]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[Heute um] LT",sameElse:"L",nextDay:"[Morgen um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gestern um] LT",lastWeek:"[letzten] dddd [um] LT"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:b,mm:"%d Minuten",h:b,hh:"%d Stunden",d:b,dd:b,M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(a,b){return/D/.test(b.substring(0,b.indexOf("MMMM")))?this._monthsGenitiveEl[a.month()]:this._monthsNominativeEl[a.month()]},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(a,b,c){return a>11?c?"μμ":"ΜΜ":c?"πμ":"ΠΜ"},longDateFormat:{LT:"h:mm A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(a,b){var c=this._calendarEl[a],d=b&&b.hours();return"function"==typeof c&&(c=c.apply(b)),c.replace("{}",d%12===1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},ordinal:function(a){return a+"η"},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("en-au",{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("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("en-ca",{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("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",L:"YYYY-MM-DD",LL:"D MMMM, YYYY",LLL:"D MMMM, YYYY LT",LLLL:"dddd, D MMMM, YYYY LT"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("en-gb",{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("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"),weekdaysShort:"Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Ĵa_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"D[-an de] MMMM, YYYY",LLL:"D[-an de] MMMM, YYYY LT",LLLL:"dddd, [la] D[-an de] MMMM, YYYY LT"},meridiem:function(a,b,c){return a>11?c?"p.t.m.":"P.T.M.":c?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"je %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},ordinal:"%da",week:{dow:1,doy:7}}) +}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){var b="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),c="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");return a.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,d){return/-MMM-/.test(d)?c[a.month()]:b[a.month()]},weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"Do_Lu_Ma_Mi_Ju_Vi_Sá".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D [de] MMMM [del] YYYY",LLL:"D [de] MMMM [del] YYYY LT",LLLL:"dddd, D [de] MMMM [del] YYYY LT"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c,d){var e={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:[a+" minuti",a+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[a+" tunni",a+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[a+" kuu",a+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[a+" aasta",a+" aastat"]};return b?e[c][2]?e[c][2]:e[c][1]:d?e[c][0]:e[c][1]}return a.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:b,m:b,mm:b,h:b,hh:b,d:b,dd:"%d päeva",M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("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("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] LT",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] LT",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] LT",llll:"ddd, YYYY[ko] MMM D[a] LT"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){var b={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},c={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};return a.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},meridiem:function(a){return 12>a?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چندین ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return c[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]}).replace(/,/g,"،")},ordinal:"%dم",week:{dow:6,doy:12}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b,d,e){var f="";switch(d){case"s":return e?"muutaman sekunnin":"muutama sekunti";case"m":return e?"minuutin":"minuutti";case"mm":f=e?"minuutin":"minuuttia";break;case"h":return e?"tunnin":"tunti";case"hh":f=e?"tunnin":"tuntia";break;case"d":return e?"päivän":"päivä";case"dd":f=e?"päivän":"päivää";break;case"M":return e?"kuukauden":"kuukausi";case"MM":f=e?"kuukauden":"kuukautta";break;case"y":return e?"vuoden":"vuosi";case"yy":f=e?"vuoden":"vuotta"}return f=c(a,e)+" "+f}function c(a,b){return 10>a?b?e[a]:d[a]:a}var d="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),e=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",d[7],d[8],d[9]];return a.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] LT",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] LT",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] LT",llll:"ddd, Do MMM YYYY, [klo] LT"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:b,m:b,mm:b,h:b,hh:b,d:b,dd:b,M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D. MMMM, YYYY LT"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minutt",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaði",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("fr-ca",{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("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(a){return a+(1===a?"er":"")}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("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("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(a){return a+(1===a?"er":"")},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("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("_"),weekdaysMin:"Do_Lu_Ma_Mé_Xo_Ve_Sá".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(a){return"uns segundos"===a?"nuns segundos":"en "+a},past:"hai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},ordinal:"%dº",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY LT",LLLL:"dddd, D [ב]MMMM YYYY LT",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY LT",llll:"ddd, D MMM YYYY LT"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(a){return 2===a?"שעתיים":a+" שעות"},d:"יום",dd:function(a){return 2===a?"יומיים":a+" ימים"},M:"חודש",MM:function(a){return 2===a?"חודשיים":a+" חודשים"},y:"שנה",yy:function(a){return 2===a?"שנתיים":a+" שנים"}}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){var b={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},c={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};return a.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 4>a?"रात":10>a?"सुबह":17>a?"दोपहर":20>a?"शाम":"रात"},week:{dow:0,doy:6}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}return a.defineLocale("hr",{months:"sječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_"),monthsShort:"sje._vel._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),longDateFormat:{LT:"H:mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:b,mm:b,h:b,hh:b,d:"dan",dd:b,M:"mjesec",MM:b,y:"godinu",yy:b},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c,d){var e=a;switch(c){case"s":return d||b?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(d||b?" perc":" perce");case"mm":return e+(d||b?" perc":" perce");case"h":return"egy"+(d||b?" óra":" órája");case"hh":return e+(d||b?" óra":" órája");case"d":return"egy"+(d||b?" nap":" napja");case"dd":return e+(d||b?" nap":" napja");case"M":return"egy"+(d||b?" hónap":" hónapja");case"MM":return e+(d||b?" hónap":" hónapja");case"y":return"egy"+(d||b?" év":" éve");case"yy":return e+(d||b?" év":" éve")}return""}function c(a){return(a?"":"[múlt] ")+"["+d[this.day()]+"] LT[-kor]"}var d="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");return a.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D., LT",LLLL:"YYYY. MMMM D., dddd LT"},meridiem:function(a,b,c){return 12>a?c===!0?"de":"DE":c===!0?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return c.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return c.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:b,m:b,mm:b,h:b,hh:b,d:b,dd:b,M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b){var c={nominative:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_"),accusative:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_")},d=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function c(a){var b="հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_");return b[a.month()]}function d(a){var b="կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_");return b[a.day()]}return a.defineLocale("hy-am",{months:b,monthsShort:c,weekdays:d,weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., LT",LLLL:"dddd, D MMMM YYYY թ., LT"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiem:function(a){return 4>a?"գիշերվա":12>a?"առավոտվա":17>a?"ցերեկվա":"երեկոյան"},ordinal:function(a,b){switch(b){case"DDD":case"w":case"W":case"DDDo":return 1===a?a+"-ին":a+"-րդ";default:return a}},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] LT",LLLL:"dddd, D MMMM YYYY [pukul] LT"},meridiem:function(a){return 11>a?"pagi":15>a?"siang":19>a?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a){return a%100===11?!0:a%10===1?!1:!0}function c(a,c,d,e){var f=a+" ";switch(d){case"s":return c||e?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return c?"mínúta":"mínútu";case"mm":return b(a)?f+(c||e?"mínútur":"mínútum"):c?f+"mínúta":f+"mínútu";case"hh":return b(a)?f+(c||e?"klukkustundir":"klukkustundum"):f+"klukkustund";case"d":return c?"dagur":e?"dag":"degi";case"dd":return b(a)?c?f+"dagar":f+(e?"daga":"dögum"):c?f+"dagur":f+(e?"dag":"degi");case"M":return c?"mánuður":e?"mánuð":"mánuði";case"MM":return b(a)?c?f+"mánuðir":f+(e?"mánuði":"mánuðum"):c?f+"mánuður":f+(e?"mánuð":"mánuði");case"y":return c||e?"ár":"ári";case"yy":return b(a)?f+(c||e?"ár":"árum"):f+(c||e?"ár":"ári")}}return a.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] LT",LLLL:"dddd, D. MMMM YYYY [kl.] LT"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:c,m:c,mm:c,h:"klukkustund",hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("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("_"),weekdaysMin:"D_L_Ma_Me_G_V_S".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:"[lo scorso] dddd [alle] LT",sameElse:"L"},relativeTime:{future:function(a){return(/^[0-9].+$/.test(a)?"tra":"in")+" "+a},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"Ah時m分",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日LT",LLLL:"YYYY年M月D日LT dddd"},meridiem:function(a){return 12>a?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b){var c={nominative:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),accusative:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},d=/D[oD] *MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function c(a,b){var c={nominative:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),accusative:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_")},d=/(წინა|შემდეგ)/.test(b)?"accusative":"nominative";return c[d][a.day()]}return a.defineLocale("ka",{months:b,monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:c,weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(a){return/(წამი|წუთი|საათი|წელი)/.test(a)?a.replace(/ი$/,"ში"):a+"ში"},past:function(a){return/(წამი|წუთი|საათი|დღე|თვე)/.test(a)?a.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(a)?a.replace(/წელი$/,"წლის წინ"):void 0},s:"რამდენიმე წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},ordinal:function(a){return 0===a?a:1===a?a+"-ლი":20>a||100>=a&&a%20===0||a%100===0?"მე-"+a:a+"-ე"},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("km",{months:"មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysMin:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[ថ្ងៃនៈ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h시 mm분",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 LT",LLLL:"YYYY년 MMMM D일 dddd LT"},meridiem:function(a){return 12>a?"오전":"오후"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇초",ss:"%d초",m:"일분",mm:"%d분",h:"한시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한달",MM:"%d달",y:"일년",yy:"%d년"},ordinal:"%d일",meridiemParse:/(오전|오후)/,isPM:function(a){return"오후"===a}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c){var d={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return b?d[c][0]:d[c][1]}function c(a){var b=a.substr(0,a.indexOf(" "));return e(b)?"a "+a:"an "+a}function d(a){var b=a.substr(0,a.indexOf(" "));return e(b)?"viru "+a:"virun "+a}function e(a){if(a=parseInt(a,10),isNaN(a))return!1;if(0>a)return!0;if(10>a)return a>=4&&7>=a?!0:!1;if(100>a){var b=a%10,c=a/10;return e(0===b?c:b)}if(1e4>a){for(;a>=10;)a/=10;return e(a)}return a/=1e3,e(a)}return a.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),longDateFormat:{LT:"H:mm [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:c,past:d,s:"e puer Sekonnen",m:b,mm:"%d Minutten",h:b,hh:"%d Stonnen",d:b,dd:"%d Deeg",M:b,MM:"%d Méint",y:b,yy:"%d Joer"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c,d){return b?"kelios sekundės":d?"kelių sekundžių":"kelias sekundes"}function c(a,b,c,d){return b?e(c)[0]:d?e(c)[1]:e(c)[2]}function d(a){return a%10===0||a>10&&20>a}function e(a){return h[a].split("_")}function f(a,b,f,g){var h=a+" ";return 1===a?h+c(a,b,f[0],g):b?h+(d(a)?e(f)[1]:e(f)[0]):g?h+e(f)[1]:h+(d(a)?e(f)[1]:e(f)[2])}function g(a,b){var c=-1===b.indexOf("dddd HH:mm"),d=i[a.day()];return c?d:d.substring(0,d.length-2)+"į"}var h={m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"},i="sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_");return a.defineLocale("lt",{months:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:g,weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], LT [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, LT [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], LT [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, LT [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:b,m:c,mm:f,h:c,hh:f,d:c,dd:f,M:c,MM:f,y:c,yy:f},ordinal:function(a){return a+"-oji"},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c){var d=a.split("_"); +return c?b%10===1&&11!==b?d[2]:d[3]:b%10===1&&11!==b?d[0]:d[1]}function c(a,c,e){return a+" "+b(d[e],a,c)}var d={mm:"minūti_minūtes_minūte_minūtes",hh:"stundu_stundas_stunda_stundas",dd:"dienu_dienas_diena_dienas",MM:"mēnesi_mēnešus_mēnesis_mēneši",yy:"gadu_gadus_gads_gadi"};return a.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, LT",LLLL:"YYYY. [gada] D. MMMM, dddd, LT"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"%s vēlāk",past:"%s agrāk",s:"dažas sekundes",m:"minūti",mm:c,h:"stundu",hh:c,d:"dienu",dd:c,M:"mēnesi",MM:c,y:"gadu",yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Во изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Во изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&20>c?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiem:function(a){return 4>a?"രാത്രി":12>a?"രാവിലെ":17>a?"ഉച്ച കഴിഞ്ഞ്":20>a?"വൈകുന്നേരം":"രാത്രി"}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){var b={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},c={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};return a.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%s नंतर",past:"%s पूर्वी",s:"सेकंद",m:"एक मिनिट",mm:"%d मिनिटे",h:"एक तास",hh:"%d तास",d:"एक दिवस",dd:"%d दिवस",M:"एक महिना",MM:"%d महिने",y:"एक वर्ष",yy:"%d वर्षे"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 4>a?"रात्री":10>a?"सकाळी":17>a?"दुपारी":20>a?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] LT",LLLL:"dddd, D MMMM YYYY [pukul] LT"},meridiem:function(a){return 11>a?"pagi":15>a?"tengahari":19>a?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){var b={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},c={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};return a.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_င်္ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_င်္ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(a){return a.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("nb",{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ø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"H.mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] LT",LLLL:"dddd D. MMMM YYYY [kl.] LT"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"for %s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){var b={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},c={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};return a.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आइ._सो._मङ्_बु._बि._शु._श.".split("_"),longDateFormat:{LT:"Aको h:mm बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 3>a?"राती":10>a?"बिहान":15>a?"दिउँसो":18>a?"बेलुका":20>a?"साँझ":"राती"},calendar:{sameDay:"[आज] LT",nextDay:"[भोली] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडी",s:"केही समय",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){var b="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),c="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_");return a.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,d){return/-MMM-/.test(d)?c[a.month()]:b[a.month()]},weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),longDateFormat:{LT:"HH:mm",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"for %s sidan",s:"nokre sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a){return 5>a%10&&a%10>1&&~~(a/10)%10!==1}function c(a,c,d){var e=a+" ";switch(d){case"m":return c?"minuta":"minutę";case"mm":return e+(b(a)?"minuty":"minut");case"h":return c?"godzina":"godzinę";case"hh":return e+(b(a)?"godziny":"godzin");case"MM":return e+(b(a)?"miesiące":"miesięcy");case"yy":return e+(b(a)?"lata":"lat")}}var d="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),e="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");return a.defineLocale("pl",{months:function(a,b){return/D MMMM/.test(b)?e[a.month()]:d[a.month()]},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"nie_pon_wt_śr_czw_pt_sb".split("_"),weekdaysMin:"N_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:c,mm:c,h:c,hh:c,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:c,y:"rok",yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("pt-br",{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("_"),weekdaysMin:"dom_2ª_3ª_4ª_5ª_6ª_sáb".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] LT",LLLL:"dddd, D [de] MMMM [de] YYYY [às] LT"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinal:"%dº"})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("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("_"),weekdaysMin:"dom_2ª_3ª_4ª_5ª_6ª_sáb".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY LT",LLLL:"dddd, D [de] MMMM [de] YYYY LT"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c){var d={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},e=" ";return(a%100>=20||a>=100&&a%100===0)&&(e=" de "),a+e+d[c]}return a.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:b,h:"o oră",hh:b,d:"o zi",dd:b,M:"o lună",MM:b,y:"un an",yy:b},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function c(a,c,d){var e={mm:c?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===d?c?"минута":"минуту":a+" "+b(e[d],+a)}function d(a,b){var c={nominative:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),accusative:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_")},d=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function e(a,b){var c={nominative:"янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),accusative:"янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек".split("_")},d=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function f(a,b){var c={nominative:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),accusative:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_")},d=/\[ ?[Вв] ?(?:прошлую|следующую)? ?\] ?dddd/.test(b)?"accusative":"nominative";return c[d][a.day()]}return a.defineLocale("ru",{months:d,monthsShort:e,weekdays:f,weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[й|я]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i],longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., LT",LLLL:"dddd, D MMMM YYYY г., LT"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(){return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT"},lastWeek:function(){switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:c,mm:c,h:"час",hh:c,d:"день",dd:c,M:"месяц",MM:c,y:"год",yy:c},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(a){return/^(дня|вечера)$/.test(a)},meridiem:function(a){return 4>a?"ночи":12>a?"утра":17>a?"дня":"вечера"},ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":return a+"-й";case"D":return a+"-го";case"w":case"W":return a+"-я";default:return a}},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a){return a>1&&5>a}function c(a,c,d,e){var f=a+" ";switch(d){case"s":return c||e?"pár sekúnd":"pár sekundami";case"m":return c?"minúta":e?"minútu":"minútou";case"mm":return c||e?f+(b(a)?"minúty":"minút"):f+"minútami";break;case"h":return c?"hodina":e?"hodinu":"hodinou";case"hh":return c||e?f+(b(a)?"hodiny":"hodín"):f+"hodinami";break;case"d":return c||e?"deň":"dňom";case"dd":return c||e?f+(b(a)?"dni":"dní"):f+"dňami";break;case"M":return c||e?"mesiac":"mesiacom";case"MM":return c||e?f+(b(a)?"mesiace":"mesiacov"):f+"mesiacmi";break;case"y":return c||e?"rok":"rokom";case"yy":return c||e?f+(b(a)?"roky":"rokov"):f+"rokmi"}}var d="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),e="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");return a.defineLocale("sk",{months:d,monthsShort:e,monthsParse:function(a,b){var c,d=[];for(c=0;12>c;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(d,e),weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd D. MMMM YYYY LT"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:c,m:c,mm:c,h:c,hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b,c){var d=a+" ";switch(c){case"m":return b?"ena minuta":"eno minuto";case"mm":return d+=1===a?"minuta":2===a?"minuti":3===a||4===a?"minute":"minut";case"h":return b?"ena ura":"eno uro";case"hh":return d+=1===a?"ura":2===a?"uri":3===a||4===a?"ure":"ur";case"dd":return d+=1===a?"dan":"dni";case"MM":return d+=1===a?"mesec":2===a?"meseca":3===a||4===a?"mesece":"mesecev";case"yy":return d+=1===a?"leto":2===a?"leti":3===a||4===a?"leta":"let"}}return a.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),longDateFormat:{LT:"H:mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[prejšnja] dddd [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"%s nazaj",s:"nekaj sekund",m:b,mm:b,h:b,hh:b,d:"en dan",dd:b,M:"en mesec",MM:b,y:"eno leto",yy:b},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),meridiem:function(a){return 12>a?"PD":"MD"},longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){var b={words:{m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(a,c,d){var e=b.words[d];return 1===d.length?c?e[0]:e[1]:a+" "+b.correctGrammaticalCase(a,e)}};return a.defineLocale("sr-cyrl",{months:["јануар","фебруар","март","април","мај","јун","јул","август","септембар","октобар","новембар","децембар"],monthsShort:["јан.","феб.","мар.","апр.","мај","јун","јул","авг.","сеп.","окт.","нов.","дец."],weekdays:["недеља","понедељак","уторак","среда","четвртак","петак","субота"],weekdaysShort:["нед.","пон.","уто.","сре.","чет.","пет.","суб."],weekdaysMin:["не","по","ут","ср","че","пе","су"],longDateFormat:{LT:"H:mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var a=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:b.translate,mm:b.translate,h:b.translate,hh:b.translate,d:"дан",dd:b.translate,M:"месец",MM:b.translate,y:"годину",yy:b.translate},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){var b={words:{m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(a,c,d){var e=b.words[d];return 1===d.length?c?e[0]:e[1]:a+" "+b.correctGrammaticalCase(a,e)}};return a.defineLocale("sr",{months:["januar","februar","mart","april","maj","jun","jul","avgust","septembar","oktobar","novembar","decembar"],monthsShort:["jan.","feb.","mar.","apr.","maj","jun","jul","avg.","sep.","okt.","nov.","dec."],weekdays:["nedelja","ponedeljak","utorak","sreda","četvrtak","petak","subota"],weekdaysShort:["ned.","pon.","uto.","sre.","čet.","pet.","sub."],weekdaysMin:["ne","po","ut","sr","če","pe","su"],longDateFormat:{LT:"H:mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:b.translate,mm:b.translate,h:b.translate,hh:b.translate,d:"dan",dd:b.translate,M:"mesec",MM:b.translate,y:"godinu",yy:b.translate},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"dddd LT",lastWeek:"[Förra] dddd[en] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"e":1===b?"a":2===b?"a":3===b?"e":"e";return a+c},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},ordinal:function(a){return a+"வது"},meridiem:function(a){return a>=6&&10>=a?" காலை":a>=10&&14>=a?" நண்பகல்":a>=14&&18>=a?" எற்பாடு":a>=18&&20>=a?" மாலை":a>=20&&24>=a?" இரவு":a>=0&&6>=a?" வைகறை":void 0},week:{dow:0,doy:6}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา".split("_"),weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),longDateFormat:{LT:"H นาฬิกา m นาที",L:"YYYY/MM/DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา LT",LLLL:"วันddddที่ D MMMM YYYY เวลา LT"},meridiem:function(a){return 12>a?"ก่อนเที่ยง":"หลังเที่ยง" +},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM DD, YYYY LT"},calendar:{sameDay:"[Ngayon sa] LT",nextDay:"[Bukas sa] LT",nextWeek:"dddd [sa] LT",lastDay:"[Kahapon sa] LT",lastWeek:"dddd [huling linggo] LT",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},ordinal:function(a){return a},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){var b={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};return a.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(a){if(0===a)return a+"'ıncı";var c=a%10,d=a%100-c,e=a>=100?100:null;return a+(b[c]||b[d]||b[e])},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){function b(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function c(a,c,d){var e={mm:"хвилина_хвилини_хвилин",hh:"година_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===d?c?"хвилина":"хвилину":"h"===d?c?"година":"годину":a+" "+b(e[d],+a)}function d(a,b){var c={nominative:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_"),accusative:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_")},d=/D[oD]? *MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function e(a,b){var c={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")},d=/(\[[ВвУу]\]) ?dddd/.test(b)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(b)?"genitive":"nominative";return c[d][a.day()]}function f(a){return function(){return a+"о"+(11===this.hours()?"б":"")+"] LT"}}return a.defineLocale("uk",{months:d,monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:e,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., LT",LLLL:"dddd, D MMMM YYYY р., LT"},calendar:{sameDay:f("[Сьогодні "),nextDay:f("[Завтра "),lastDay:f("[Вчора "),nextWeek:f("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return f("[Минулої] dddd [").call(this);case 1:case 2:case 4:return f("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:c,mm:c,h:"годину",hh:c,d:"день",dd:c,M:"місяць",MM:c,y:"рік",yy:c},meridiem:function(a){return 4>a?"ночі":12>a?"ранку":17>a?"дня":"вечора"},ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a+"-й";case"D":return a+"-го";default:return a}},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("uz",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"D MMMM YYYY, dddd LT"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY LT",LLLL:"dddd, D MMMM [năm] YYYY LT",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY LT",llll:"ddd, D MMM YYYY LT"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},ordinal:function(a){return a},week:{dow:1,doy:4}})}),function(a){"function"==typeof define&&define.amd?define(["moment"],a):"object"==typeof exports?module.exports=a(require("../moment")):a(window.moment)}(function(a){return a.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah点mm",L:"YYYY-MM-DD",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日LT",LLLL:"YYYY年MMMD日ddddLT",l:"YYYY-MM-DD",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日LT",llll:"YYYY年MMMD日ddddLT"},meridiem:function(a,b){var c=100*a+b;return 600>c?"凌晨":900>c?"早上":1130>c?"上午":1230>c?"中午":1800>c?"下午":"晚上"},calendar:{sameDay:function(){return 0===this.minutes()?"[今天]Ah[点整]":"[今天]LT"},nextDay:function(){return 0===this.minutes()?"[明天]Ah[点整]":"[明天]LT"},lastDay:function(){return 0===this.minutes()?"[昨天]Ah[点整]":"[昨天]LT"},nextWeek:function(){var b,c;return b=a().startOf("week"),c=this.unix()-b.unix()>=604800?"[下]":"[本]",0===this.minutes()?c+"dddAh点整":c+"dddAh点mm"},lastWeek:function(){var b,c;return b=a().startOf("week"),c=this.unix()c?"早上":1130>c?"上午":1230>c?"中午":1800>c?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"一分鐘",mm:"%d分鐘",h:"一小時",hh:"%d小時",d:"一天",dd:"%d天",M:"一個月",MM:"%d個月",y:"一年",yy:"%d年"}})}); \ No newline at end of file diff --git a/ajax/libs/moment.js/2.8.0/moment-with-locales.js b/ajax/libs/moment.js/2.8.0/moment-with-locales.js new file mode 100644 index 000000000..a0c8ad3ee --- /dev/null +++ b/ajax/libs/moment.js/2.8.0/moment-with-locales.js @@ -0,0 +1,9067 @@ +//! moment.js +//! version : 2.8.0 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com + +(function (undefined) { + /************************************ + Constants + ************************************/ + + var moment, + VERSION = '2.8.0', + // the global-scope this is NOT the global object in Node.js + globalScope = typeof global !== 'undefined' ? global : this, + oldGlobalMoment, + round = Math.round, + i, + + YEAR = 0, + MONTH = 1, + DATE = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECOND = 6, + + // internal storage for locale config files + locales = {}, + + // extra moment internal properties (plugins register props here) + momentProperties = [], + + // check for nodeJS + hasModule = (typeof module !== 'undefined' && module.exports), + + // ASP.NET json date format regex + aspNetJsonRegex = /^\/?Date\((\-?\d+)/i, + aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/, + + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/, + + // format tokens + formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g, + localFormattingTokens = /(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g, + + // parsing token regexes + parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99 + parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999 + parseTokenOneToFourDigits = /\d{1,4}/, // 0 - 9999 + parseTokenOneToSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999 + parseTokenDigits = /\d+/, // nonzero number of digits + parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic. + parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z + parseTokenT = /T/i, // T (ISO separator) + parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 + parseTokenOrdinal = /\d{1,2}/, + + //strict parsing regexes + parseTokenOneDigit = /\d/, // 0 - 9 + parseTokenTwoDigits = /\d\d/, // 00 - 99 + parseTokenThreeDigits = /\d{3}/, // 000 - 999 + parseTokenFourDigits = /\d{4}/, // 0000 - 9999 + parseTokenSixDigits = /[+-]?\d{6}/, // -999,999 - 999,999 + parseTokenSignedNumber = /[+-]?\d+/, // -inf - inf + + // iso 8601 regex + // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) + isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + + isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', + + isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/], + ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/], + ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/], + ['GGGG-[W]WW', /\d{4}-W\d{2}/], + ['YYYY-DDD', /\d{4}-\d{3}/] + ], + + // iso time formats and regexes + isoTimes = [ + ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], + ['HH:mm', /(T| )\d\d:\d\d/], + ['HH', /(T| )\d\d/] + ], + + // timezone chunker "+10:00" > ["10", "00"] or "-1530" > ["-15", "30"] + parseTimezoneChunker = /([\+\-]|\d\d)/gi, + + // getter and setter names + proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'), + unitMillisecondFactors = { + 'Milliseconds' : 1, + 'Seconds' : 1e3, + 'Minutes' : 6e4, + 'Hours' : 36e5, + 'Days' : 864e5, + 'Months' : 2592e6, + 'Years' : 31536e6 + }, + + unitAliases = { + ms : 'millisecond', + s : 'second', + m : 'minute', + h : 'hour', + d : 'day', + D : 'date', + w : 'week', + W : 'isoWeek', + M : 'month', + Q : 'quarter', + y : 'year', + DDD : 'dayOfYear', + e : 'weekday', + E : 'isoWeekday', + gg: 'weekYear', + GG: 'isoWeekYear' + }, + + camelFunctions = { + dayofyear : 'dayOfYear', + isoweekday : 'isoWeekday', + isoweek : 'isoWeek', + weekyear : 'weekYear', + isoweekyear : 'isoWeekYear' + }, + + // format function strings + formatFunctions = {}, + + // default relative time thresholds + relativeTimeThresholds = { + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month + M: 11 // months to year + }, + + // tokens to ordinalize and pad + ordinalizeTokens = 'DDD w W M D d'.split(' '), + paddedTokens = 'M D H h m s w W'.split(' '), + + formatTokenFunctions = { + M : function () { + return this.month() + 1; + }, + MMM : function (format) { + return this.localeData().monthsShort(this, format); + }, + MMMM : function (format) { + return this.localeData().months(this, format); + }, + D : function () { + return this.date(); + }, + DDD : function () { + return this.dayOfYear(); + }, + d : function () { + return this.day(); + }, + dd : function (format) { + return this.localeData().weekdaysMin(this, format); + }, + ddd : function (format) { + return this.localeData().weekdaysShort(this, format); + }, + dddd : function (format) { + return this.localeData().weekdays(this, format); + }, + w : function () { + return this.week(); + }, + W : function () { + return this.isoWeek(); + }, + YY : function () { + return leftZeroFill(this.year() % 100, 2); + }, + YYYY : function () { + return leftZeroFill(this.year(), 4); + }, + YYYYY : function () { + return leftZeroFill(this.year(), 5); + }, + YYYYYY : function () { + var y = this.year(), sign = y >= 0 ? '+' : '-'; + return sign + leftZeroFill(Math.abs(y), 6); + }, + gg : function () { + return leftZeroFill(this.weekYear() % 100, 2); + }, + gggg : function () { + return leftZeroFill(this.weekYear(), 4); + }, + ggggg : function () { + return leftZeroFill(this.weekYear(), 5); + }, + GG : function () { + return leftZeroFill(this.isoWeekYear() % 100, 2); + }, + GGGG : function () { + return leftZeroFill(this.isoWeekYear(), 4); + }, + GGGGG : function () { + return leftZeroFill(this.isoWeekYear(), 5); + }, + e : function () { + return this.weekday(); + }, + E : function () { + return this.isoWeekday(); + }, + a : function () { + return this.localeData().meridiem(this.hours(), this.minutes(), true); + }, + A : function () { + return this.localeData().meridiem(this.hours(), this.minutes(), false); + }, + H : function () { + return this.hours(); + }, + h : function () { + return this.hours() % 12 || 12; + }, + m : function () { + return this.minutes(); + }, + s : function () { + return this.seconds(); + }, + S : function () { + return toInt(this.milliseconds() / 100); + }, + SS : function () { + return leftZeroFill(toInt(this.milliseconds() / 10), 2); + }, + SSS : function () { + return leftZeroFill(this.milliseconds(), 3); + }, + SSSS : function () { + return leftZeroFill(this.milliseconds(), 3); + }, + Z : function () { + var a = -this.zone(), + b = '+'; + if (a < 0) { + a = -a; + b = '-'; + } + return b + leftZeroFill(toInt(a / 60), 2) + ':' + leftZeroFill(toInt(a) % 60, 2); + }, + ZZ : function () { + var a = -this.zone(), + b = '+'; + if (a < 0) { + a = -a; + b = '-'; + } + return b + leftZeroFill(toInt(a / 60), 2) + leftZeroFill(toInt(a) % 60, 2); + }, + z : function () { + return this.zoneAbbr(); + }, + zz : function () { + return this.zoneName(); + }, + X : function () { + return this.unix(); + }, + Q : function () { + return this.quarter(); + } + }, + + deprecations = {}, + + lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin']; + + // Pick the first defined of two or three arguments. dfl comes from + // default. + function dfl(a, b, c) { + switch (arguments.length) { + case 2: return a != null ? a : b; + case 3: return a != null ? a : b != null ? b : c; + default: throw new Error('Implement me'); + } + } + + function defaultParsingFlags() { + // We need to deep clone this object, and es5 standard is not very + // helpful. + return { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false, + iso: false + }; + } + + function printMsg(msg) { + if (moment.suppressDeprecationWarnings === false && + typeof console !== 'undefined' && console.warn) { + console.warn("Deprecation warning: " + msg); + } + } + + function deprecate(msg, fn) { + var firstTime = true; + return extend(function () { + if (firstTime) { + printMsg(msg); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } + + function deprecateSimple(name, msg) { + if (!deprecations[name]) { + printMsg(msg); + deprecations[name] = true; + } + } + + function padToken(func, count) { + return function (a) { + return leftZeroFill(func.call(this, a), count); + }; + } + function ordinalizeToken(func, period) { + return function (a) { + return this.localeData().ordinal(func.call(this, a), period); + }; + } + + while (ordinalizeTokens.length) { + i = ordinalizeTokens.pop(); + formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i); + } + while (paddedTokens.length) { + i = paddedTokens.pop(); + formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2); + } + formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3); + + + /************************************ + Constructors + ************************************/ + + function Locale() { + } + + // Moment prototype object + function Moment(config, skipOverflow) { + if (skipOverflow !== false) { + checkOverflow(config); + } + copyConfig(this, config); + this._d = new Date(+config._d); + } + + // Duration Constructor + function Duration(duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + // representation for dateAddRemove + this._milliseconds = +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 36e5; // 1000 * 60 * 60 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + + weeks * 7; + // It is impossible translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + + quarters * 3 + + years * 12; + + this._data = {}; + + this._locale = moment.localeData(); + + this._bubble(); + } + + /************************************ + Helpers + ************************************/ + + + function extend(a, b) { + for (var i in b) { + if (b.hasOwnProperty(i)) { + a[i] = b[i]; + } + } + + if (b.hasOwnProperty('toString')) { + a.toString = b.toString; + } + + if (b.hasOwnProperty('valueOf')) { + a.valueOf = b.valueOf; + } + + return a; + } + + function copyConfig(to, from) { + var i, prop, val; + + if (typeof from._isAMomentObject !== 'undefined') { + to._isAMomentObject = from._isAMomentObject; + } + if (typeof from._i !== 'undefined') { + to._i = from._i; + } + if (typeof from._f !== 'undefined') { + to._f = from._f; + } + if (typeof from._l !== 'undefined') { + to._l = from._l; + } + if (typeof from._strict !== 'undefined') { + to._strict = from._strict; + } + if (typeof from._tzm !== 'undefined') { + to._tzm = from._tzm; + } + if (typeof from._isUTC !== 'undefined') { + to._isUTC = from._isUTC; + } + if (typeof from._offset !== 'undefined') { + to._offset = from._offset; + } + if (typeof from._pf !== 'undefined') { + to._pf = from._pf; + } + if (typeof from._locale !== 'undefined') { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i in momentProperties) { + prop = momentProperties[i]; + val = from[prop]; + if (typeof val !== 'undefined') { + to[prop] = val; + } + } + } + + return to; + } + + function absRound(number) { + if (number < 0) { + return Math.ceil(number); + } else { + return Math.floor(number); + } + } + + // left zero fill a number + // see http://jsperf.com/left-zero-filling for performance comparison + function leftZeroFill(number, targetLength, forceSign) { + var output = '' + Math.abs(number), + sign = number >= 0; + + while (output.length < targetLength) { + output = '0' + output; + } + return (sign ? (forceSign ? '+' : '') : '-') + output; + } + + function positiveMomentsDifference(base, other) { + var res = {milliseconds: 0, months: 0}; + + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + + return res; + } + + function momentsDifference(base, other) { + var res; + other = makeAs(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; + } + + // TODO: remove 'name' arg after deprecation is removed + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple(name, "moment()." + name + "(period, number) is deprecated. Please use moment()." + name + "(number, period)."); + tmp = val; val = period; period = tmp; + } + + val = typeof val === 'string' ? +val : val; + dur = moment.duration(val, period); + addOrSubtractDurationFromMoment(this, dur, direction); + return this; + }; + } + + function addOrSubtractDurationFromMoment(mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = duration._days, + months = duration._months; + updateOffset = updateOffset == null ? true : updateOffset; + + if (milliseconds) { + mom._d.setTime(+mom._d + milliseconds * isAdding); + } + if (days) { + rawSetter(mom, 'Date', rawGetter(mom, 'Date') + days * isAdding); + } + if (months) { + rawMonthSetter(mom, rawGetter(mom, 'Month') + months * isAdding); + } + if (updateOffset) { + moment.updateOffset(mom, days || months); + } + } + + // check if is an array + function isArray(input) { + return Object.prototype.toString.call(input) === '[object Array]'; + } + + function isDate(input) { + return Object.prototype.toString.call(input) === '[object Date]' || + input instanceof Date; + } + + // compare two arrays, return the number of differences + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ((dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { + diffs++; + } + } + return diffs + lengthDiff; + } + + function normalizeUnits(units) { + if (units) { + var lowered = units.toLowerCase().replace(/(.)s$/, '$1'); + units = unitAliases[units] || camelFunctions[lowered] || lowered; + } + return units; + } + + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (inputObject.hasOwnProperty(prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; + } + + function makeList(field) { + var count, setter; + + if (field.indexOf('week') === 0) { + count = 7; + setter = 'day'; + } + else if (field.indexOf('month') === 0) { + count = 12; + setter = 'month'; + } + else { + return; + } + + moment[field] = function (format, index) { + var i, getter, + method = moment._locale[field], + results = []; + + if (typeof format === 'number') { + index = format; + format = undefined; + } + + getter = function (i) { + var m = moment().utc().set(setter, i); + return method.call(moment._locale, m, format || ''); + }; + + if (index != null) { + return getter(index); + } + else { + for (i = 0; i < count; i++) { + results.push(getter(i)); + } + return results; + } + }; + } + + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + if (coercedNumber >= 0) { + value = Math.floor(coercedNumber); + } else { + value = Math.ceil(coercedNumber); + } + } + + return value; + } + + function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); + } + + function weeksInYear(year, dow, doy) { + return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week; + } + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + + function checkOverflow(m) { + var overflow; + if (m._a && m._pf.overflow === -2) { + overflow = + m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH : + m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE : + m._a[HOUR] < 0 || m._a[HOUR] > 23 ? HOUR : + m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE : + m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND : + m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND : + -1; + + if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } + + m._pf.overflow = overflow; + } + } + + function isValid(m) { + if (m._isValid == null) { + m._isValid = !isNaN(m._d.getTime()) && + m._pf.overflow < 0 && + !m._pf.empty && + !m._pf.invalidMonth && + !m._pf.nullInput && + !m._pf.invalidFormat && + !m._pf.userInvalidated; + + if (m._strict) { + m._isValid = m._isValid && + m._pf.charsLeftOver === 0 && + m._pf.unusedTokens.length === 0; + } + } + return m._isValid; + } + + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } + + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, j, next, locale, split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return null; + } + + function loadLocale(name) { + var oldLocale = null; + if (!locales[name] && hasModule) { + try { + oldLocale = moment.locale(); + require('./locale/' + name); + // because defineLocale currently also sets the global locale, we want to undo that for lazy loaded locales + moment.locale(oldLocale); + } catch (e) { } + } + return locales[name]; + } + + // Return a moment from input, that is local/utc/zone equivalent to model. + function makeAs(input, model) { + return model._isUTC ? moment(input).zone(model._offset || 0) : + moment(input).local(); + } + + /************************************ + Locale + ************************************/ + + + extend(Locale.prototype, { + + set : function (config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (typeof prop === 'function') { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + }, + + _months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + months : function (m) { + return this._months[m.month()]; + }, + + _monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + monthsShort : function (m) { + return this._monthsShort[m.month()]; + }, + + monthsParse : function (monthName) { + var i, mom, regex; + + if (!this._monthsParse) { + this._monthsParse = []; + } + + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + if (!this._monthsParse[i]) { + mom = moment.utc([2000, i]); + regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (this._monthsParse[i].test(monthName)) { + return i; + } + } + }, + + _weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdays : function (m) { + return this._weekdays[m.day()]; + }, + + _weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysShort : function (m) { + return this._weekdaysShort[m.day()]; + }, + + _weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + weekdaysMin : function (m) { + return this._weekdaysMin[m.day()]; + }, + + weekdaysParse : function (weekdayName) { + var i, mom, regex; + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + if (!this._weekdaysParse[i]) { + mom = moment([2000, 1]).day(i); + regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } + }, + + _longDateFormat : { + LT : 'h:mm A', + L : 'MM/DD/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY LT', + LLLL : 'dddd, MMMM D, YYYY LT' + }, + longDateFormat : function (key) { + var output = this._longDateFormat[key]; + if (!output && this._longDateFormat[key.toUpperCase()]) { + output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) { + return val.slice(1); + }); + this._longDateFormat[key] = output; + } + return output; + }, + + isPM : function (input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return ((input + '').toLowerCase().charAt(0) === 'p'); + }, + + _meridiemParse : /[ap]\.?m?\.?/i, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + }, + + _calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + calendar : function (key, mom) { + var output = this._calendar[key]; + return typeof output === 'function' ? output.apply(mom) : output; + }, + + _relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + + relativeTime : function (number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return (typeof output === 'function') ? + output(number, withoutSuffix, string, isFuture) : + output.replace(/%d/i, number); + }, + + pastFuture : function (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); + }, + + ordinal : function (number) { + return this._ordinal.replace('%d', number); + }, + _ordinal : '%d', + + preparse : function (string) { + return string; + }, + + postformat : function (string) { + return string; + }, + + week : function (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + }, + + _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. + }, + + _invalidDate: 'Invalid date', + invalidDate: function () { + return this._invalidDate; + } + }); + + /************************************ + Formatting + ************************************/ + + + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); + } + + function makeFormatFunction(format) { + var array = format.match(formattingTokens), i, length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = ''; + for (i = 0; i < length; i++) { + output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; + } + return output; + }; + } + + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + + if (!formatFunctions[format]) { + formatFunctions[format] = makeFormatFunction(format); + } + + return formatFunctions[format](m); + } + + function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; + } + + + /************************************ + Parsing + ************************************/ + + + // get the regex to find the next token + function getParseRegexForToken(token, config) { + var a, strict = config._strict; + switch (token) { + case 'Q': + return parseTokenOneDigit; + case 'DDDD': + return parseTokenThreeDigits; + case 'YYYY': + case 'GGGG': + case 'gggg': + return strict ? parseTokenFourDigits : parseTokenOneToFourDigits; + case 'Y': + case 'G': + case 'g': + return parseTokenSignedNumber; + case 'YYYYYY': + case 'YYYYY': + case 'GGGGG': + case 'ggggg': + return strict ? parseTokenSixDigits : parseTokenOneToSixDigits; + case 'S': + if (strict) { + return parseTokenOneDigit; + } + /* falls through */ + case 'SS': + if (strict) { + return parseTokenTwoDigits; + } + /* falls through */ + case 'SSS': + if (strict) { + return parseTokenThreeDigits; + } + /* falls through */ + case 'DDD': + return parseTokenOneToThreeDigits; + case 'MMM': + case 'MMMM': + case 'dd': + case 'ddd': + case 'dddd': + return parseTokenWord; + case 'a': + case 'A': + return config._locale._meridiemParse; + case 'X': + return parseTokenTimestampMs; + case 'Z': + case 'ZZ': + return parseTokenTimezone; + case 'T': + return parseTokenT; + case 'SSSS': + return parseTokenDigits; + case 'MM': + case 'DD': + case 'YY': + case 'GG': + case 'gg': + case 'HH': + case 'hh': + case 'mm': + case 'ss': + case 'ww': + case 'WW': + return strict ? parseTokenTwoDigits : parseTokenOneOrTwoDigits; + case 'M': + case 'D': + case 'd': + case 'H': + case 'h': + case 'm': + case 's': + case 'w': + case 'W': + case 'e': + case 'E': + return parseTokenOneOrTwoDigits; + case 'Do': + return parseTokenOrdinal; + default : + a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), 'i')); + return a; + } + } + + function timezoneMinutesFromString(string) { + string = string || ''; + var possibleTzMatches = (string.match(parseTokenTimezone) || []), + tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [], + parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0], + minutes = +(parts[1] * 60) + toInt(parts[2]); + + return parts[0] === '+' ? -minutes : minutes; + } + + // function to convert string input to date + function addTimeToArrayFromToken(token, input, config) { + var a, datePartArray = config._a; + + switch (token) { + // QUARTER + case 'Q': + if (input != null) { + datePartArray[MONTH] = (toInt(input) - 1) * 3; + } + break; + // MONTH + case 'M' : // fall through to MM + case 'MM' : + if (input != null) { + datePartArray[MONTH] = toInt(input) - 1; + } + break; + case 'MMM' : // fall through to MMMM + case 'MMMM' : + a = config._locale.monthsParse(input); + // if we didn't find a month name, mark the date as invalid. + if (a != null) { + datePartArray[MONTH] = a; + } else { + config._pf.invalidMonth = input; + } + break; + // DAY OF MONTH + case 'D' : // fall through to DD + case 'DD' : + if (input != null) { + datePartArray[DATE] = toInt(input); + } + break; + case 'Do' : + if (input != null) { + datePartArray[DATE] = toInt(parseInt(input, 10)); + } + break; + // DAY OF YEAR + case 'DDD' : // fall through to DDDD + case 'DDDD' : + if (input != null) { + config._dayOfYear = toInt(input); + } + + break; + // YEAR + case 'YY' : + datePartArray[YEAR] = moment.parseTwoDigitYear(input); + break; + case 'YYYY' : + case 'YYYYY' : + case 'YYYYYY' : + datePartArray[YEAR] = toInt(input); + break; + // AM / PM + case 'a' : // fall through to A + case 'A' : + config._isPm = config._locale.isPM(input); + break; + // 24 HOUR + case 'H' : // fall through to hh + case 'HH' : // fall through to hh + case 'h' : // fall through to hh + case 'hh' : + datePartArray[HOUR] = toInt(input); + break; + // MINUTE + case 'm' : // fall through to mm + case 'mm' : + datePartArray[MINUTE] = toInt(input); + break; + // SECOND + case 's' : // fall through to ss + case 'ss' : + datePartArray[SECOND] = toInt(input); + break; + // MILLISECOND + case 'S' : + case 'SS' : + case 'SSS' : + case 'SSSS' : + datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000); + break; + // UNIX TIMESTAMP WITH MS + case 'X': + config._d = new Date(parseFloat(input) * 1000); + break; + // TIMEZONE + case 'Z' : // fall through to ZZ + case 'ZZ' : + config._useUTC = true; + config._tzm = timezoneMinutesFromString(input); + break; + // WEEKDAY - human + case 'dd': + case 'ddd': + case 'dddd': + a = config._locale.weekdaysParse(input); + // if we didn't get a weekday name, mark the date as invalid + if (a != null) { + config._w = config._w || {}; + config._w['d'] = a; + } else { + config._pf.invalidWeekday = input; + } + break; + // WEEK, WEEK DAY - numeric + case 'w': + case 'ww': + case 'W': + case 'WW': + case 'd': + case 'e': + case 'E': + token = token.substr(0, 1); + /* falls through */ + case 'gggg': + case 'GGGG': + case 'GGGGG': + token = token.substr(0, 2); + if (input) { + config._w = config._w || {}; + config._w[token] = toInt(input); + } + break; + case 'gg': + case 'GG': + config._w = config._w || {}; + config._w[token] = moment.parseTwoDigitYear(input); + } + } + + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = dfl(w.GG, config._a[YEAR], weekOfYear(moment(), 1, 4).year); + week = dfl(w.W, 1); + weekday = dfl(w.E, 1); + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year); + week = dfl(w.w, 1); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < dow) { + ++week; + } + } else if (w.e != null) { + // local weekday -- counting starts from begining of week + weekday = w.e + dow; + } else { + // default to begining of week + weekday = dow; + } + } + temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow); + + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } + + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function dateFromConfig(config) { + var i, date, input = [], currentDate, yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear) { + yearToUse = dfl(config._a[YEAR], currentDate[YEAR]); + + if (config._dayOfYear > daysInYear(yearToUse)) { + config._pf._overflowDayOfYear = true; + } + + date = makeUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + } + + config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input); + // Apply timezone offset from input. The actual zone can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() + config._tzm); + } + } + + function dateFromObject(config) { + var normalizedInput; + + if (config._d) { + return; + } + + normalizedInput = normalizeObjectUnits(config._i); + config._a = [ + normalizedInput.year, + normalizedInput.month, + normalizedInput.day, + normalizedInput.hour, + normalizedInput.minute, + normalizedInput.second, + normalizedInput.millisecond + ]; + + dateFromConfig(config); + } + + function currentDateArray(config) { + var now = new Date(); + if (config._useUTC) { + return [ + now.getUTCFullYear(), + now.getUTCMonth(), + now.getUTCDate() + ]; + } else { + return [now.getFullYear(), now.getMonth(), now.getDate()]; + } + } + + // date from string and format string + function makeDateFromStringAndFormat(config) { + if (config._f === moment.ISO_8601) { + parseISO(config); + return; + } + + config._a = []; + config._pf.empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, parsedInput, tokens, token, skipped, + stringLength = string.length, + totalParsedInputLength = 0; + + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + config._pf.unusedInput.push(skipped); + } + string = string.slice(string.indexOf(parsedInput) + parsedInput.length); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + config._pf.empty = false; + } + else { + config._pf.unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } + else if (config._strict && !parsedInput) { + config._pf.unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + config._pf.charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + config._pf.unusedInput.push(string); + } + + // handle am pm + if (config._isPm && config._a[HOUR] < 12) { + config._a[HOUR] += 12; + } + // if is 12 am, change hours to 0 + if (config._isPm === false && config._a[HOUR] === 12) { + config._a[HOUR] = 0; + } + + dateFromConfig(config); + checkOverflow(config); + } + + function unescapeFormat(s) { + return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + }); + } + + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function regexpEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + + // date from string and array of format strings + function makeDateFromStringAndArray(config) { + var tempConfig, + bestMoment, + + scoreToBeat, + i, + currentScore; + + if (config._f.length === 0) { + config._pf.invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + tempConfig = copyConfig({}, config); + tempConfig._pf = defaultParsingFlags(); + tempConfig._f = config._f[i]; + makeDateFromStringAndFormat(tempConfig); + + if (!isValid(tempConfig)) { + continue; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += tempConfig._pf.charsLeftOver; + + //or tokens + currentScore += tempConfig._pf.unusedTokens.length * 10; + + tempConfig._pf.score = currentScore; + + if (scoreToBeat == null || currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + + extend(config, bestMoment || tempConfig); + } + + // date from iso format + function parseISO(config) { + var i, l, + string = config._i, + match = isoRegex.exec(string); + + if (match) { + config._pf.iso = true; + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(string)) { + // match[5] should be "T" or undefined + config._f = isoDates[i][0] + (match[6] || ' '); + break; + } + } + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(string)) { + config._f += isoTimes[i][0]; + break; + } + } + if (string.match(parseTokenTimezone)) { + config._f += 'Z'; + } + makeDateFromStringAndFormat(config); + } else { + config._isValid = false; + } + } + + // date from iso format or fallback + function makeDateFromString(config) { + parseISO(config); + if (config._isValid === false) { + delete config._isValid; + moment.createFromInputFallback(config); + } + } + + function makeDateFromInput(config) { + var input = config._i, matched; + if (input === undefined) { + config._d = new Date(); + } else if (isDate(input)) { + config._d = new Date(+input); + } else if ((matched = aspNetJsonRegex.exec(input)) !== null) { + config._d = new Date(+matched[1]); + } else if (typeof input === 'string') { + makeDateFromString(config); + } else if (isArray(input)) { + config._a = input.slice(0); + dateFromConfig(config); + } else if (typeof(input) === 'object') { + dateFromObject(config); + } else if (typeof(input) === 'number') { + // from milliseconds + config._d = new Date(input); + } else { + moment.createFromInputFallback(config); + } + } + + function makeDate(y, m, d, h, M, s, ms) { + //can't just apply() to create a date: + //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply + var date = new Date(y, m, d, h, M, s, ms); + + //the date constructor doesn't accept years < 1970 + if (y < 1970) { + date.setFullYear(y); + } + return date; + } + + function makeUTCDate(y) { + var date = new Date(Date.UTC.apply(null, arguments)); + if (y < 1970) { + date.setUTCFullYear(y); + } + return date; + } + + function parseWeekday(input, locale) { + if (typeof input === 'string') { + if (!isNaN(input)) { + input = parseInt(input, 10); + } + else { + input = locale.weekdaysParse(input); + if (typeof input !== 'number') { + return null; + } + } + } + return input; + } + + /************************************ + Relative Time + ************************************/ + + + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } + + function relativeTime(posNegDuration, withoutSuffix, locale) { + var duration = moment.duration(posNegDuration).abs(), + seconds = round(duration.as('s')), + minutes = round(duration.as('m')), + hours = round(duration.as('h')), + days = round(duration.as('d')), + months = round(duration.as('M')), + years = round(duration.as('y')), + + args = seconds < relativeTimeThresholds.s && ['s', seconds] || + minutes === 1 && ['m'] || + minutes < relativeTimeThresholds.m && ['mm', minutes] || + hours === 1 && ['h'] || + hours < relativeTimeThresholds.h && ['hh', hours] || + days === 1 && ['d'] || + days < relativeTimeThresholds.d && ['dd', days] || + months === 1 && ['M'] || + months < relativeTimeThresholds.M && ['MM', months] || + years === 1 && ['y'] || ['yy', years]; + + args[2] = withoutSuffix; + args[3] = +posNegDuration > 0; + args[4] = locale; + return substituteTimeAgo.apply({}, args); + } + + + /************************************ + Week of Year + ************************************/ + + + // firstDayOfWeek 0 = sun, 6 = sat + // the day of the week that starts the week + // (usually sunday or monday) + // firstDayOfWeekOfYear 0 = sun, 6 = sat + // the first week is the week that contains the first + // of this day of the week + // (eg. ISO weeks use thursday (4)) + function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { + var end = firstDayOfWeekOfYear - firstDayOfWeek, + daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), + adjustedMoment; + + + if (daysToDayOfWeek > end) { + daysToDayOfWeek -= 7; + } + + if (daysToDayOfWeek < end - 7) { + daysToDayOfWeek += 7; + } + + adjustedMoment = moment(mom).add(daysToDayOfWeek, 'd'); + return { + week: Math.ceil(adjustedMoment.dayOfYear() / 7), + year: adjustedMoment.year() + }; + } + + //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { + var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear; + + d = d === 0 ? 7 : d; + weekday = weekday != null ? weekday : firstDayOfWeek; + daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0); + dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1; + + return { + year: dayOfYear > 0 ? year : year - 1, + dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear + }; + } + + /************************************ + Top Level Functions + ************************************/ + + function makeMoment(config) { + var input = config._i, + format = config._f; + + config._locale = config._locale || moment.localeData(config._l); + + if (input === null || (format === undefined && input === '')) { + return moment.invalid({nullInput: true}); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (moment.isMoment(input)) { + return new Moment(input, true); + } else if (format) { + if (isArray(format)) { + makeDateFromStringAndArray(config); + } else { + makeDateFromStringAndFormat(config); + } + } else { + makeDateFromInput(config); + } + + return new Moment(config); + } + + moment = function (input, format, locale, strict) { + var c; + + if (typeof(locale) === "boolean") { + strict = locale; + locale = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c = {}; + c._isAMomentObject = true; + c._i = input; + c._f = format; + c._l = locale; + c._strict = strict; + c._isUTC = false; + c._pf = defaultParsingFlags(); + + return makeMoment(c); + }; + + moment.suppressDeprecationWarnings = false; + + moment.createFromInputFallback = deprecate( + 'moment construction falls back to js Date. This is ' + + 'discouraged and will be removed in upcoming major ' + + 'release. Please refer to ' + + 'https://github.com/moment/moment/issues/1407 for more info.', + function (config) { + config._d = new Date(config._i); + } + ); + + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return moment(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (moments[i][fn](res)) { + res = moments[i]; + } + } + return res; + } + + moment.min = function () { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); + }; + + moment.max = function () { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); + }; + + // creating with utc + moment.utc = function (input, format, locale, strict) { + var c; + + if (typeof(locale) === "boolean") { + strict = locale; + locale = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c = {}; + c._isAMomentObject = true; + c._useUTC = true; + c._isUTC = true; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + c._pf = defaultParsingFlags(); + + return makeMoment(c).utc(); + }; + + // creating with unix timestamp (in seconds) + moment.unix = function (input) { + return moment(input * 1000); + }; + + // duration + moment.duration = function (input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + parseIso, + diffRes; + + if (moment.isDuration(input)) { + duration = { + ms: input._milliseconds, + d: input._days, + M: input._months + }; + } else if (typeof input === 'number') { + duration = {}; + if (key) { + duration[key] = input; + } else { + duration.milliseconds = input; + } + } else if (!!(match = aspNetTimeSpanJsonRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y: 0, + d: toInt(match[DATE]) * sign, + h: toInt(match[HOUR]) * sign, + m: toInt(match[MINUTE]) * sign, + s: toInt(match[SECOND]) * sign, + ms: toInt(match[MILLISECOND]) * sign + }; + } else if (!!(match = isoDurationRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + parseIso = function (inp) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; + }; + duration = { + y: parseIso(match[2]), + M: parseIso(match[3]), + d: parseIso(match[4]), + h: parseIso(match[5]), + m: parseIso(match[6]), + s: parseIso(match[7]), + w: parseIso(match[8]) + }; + } else if (typeof duration === 'object' && + ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(moment(duration.from), moment(duration.to)); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (moment.isDuration(input) && input.hasOwnProperty('_locale')) { + ret._locale = input._locale; + } + + return ret; + }; + + // version number + moment.version = VERSION; + + // default format + moment.defaultFormat = isoFormat; + + // constant that refers to the ISO standard + moment.ISO_8601 = function () {}; + + // Plugins that add properties should also add the key here (null value), + // so we can properly clone ourselves. + moment.momentProperties = momentProperties; + + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + moment.updateOffset = function () {}; + + // This function allows you to set a threshold for relative time strings + moment.relativeTimeThreshold = function (threshold, limit) { + if (relativeTimeThresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return relativeTimeThresholds[threshold]; + } + relativeTimeThresholds[threshold] = limit; + return true; + }; + + moment.lang = deprecate( + "moment.lang is deprecated. Use moment.locale instead.", + function (key, value) { + return moment.locale(key, value); + } + ); + + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + moment.locale = function (key, values) { + var data; + if (key) { + if (typeof(values) !== "undefined") { + data = moment.defineLocale(key, values); + } + else { + data = moment.localeData(key); + } + + if (data) { + moment.duration._locale = moment._locale = data; + } + } + + return moment._locale._abbr; + }; + + moment.defineLocale = function (name, values) { + if (values !== null) { + values.abbr = name; + if (!locales[name]) { + locales[name] = new Locale(); + } + locales[name].set(values); + + // backwards compat for now: also set the locale + moment.locale(name); + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + }; + + moment.langData = deprecate( + "moment.langData is deprecated. Use moment.localeData instead.", + function (key) { + return moment.localeData(key); + } + ); + + // returns locale data + moment.localeData = function (key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return moment._locale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); + }; + + // compare moment object + moment.isMoment = function (obj) { + return obj instanceof Moment || + (obj != null && obj.hasOwnProperty('_isAMomentObject')); + }; + + // for typechecking Duration objects + moment.isDuration = function (obj) { + return obj instanceof Duration; + }; + + for (i = lists.length - 1; i >= 0; --i) { + makeList(lists[i]); + } + + moment.normalizeUnits = function (units) { + return normalizeUnits(units); + }; + + moment.invalid = function (flags) { + var m = moment.utc(NaN); + if (flags != null) { + extend(m._pf, flags); + } + else { + m._pf.userInvalidated = true; + } + + return m; + }; + + moment.parseZone = function () { + return moment.apply(null, arguments).parseZone(); + }; + + moment.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; + + /************************************ + Moment Prototype + ************************************/ + + + extend(moment.fn = Moment.prototype, { + + clone : function () { + return moment(this); + }, + + valueOf : function () { + return +this._d + ((this._offset || 0) * 60000); + }, + + unix : function () { + return Math.floor(+this / 1000); + }, + + toString : function () { + return this.clone().locale('en').format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ"); + }, + + toDate : function () { + return this._offset ? new Date(+this) : this._d; + }, + + toISOString : function () { + var m = moment(this).utc(); + if (0 < m.year() && m.year() <= 9999) { + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } else { + return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + }, + + toArray : function () { + var m = this; + return [ + m.year(), + m.month(), + m.date(), + m.hours(), + m.minutes(), + m.seconds(), + m.milliseconds() + ]; + }, + + isValid : function () { + return isValid(this); + }, + + isDSTShifted : function () { + if (this._a) { + return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0; + } + + return false; + }, + + parsingFlags : function () { + return extend({}, this._pf); + }, + + invalidAt: function () { + return this._pf.overflow; + }, + + utc : function (keepLocalTime) { + return this.zone(0, keepLocalTime); + }, + + local : function (keepLocalTime) { + if (this._isUTC) { + this.zone(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.add(this._d.getTimezoneOffset(), 'm'); + } + } + return this; + }, + + format : function (inputString) { + var output = formatMoment(this, inputString || moment.defaultFormat); + return this.localeData().postformat(output); + }, + + add : createAdder(1, 'add'), + + subtract : createAdder(-1, 'subtract'), + + diff : function (input, units, asFloat) { + var that = makeAs(input, this), + zoneDiff = (this.zone() - that.zone()) * 6e4, + diff, output; + + units = normalizeUnits(units); + + if (units === 'year' || units === 'month') { + // average number of days in the months in the given dates + diff = (this.daysInMonth() + that.daysInMonth()) * 432e5; // 24 * 60 * 60 * 1000 / 2 + // difference in months + output = ((this.year() - that.year()) * 12) + (this.month() - that.month()); + // adjust by taking difference in days, average number of days + // and dst in the given months. + output += ((this - moment(this).startOf('month')) - + (that - moment(that).startOf('month'))) / diff; + // same as above but with zones, to negate all dst + output -= ((this.zone() - moment(this).startOf('month').zone()) - + (that.zone() - moment(that).startOf('month').zone())) * 6e4 / diff; + if (units === 'year') { + output = output / 12; + } + } else { + diff = (this - that); + output = units === 'second' ? diff / 1e3 : // 1000 + units === 'minute' ? diff / 6e4 : // 1000 * 60 + units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60 + units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst + units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst + diff; + } + return asFloat ? output : absRound(output); + }, + + from : function (time, withoutSuffix) { + return moment.duration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); + }, + + fromNow : function (withoutSuffix) { + return this.from(moment(), withoutSuffix); + }, + + calendar : function (time) { + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're zone'd or not. + var now = time || moment(), + sod = makeAs(now, this).startOf('day'), + diff = this.diff(sod, 'days', true), + format = diff < -6 ? 'sameElse' : + diff < -1 ? 'lastWeek' : + diff < 0 ? 'lastDay' : + diff < 1 ? 'sameDay' : + diff < 2 ? 'nextDay' : + diff < 7 ? 'nextWeek' : 'sameElse'; + return this.format(this.localeData().calendar(format, this)); + }, + + isLeapYear : function () { + return isLeapYear(this.year()); + }, + + isDST : function () { + return (this.zone() < this.clone().month(0).zone() || + this.zone() < this.clone().month(5).zone()); + }, + + day : function (input) { + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } + }, + + month : makeAccessor('Month', true), + + startOf : function (units) { + units = normalizeUnits(units); + // the following switch intentionally omits break keywords + // to utilize falling through the cases. + switch (units) { + case 'year': + this.month(0); + /* falls through */ + case 'quarter': + case 'month': + this.date(1); + /* falls through */ + case 'week': + case 'isoWeek': + case 'day': + this.hours(0); + /* falls through */ + case 'hour': + this.minutes(0); + /* falls through */ + case 'minute': + this.seconds(0); + /* falls through */ + case 'second': + this.milliseconds(0); + /* falls through */ + } + + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } else if (units === 'isoWeek') { + this.isoWeekday(1); + } + + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); + } + + return this; + }, + + endOf: function (units) { + units = normalizeUnits(units); + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); + }, + + isAfter: function (input, units) { + units = typeof units !== 'undefined' ? units : 'millisecond'; + return +this.clone().startOf(units) > +moment(input).startOf(units); + }, + + isBefore: function (input, units) { + units = typeof units !== 'undefined' ? units : 'millisecond'; + return +this.clone().startOf(units) < +moment(input).startOf(units); + }, + + isSame: function (input, units) { + units = units || 'ms'; + return +this.clone().startOf(units) === +makeAs(input, this).startOf(units); + }, + + min: deprecate( + 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', + function (other) { + other = moment.apply(null, arguments); + return other < this ? this : other; + } + ), + + max: deprecate( + 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', + function (other) { + other = moment.apply(null, arguments); + return other > this ? this : other; + } + ), + + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[zone(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist int zone + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + zone : function (input, keepLocalTime) { + var offset = this._offset || 0, + localAdjust; + if (input != null) { + if (typeof input === 'string') { + input = timezoneMinutesFromString(input); + } + if (Math.abs(input) < 16) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = this._d.getTimezoneOffset(); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.subtract(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addOrSubtractDurationFromMoment(this, + moment.duration(offset - input, 'm'), 1, false); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + moment.updateOffset(this, true); + this._changeInProgress = null; + } + } + } else { + return this._isUTC ? offset : this._d.getTimezoneOffset(); + } + return this; + }, + + zoneAbbr : function () { + return this._isUTC ? 'UTC' : ''; + }, + + zoneName : function () { + return this._isUTC ? 'Coordinated Universal Time' : ''; + }, + + parseZone : function () { + if (this._tzm) { + this.zone(this._tzm); + } else if (typeof this._i === 'string') { + this.zone(this._i); + } + return this; + }, + + hasAlignedHourOffset : function (input) { + if (!input) { + input = 0; + } + else { + input = moment(input).zone(); + } + + return (this.zone() - input) % 60 === 0; + }, + + daysInMonth : function () { + return daysInMonth(this.year(), this.month()); + }, + + dayOfYear : function (input) { + var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); + }, + + quarter : function (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); + }, + + weekYear : function (input) { + var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year; + return input == null ? year : this.add((input - year), 'y'); + }, + + isoWeekYear : function (input) { + var year = weekOfYear(this, 1, 4).year; + return input == null ? year : this.add((input - year), 'y'); + }, + + week : function (input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + }, + + isoWeek : function (input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + }, + + weekday : function (input) { + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + }, + + isoWeekday : function (input) { + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); + }, + + isoWeeksInYear : function () { + return weeksInYear(this.year(), 1, 4); + }, + + weeksInYear : function () { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + }, + + get : function (units) { + units = normalizeUnits(units); + return this[units](); + }, + + set : function (units, value) { + units = normalizeUnits(units); + if (typeof this[units] === 'function') { + this[units](value); + } + return this; + }, + + // If passed a locale key, it will set the locale for this + // instance. Otherwise, it will return the locale configuration + // variables for this instance. + locale : function (key) { + if (key === undefined) { + return this._locale._abbr; + } else { + this._locale = moment.localeData(key); + return this; + } + }, + + lang : deprecate( + "moment().lang() is deprecated. Use moment().localeData() instead.", + function (key) { + return this.localeData(key); + } + ), + + localeData : function () { + return this._locale; + } + }); + + function rawMonthSetter(mom, value) { + var dayOfMonth; + + // TODO: Move this out of here! + if (typeof value === 'string') { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (typeof value !== 'number') { + return mom; + } + } + + dayOfMonth = Math.min(mom.date(), + daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; + } + + function rawGetter(mom, unit) { + return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); + } + + function rawSetter(mom, unit, value) { + if (unit === 'Month') { + return rawMonthSetter(mom, value); + } else { + return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + } + + function makeAccessor(unit, keepTime) { + return function (value) { + if (value != null) { + rawSetter(this, unit, value); + moment.updateOffset(this, keepTime); + return this; + } else { + return rawGetter(this, unit); + } + }; + } + + moment.fn.millisecond = moment.fn.milliseconds = makeAccessor('Milliseconds', false); + moment.fn.second = moment.fn.seconds = makeAccessor('Seconds', false); + moment.fn.minute = moment.fn.minutes = makeAccessor('Minutes', false); + // Setting the hour should keep the time, because the user explicitly + // specified which hour he wants. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + moment.fn.hour = moment.fn.hours = makeAccessor('Hours', true); + // moment.fn.month is defined separately + moment.fn.date = makeAccessor('Date', true); + moment.fn.dates = deprecate('dates accessor is deprecated. Use date instead.', makeAccessor('Date', true)); + moment.fn.year = makeAccessor('FullYear', true); + moment.fn.years = deprecate('years accessor is deprecated. Use year instead.', makeAccessor('FullYear', true)); + + // add plural methods + moment.fn.days = moment.fn.day; + moment.fn.months = moment.fn.month; + moment.fn.weeks = moment.fn.week; + moment.fn.isoWeeks = moment.fn.isoWeek; + moment.fn.quarters = moment.fn.quarter; + + // add aliased format methods + moment.fn.toJSON = moment.fn.toISOString; + + /************************************ + Duration Prototype + ************************************/ + + + function daysToYears (days) { + // 400 years have 146097 days (taking into account leap year rules) + return days * 400 / 146097; + } + + function yearsToDays (years) { + // years * 365 + absRound(years / 4) - + // absRound(years / 100) + absRound(years / 400); + return years * 146097 / 400; + } + + extend(moment.duration.fn = Duration.prototype, { + + _bubble : function () { + var milliseconds = this._milliseconds, + days = this._days, + months = this._months, + data = this._data, + seconds, minutes, hours, years = 0; + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absRound(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absRound(seconds / 60); + data.minutes = minutes % 60; + + hours = absRound(minutes / 60); + data.hours = hours % 24; + + days += absRound(hours / 24); + + // Accurately convert days to years, assume start from year 0. + years = absRound(daysToYears(days)); + days -= absRound(yearsToDays(years)); + + // 30 days to a month + // TODO (iskren): Use anchor date (like 1st Jan) to compute this. + months += absRound(days / 30); + days %= 30; + + // 12 months -> 1 year + years += absRound(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + }, + + abs : function () { + this._milliseconds = Math.abs(this._milliseconds); + this._days = Math.abs(this._days); + this._months = Math.abs(this._months); + + this._data.milliseconds = Math.abs(this._data.milliseconds); + this._data.seconds = Math.abs(this._data.seconds); + this._data.minutes = Math.abs(this._data.minutes); + this._data.hours = Math.abs(this._data.hours); + this._data.months = Math.abs(this._data.months); + this._data.years = Math.abs(this._data.years); + + return this; + }, + + weeks : function () { + return absRound(this.days() / 7); + }, + + valueOf : function () { + return this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6; + }, + + humanize : function (withSuffix) { + var output = relativeTime(this, !withSuffix, this.localeData()); + + if (withSuffix) { + output = this.localeData().pastFuture(+this, output); + } + + return this.localeData().postformat(output); + }, + + add : function (input, val) { + // supports only 2.0-style add(1, 's') or add(moment) + var dur = moment.duration(input, val); + + this._milliseconds += dur._milliseconds; + this._days += dur._days; + this._months += dur._months; + + this._bubble(); + + return this; + }, + + subtract : function (input, val) { + var dur = moment.duration(input, val); + + this._milliseconds -= dur._milliseconds; + this._days -= dur._days; + this._months -= dur._months; + + this._bubble(); + + return this; + }, + + get : function (units) { + units = normalizeUnits(units); + return this[units.toLowerCase() + 's'](); + }, + + as : function (units) { + var days, months; + units = normalizeUnits(units); + + days = this._days + this._milliseconds / 864e5; + if (units === 'month' || units === 'year') { + months = this._months + daysToYears(days) * 12; + return units === 'month' ? months : months / 12; + } else { + days += yearsToDays(this._months / 12); + switch (units) { + case 'week': return days / 7; + case 'day': return days; + case 'hour': return days * 24; + case 'minute': return days * 24 * 60; + case 'second': return days * 24 * 60 * 60; + case 'millisecond': return days * 24 * 60 * 60 * 1000; + default: throw new Error('Unknown unit ' + units); + } + } + }, + + lang : moment.fn.lang, + locale : moment.fn.locale, + + toIsoString : deprecate( + "toIsoString() is deprecated. Please use toISOString() instead " + + "(notice the capitals)", + function () { + return this.toISOString(); + } + ), + + toISOString : function () { + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var years = Math.abs(this.years()), + months = Math.abs(this.months()), + days = Math.abs(this.days()), + hours = Math.abs(this.hours()), + minutes = Math.abs(this.minutes()), + seconds = Math.abs(this.seconds() + this.milliseconds() / 1000); + + if (!this.asSeconds()) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + return (this.asSeconds() < 0 ? '-' : '') + + 'P' + + (years ? years + 'Y' : '') + + (months ? months + 'M' : '') + + (days ? days + 'D' : '') + + ((hours || minutes || seconds) ? 'T' : '') + + (hours ? hours + 'H' : '') + + (minutes ? minutes + 'M' : '') + + (seconds ? seconds + 'S' : ''); + }, + + localeData : function () { + return this._locale; + } + }); + + function makeDurationGetter(name) { + moment.duration.fn[name] = function () { + return this._data[name]; + }; + } + + for (i in unitMillisecondFactors) { + if (unitMillisecondFactors.hasOwnProperty(i)) { + makeDurationGetter(i.toLowerCase()); + } + } + + moment.duration.fn.asMilliseconds = function () { + return this.as('ms'); + }; + moment.duration.fn.asSeconds = function () { + return this.as('s'); + }; + moment.duration.fn.asMinutes = function () { + return this.as('m'); + }; + moment.duration.fn.asHours = function () { + return this.as('h'); + }; + moment.duration.fn.asDays = function () { + return this.as('d'); + }; + moment.duration.fn.asWeeks = function () { + return this.as('weeks'); + }; + moment.duration.fn.asMonths = function () { + return this.as('M'); + }; + moment.duration.fn.asYears = function () { + return this.as('y'); + }; + + /************************************ + Default Locale + ************************************/ + + + // Set default locale, other locale will inherit from English. + moment.locale('en', { + ordinal : function (number) { + var b = number % 10, + output = (toInt(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } + }); + + // moment.js locale configuration +// locale : afrikaans (af) +// author : Werner Mollentze : https://github.com/wernerm + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('af', { + months : "Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"), + monthsShort : "Jan_Feb_Mar_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("_"), + weekdaysMin : "So_Ma_Di_Wo_Do_Vr_Sa".split("_"), + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'vm' : 'VM'; + } else { + return isLower ? 'nm' : 'NM'; + } + }, + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[Vandag om] LT', + nextDay : '[Môre om] LT', + nextWeek : 'dddd [om] LT', + lastDay : '[Gister om] LT', + lastWeek : '[Laas] dddd [om] LT', + sameElse : 'L' + }, + relativeTime : { + future : "oor %s", + past : "%s gelede", + s : "'n paar sekondes", + m : "'n minuut", + mm : "%d minute", + h : "'n uur", + hh : "%d ure", + d : "'n dag", + dd : "%d dae", + M : "'n maand", + MM : "%d maande", + y : "'n jaar", + yy : "%d jaar" + }, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter + }, + week : { + dow : 1, // Maandag is die eerste dag van die week. + doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar. + } + }); +})); +// moment.js locale configuration +// locale : Moroccan Arabic (ar-ma) +// author : ElFadili Yassine : https://github.com/ElFadiliY +// author : Abdel Said : https://github.com/abdelsaid + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('ar-ma', { + months : "يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"), + monthsShort : "يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"), + weekdays : "الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"), + weekdaysShort : "احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"), + weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: "[اليوم على الساعة] LT", + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : "في %s", + past : "منذ %s", + s : "ثوان", + m : "دقيقة", + mm : "%d دقائق", + h : "ساعة", + hh : "%d ساعات", + d : "يوم", + dd : "%d أيام", + M : "شهر", + MM : "%d أشهر", + y : "سنة", + yy : "%d سنوات" + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : Arabic Saudi Arabia (ar-sa) +// author : Suhail Alkowaileet : https://github.com/xsoh + +(function (factory) { + factory(moment); +}(function (moment) { + var symbolMap = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠' + }, numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0' + }; + + return moment.defineLocale('ar-sa', { + months : "يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"), + monthsShort : "يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"), + weekdays : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"), + weekdaysShort : "أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"), + weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return "ص"; + } else { + return "م"; + } + }, + calendar : { + sameDay: "[اليوم على الساعة] LT", + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : "في %s", + past : "منذ %s", + s : "ثوان", + m : "دقيقة", + mm : "%d دقائق", + h : "ساعة", + hh : "%d ساعات", + d : "يوم", + dd : "%d أيام", + M : "شهر", + MM : "%d أشهر", + y : "سنة", + yy : "%d سنوات" + }, + preparse: function (string) { + return string.replace(/[۰-۹]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : Arabic (ar) +// author : Abdel Said : https://github.com/abdelsaid +// changes in months, weekdays : Ahmed Elkhatib + +(function (factory) { + factory(moment); +}(function (moment) { + var symbolMap = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠' + }, numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0' + }; + + return moment.defineLocale('ar', { + months : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"), + monthsShort : "يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"), + weekdays : "الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"), + weekdaysShort : "أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"), + weekdaysMin : "ح_ن_ث_ر_خ_ج_س".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return "ص"; + } else { + return "م"; + } + }, + calendar : { + sameDay: "[اليوم على الساعة] LT", + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : "في %s", + past : "منذ %s", + s : "ثوان", + m : "دقيقة", + mm : "%d دقائق", + h : "ساعة", + hh : "%d ساعات", + d : "يوم", + dd : "%d أيام", + M : "شهر", + MM : "%d أشهر", + y : "سنة", + yy : "%d سنوات" + }, + preparse: function (string) { + return string.replace(/[۰-۹]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : azerbaijani (az) +// author : topchiyev : https://github.com/topchiyev + +(function (factory) { + factory(moment); +}(function (moment) { + var suffixes = { + 1: "-inci", + 5: "-inci", + 8: "-inci", + 70: "-inci", + 80: "-inci", + + 2: "-nci", + 7: "-nci", + 20: "-nci", + 50: "-nci", + + 3: "-üncü", + 4: "-üncü", + 100: "-üncü", + + 6: "-ncı", + + 9: "-uncu", + 10: "-uncu", + 30: "-uncu", + + 60: "-ıncı", + 90: "-ıncı" + }; + return moment.defineLocale('az', { + months : "yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"), + monthsShort : "yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"), + weekdays : "Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"), + weekdaysShort : "Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"), + weekdaysMin : "Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[bugün saat] LT', + nextDay : '[sabah saat] LT', + nextWeek : '[gələn həftə] dddd [saat] LT', + lastDay : '[dünən] LT', + lastWeek : '[keçən həftə] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s sonra", + past : "%s əvvəl", + s : "birneçə saniyyə", + m : "bir dəqiqə", + mm : "%d dəqiqə", + h : "bir saat", + hh : "%d saat", + d : "bir gün", + dd : "%d gün", + M : "bir ay", + MM : "%d ay", + y : "bir il", + yy : "%d il" + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "gecə"; + } else if (hour < 12) { + return "səhər"; + } else if (hour < 17) { + return "gündüz"; + } else { + return "axşam"; + } + }, + ordinal : function (number) { + if (number === 0) { // special case for zero + return number + "-ıncı"; + } + var a = number % 10, + b = number % 100 - a, + c = number >= 100 ? 100 : null; + + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : belarusian (be) +// author : Dmitry Demidov : https://github.com/demidov91 +// author: Praleska: http://praleska.pro/ +// Author : Menelion Elensúle : https://github.com/Oire + +(function (factory) { + factory(moment); +}(function (moment) { + function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); + } + + function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін', + 'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін', + 'dd': 'дзень_дні_дзён', + 'MM': 'месяц_месяцы_месяцаў', + 'yy': 'год_гады_гадоў' + }; + if (key === 'm') { + return withoutSuffix ? 'хвіліна' : 'хвіліну'; + } + else if (key === 'h') { + return withoutSuffix ? 'гадзіна' : 'гадзіну'; + } + else { + return number + ' ' + plural(format[key], +number); + } + } + + function monthsCaseReplace(m, format) { + var months = { + 'nominative': 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_'), + 'accusative': 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_') + }, + + nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ? + 'accusative' : + 'nominative'; + + return months[nounCase][m.month()]; + } + + function weekdaysCaseReplace(m, format) { + var weekdays = { + 'nominative': 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'), + 'accusative': 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_') + }, + + nounCase = (/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/).test(format) ? + 'accusative' : + 'nominative'; + + return weekdays[nounCase][m.day()]; + } + + return moment.defineLocale('be', { + months : monthsCaseReplace, + monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'), + weekdays : weekdaysCaseReplace, + weekdaysShort : "нд_пн_ат_ср_чц_пт_сб".split("_"), + weekdaysMin : "нд_пн_ат_ср_чц_пт_сб".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY г.", + LLL : "D MMMM YYYY г., LT", + LLLL : "dddd, D MMMM YYYY г., LT" + }, + calendar : { + sameDay: '[Сёння ў] LT', + nextDay: '[Заўтра ў] LT', + lastDay: '[Учора ў] LT', + nextWeek: function () { + return '[У] dddd [ў] LT'; + }, + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return '[У мінулую] dddd [ў] LT'; + case 1: + case 2: + case 4: + return '[У мінулы] dddd [ў] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : "праз %s", + past : "%s таму", + s : "некалькі секунд", + m : relativeTimeWithPlural, + mm : relativeTimeWithPlural, + h : relativeTimeWithPlural, + hh : relativeTimeWithPlural, + d : "дзень", + dd : relativeTimeWithPlural, + M : "месяц", + MM : relativeTimeWithPlural, + y : "год", + yy : relativeTimeWithPlural + }, + + + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "ночы"; + } else if (hour < 12) { + return "раніцы"; + } else if (hour < 17) { + return "дня"; + } else { + return "вечара"; + } + }, + + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы'; + case 'D': + return number + '-га'; + default: + return number; + } + }, + + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : bulgarian (bg) +// author : Krasen Borisov : https://github.com/kraz + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('bg', { + months : "януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"), + monthsShort : "янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"), + weekdays : "неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"), + weekdaysShort : "нед_пон_вто_сря_чет_пет_съб".split("_"), + weekdaysMin : "нд_пн_вт_ср_чт_пт_сб".split("_"), + longDateFormat : { + LT : "H:mm", + L : "D.MM.YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[Днес в] LT', + nextDay : '[Утре в] LT', + nextWeek : 'dddd [в] LT', + lastDay : '[Вчера в] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[В изминалата] dddd [в] LT'; + case 1: + case 2: + case 4: + case 5: + return '[В изминалия] dddd [в] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : "след %s", + past : "преди %s", + s : "няколко секунди", + m : "минута", + mm : "%d минути", + h : "час", + hh : "%d часа", + d : "ден", + dd : "%d дни", + M : "месец", + MM : "%d месеца", + y : "година", + yy : "%d години" + }, + ordinal : function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : Bengali (bn) +// author : Kaushik Gandhi : https://github.com/kaushikgandhi + +(function (factory) { + factory(moment); +}(function (moment) { + var symbolMap = { + '1': '১', + '2': '২', + '3': '৩', + '4': '৪', + '5': '৫', + '6': '৬', + '7': '৭', + '8': '৮', + '9': '৯', + '0': '০' + }, + numberMap = { + '১': '1', + '২': '2', + '৩': '3', + '৪': '4', + '৫': '5', + '৬': '6', + '৭': '7', + '৮': '8', + '৯': '9', + '০': '0' + }; + + return moment.defineLocale('bn', { + months : 'জানুয়ারী_ফেবুয়ারী_মার্চ_এপ্রিল_মে_জুন_জুলাই_অগাস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split("_"), + monthsShort : 'জানু_ফেব_মার্চ_এপর_মে_জুন_জুল_অগ_সেপ্ট_অক্টো_নভ_ডিসেম্'.split("_"), + weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পত্তিবার_শুক্রুবার_শনিবার'.split("_"), + weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পত্তি_শুক্রু_শনি'.split("_"), + weekdaysMin : 'রব_সম_মঙ্গ_বু_ব্রিহ_শু_শনি'.split("_"), + longDateFormat : { + LT : "A h:mm সময়", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY, LT", + LLLL : "dddd, D MMMM YYYY, LT" + }, + calendar : { + sameDay : '[আজ] LT', + nextDay : '[আগামীকাল] LT', + nextWeek : 'dddd, LT', + lastDay : '[গতকাল] LT', + lastWeek : '[গত] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s পরে", + past : "%s আগে", + s : "কএক সেকেন্ড", + m : "এক মিনিট", + mm : "%d মিনিট", + h : "এক ঘন্টা", + hh : "%d ঘন্টা", + d : "এক দিন", + dd : "%d দিন", + M : "এক মাস", + MM : "%d মাস", + y : "এক বছর", + yy : "%d বছর" + }, + preparse: function (string) { + return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + //Bengali is a vast language its spoken + //in different forms in various parts of the world. + //I have just generalized with most common one used + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "রাত"; + } else if (hour < 10) { + return "শকাল"; + } else if (hour < 17) { + return "দুপুর"; + } else if (hour < 20) { + return "বিকেল"; + } else { + return "রাত"; + } + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : tibetan (bo) +// author : Thupten N. Chakrishar : https://github.com/vajradog + +(function (factory) { + factory(moment); +}(function (moment) { + var symbolMap = { + '1': '༡', + '2': '༢', + '3': '༣', + '4': '༤', + '5': '༥', + '6': '༦', + '7': '༧', + '8': '༨', + '9': '༩', + '0': '༠' + }, + numberMap = { + '༡': '1', + '༢': '2', + '༣': '3', + '༤': '4', + '༥': '5', + '༦': '6', + '༧': '7', + '༨': '8', + '༩': '9', + '༠': '0' + }; + + return moment.defineLocale('bo', { + months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split("_"), + monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split("_"), + weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split("_"), + weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split("_"), + weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split("_"), + longDateFormat : { + LT : "A h:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY, LT", + LLLL : "dddd, D MMMM YYYY, LT" + }, + calendar : { + sameDay : '[དི་རིང] LT', + nextDay : '[སང་ཉིན] LT', + nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT', + lastDay : '[ཁ་སང] LT', + lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s ལ་", + past : "%s སྔན་ལ", + s : "ལམ་སང", + m : "སྐར་མ་གཅིག", + mm : "%d སྐར་མ", + h : "ཆུ་ཚོད་གཅིག", + hh : "%d ཆུ་ཚོད", + d : "ཉིན་གཅིག", + dd : "%d ཉིན་", + M : "ཟླ་བ་གཅིག", + MM : "%d ཟླ་བ", + y : "ལོ་གཅིག", + yy : "%d ལོ" + }, + preparse: function (string) { + return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "མཚན་མོ"; + } else if (hour < 10) { + return "ཞོགས་ཀས"; + } else if (hour < 17) { + return "ཉིན་གུང"; + } else if (hour < 20) { + return "དགོང་དག"; + } else { + return "མཚན་མོ"; + } + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : breton (br) +// author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou + +(function (factory) { + factory(moment); +}(function (moment) { + function relativeTimeWithMutation(number, withoutSuffix, key) { + var format = { + 'mm': "munutenn", + 'MM': "miz", + 'dd': "devezh" + }; + return number + ' ' + mutation(format[key], number); + } + + function specialMutationForYears(number) { + switch (lastNumber(number)) { + case 1: + case 3: + case 4: + case 5: + case 9: + return number + ' bloaz'; + default: + return number + ' vloaz'; + } + } + + function lastNumber(number) { + if (number > 9) { + return lastNumber(number % 10); + } + return number; + } + + function mutation(text, number) { + if (number === 2) { + return softMutation(text); + } + return text; + } + + function softMutation(text) { + var mutationTable = { + 'm': 'v', + 'b': 'v', + 'd': 'z' + }; + if (mutationTable[text.charAt(0)] === undefined) { + return text; + } + return mutationTable[text.charAt(0)] + text.substring(1); + } + + return moment.defineLocale('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("_"), + weekdaysMin : "Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"), + longDateFormat : { + LT : "h[e]mm A", + L : "DD/MM/YYYY", + LL : "D [a viz] MMMM YYYY", + LLL : "D [a viz] MMMM YYYY LT", + LLLL : "dddd, D [a viz] MMMM YYYY LT" + }, + calendar : { + sameDay : '[Hiziv da] LT', + nextDay : '[Warc\'hoazh da] LT', + nextWeek : 'dddd [da] LT', + lastDay : '[Dec\'h da] LT', + lastWeek : 'dddd [paset da] LT', + sameElse : 'L' + }, + relativeTime : { + future : "a-benn %s", + past : "%s 'zo", + s : "un nebeud segondennoù", + m : "ur vunutenn", + mm : relativeTimeWithMutation, + h : "un eur", + hh : "%d eur", + d : "un devezh", + dd : relativeTimeWithMutation, + M : "ur miz", + MM : relativeTimeWithMutation, + y : "ur bloaz", + yy : specialMutationForYears + }, + ordinal : function (number) { + var output = (number === 1) ? 'añ' : 'vet'; + return number + output; + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : bosnian (bs) +// author : Nedim Cholich : https://github.com/frontyard +// based on (hr) translation by Bojan Marković + +(function (factory) { + factory(moment); +}(function (moment) { + function translate(number, withoutSuffix, key) { + var result = number + " "; + switch (key) { + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } + } + + return moment.defineLocale('bs', { + months : "januar_februar_mart_april_maj_juni_juli_avgust_septembar_oktobar_novembar_decembar".split("_"), + monthsShort : "jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"), + weekdays : "nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"), + weekdaysShort : "ned._pon._uto._sri._čet._pet._sub.".split("_"), + weekdaysMin : "ne_po_ut_sr_če_pe_su".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD. MM. YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd, D. MMMM YYYY LT" + }, + calendar : { + sameDay : '[danas u] LT', + nextDay : '[sutra u] LT', + + nextWeek : function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[jučer u] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : "za %s", + past : "prije %s", + s : "par sekundi", + m : translate, + mm : translate, + h : translate, + hh : translate, + d : "dan", + dd : translate, + M : "mjesec", + MM : translate, + y : "godinu", + yy : translate + }, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : catalan (ca) +// author : Juan G. Hurtado : https://github.com/juanghurtado + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('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("_"), + weekdaysMin : "Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay : function () { + return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + nextDay : function () { + return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + lastDay : function () { + return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : "en %s", + past : "fa %s", + s : "uns segons", + m : "un minut", + mm : "%d minuts", + h : "una hora", + hh : "%d hores", + d : "un dia", + dd : "%d dies", + M : "un mes", + MM : "%d mesos", + y : "un any", + yy : "%d anys" + }, + ordinal : '%dº', + 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. + } + }); +})); +// moment.js locale configuration +// locale : czech (cs) +// author : petrbela : https://github.com/petrbela + +(function (factory) { + factory(moment); +}(function (moment) { + var months = "leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"), + monthsShort = "led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"); + + function plural(n) { + return (n > 1) && (n < 5) && (~~(n / 10) !== 1); + } + + function translate(number, withoutSuffix, key, isFuture) { + var result = number + " "; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami'; + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou'); + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'minuty' : 'minut'); + } else { + return result + 'minutami'; + } + break; + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'hodiny' : 'hodin'); + } else { + return result + 'hodinami'; + } + break; + case 'd': // a day / in a day / a day ago + return (withoutSuffix || isFuture) ? 'den' : 'dnem'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'dny' : 'dní'); + } else { + return result + 'dny'; + } + break; + case 'M': // a month / in a month / a month ago + return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'měsíce' : 'měsíců'); + } else { + return result + 'měsíci'; + } + break; + case 'y': // a year / in a year / a year ago + return (withoutSuffix || isFuture) ? 'rok' : 'rokem'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'roky' : 'let'); + } else { + return result + 'lety'; + } + break; + } + } + + return moment.defineLocale('cs', { + months : months, + monthsShort : monthsShort, + monthsParse : (function (months, monthsShort) { + var i, _monthsParse = []; + for (i = 0; i < 12; i++) { + // use custom parser to solve problem with July (červenec) + _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); + } + return _monthsParse; + }(months, monthsShort)), + weekdays : "neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"), + weekdaysShort : "ne_po_út_st_čt_pá_so".split("_"), + weekdaysMin : "ne_po_út_st_čt_pá_so".split("_"), + longDateFormat : { + LT: "H.mm", + L : "DD. MM. YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd D. MMMM YYYY LT" + }, + calendar : { + sameDay: "[dnes v] LT", + nextDay: '[zítra v] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v neděli v] LT'; + case 1: + case 2: + return '[v] dddd [v] LT'; + case 3: + return '[ve středu v] LT'; + case 4: + return '[ve čtvrtek v] LT'; + case 5: + return '[v pátek v] LT'; + case 6: + return '[v sobotu v] LT'; + } + }, + lastDay: '[včera v] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulou neděli v] LT'; + case 1: + case 2: + return '[minulé] dddd [v] LT'; + case 3: + return '[minulou středu v] LT'; + case 4: + case 5: + return '[minulý] dddd [v] LT'; + case 6: + return '[minulou sobotu v] LT'; + } + }, + sameElse: "L" + }, + relativeTime : { + future : "za %s", + past : "před %s", + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + ordinal : '%d.', + 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. + } + }); +})); +// moment.js locale configuration +// locale : chuvash (cv) +// author : Anatoly Mironov : https://github.com/mirontoli + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('cv', { + months : "кăрлач_нарăс_пуш_ака_май_çĕртме_утă_çурла_авăн_юпа_чӳк_раштав".split("_"), + monthsShort : "кăр_нар_пуш_ака_май_çĕр_утă_çур_ав_юпа_чӳк_раш".split("_"), + weekdays : "вырсарникун_тунтикун_ытларикун_юнкун_кĕçнерникун_эрнекун_шăматкун".split("_"), + weekdaysShort : "выр_тун_ытл_юн_кĕç_эрн_шăм".split("_"), + weekdaysMin : "вр_тн_ыт_юн_кç_эр_шм".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD-MM-YYYY", + LL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ]", + LLL : "YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT", + LLLL : "dddd, YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT" + }, + calendar : { + sameDay: '[Паян] LT [сехетре]', + nextDay: '[Ыран] LT [сехетре]', + lastDay: '[Ĕнер] LT [сехетре]', + nextWeek: '[Çитес] dddd LT [сехетре]', + lastWeek: '[Иртнĕ] dddd LT [сехетре]', + sameElse: 'L' + }, + relativeTime : { + future : function (output) { + var affix = /сехет$/i.exec(output) ? "рен" : /çул$/i.exec(output) ? "тан" : "ран"; + return output + affix; + }, + past : "%s каялла", + s : "пĕр-ик çеккунт", + m : "пĕр минут", + mm : "%d минут", + h : "пĕр сехет", + hh : "%d сехет", + d : "пĕр кун", + dd : "%d кун", + M : "пĕр уйăх", + MM : "%d уйăх", + y : "пĕр çул", + yy : "%d çул" + }, + ordinal : '%d-мĕш', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : Welsh (cy) +// author : Robert Allen + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale("cy", { + months: "Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"), + monthsShort: "Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"), + weekdays: "Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"), + weekdaysShort: "Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"), + weekdaysMin: "Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"), + // time formats are the same as en-gb + longDateFormat: { + LT: "HH:mm", + L: "DD/MM/YYYY", + LL: "D MMMM YYYY", + LLL: "D MMMM YYYY LT", + LLLL: "dddd, D MMMM YYYY LT" + }, + calendar: { + sameDay: '[Heddiw am] LT', + nextDay: '[Yfory am] LT', + nextWeek: 'dddd [am] LT', + lastDay: '[Ddoe am] LT', + lastWeek: 'dddd [diwethaf am] LT', + sameElse: 'L' + }, + relativeTime: { + future: "mewn %s", + past: "%s yn ôl", + s: "ychydig eiliadau", + m: "munud", + mm: "%d munud", + h: "awr", + hh: "%d awr", + d: "diwrnod", + dd: "%d diwrnod", + M: "mis", + MM: "%d mis", + y: "blwyddyn", + yy: "%d flynedd" + }, + // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh + ordinal: function (number) { + var b = number, + output = '', + lookup = [ + '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed + 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed + ]; + + if (b > 20) { + if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) { + output = 'fed'; // not 30ain, 70ain or 90ain + } else { + output = 'ain'; + } + } else if (b > 0) { + output = lookup[b]; + } + + return number + output; + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : danish (da) +// author : Ulrik Nielsen : https://github.com/mrbase + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('da', { + months : "januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"), + monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"), + weekdays : "søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"), + weekdaysShort : "søn_man_tir_ons_tor_fre_lør".split("_"), + weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd [d.] D. MMMM YYYY LT" + }, + calendar : { + sameDay : '[I dag kl.] LT', + nextDay : '[I morgen kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[I går kl.] LT', + lastWeek : '[sidste] dddd [kl] LT', + sameElse : 'L' + }, + relativeTime : { + future : "om %s", + past : "%s siden", + s : "få sekunder", + m : "et minut", + mm : "%d minutter", + h : "en time", + hh : "%d timer", + d : "en dag", + dd : "%d dage", + M : "en måned", + MM : "%d måneder", + y : "et år", + yy : "%d år" + }, + ordinal : '%d.', + 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. + } + }); +})); +// moment.js locale configuration +// locale : austrian german (de-at) +// author : lluchs : https://github.com/lluchs +// author: Menelion Elensúle: https://github.com/Oire +// author : Martin Groller : https://github.com/MadMG + +(function (factory) { + factory(moment); +}(function (moment) { + function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + return moment.defineLocale('de-at', { + months : "Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"), + monthsShort : "Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"), + weekdays : "Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"), + weekdaysShort : "So._Mo._Di._Mi._Do._Fr._Sa.".split("_"), + weekdaysMin : "So_Mo_Di_Mi_Do_Fr_Sa".split("_"), + longDateFormat : { + LT: "HH:mm [Uhr]", + L : "DD.MM.YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd, D. MMMM YYYY LT" + }, + calendar : { + sameDay: "[Heute um] LT", + sameElse: "L", + nextDay: '[Morgen um] LT', + nextWeek: 'dddd [um] LT', + lastDay: '[Gestern um] LT', + lastWeek: '[letzten] dddd [um] LT' + }, + relativeTime : { + future : "in %s", + past : "vor %s", + s : "ein paar Sekunden", + m : processRelativeTime, + mm : "%d Minuten", + h : processRelativeTime, + hh : "%d Stunden", + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + ordinal : '%d.', + 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. + } + }); +})); +// moment.js locale configuration +// locale : german (de) +// author : lluchs : https://github.com/lluchs +// author: Menelion Elensúle: https://github.com/Oire + +(function (factory) { + factory(moment); +}(function (moment) { + function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + return moment.defineLocale('de', { + months : "Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"), + monthsShort : "Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"), + weekdays : "Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"), + weekdaysShort : "So._Mo._Di._Mi._Do._Fr._Sa.".split("_"), + weekdaysMin : "So_Mo_Di_Mi_Do_Fr_Sa".split("_"), + longDateFormat : { + LT: "HH:mm [Uhr]", + L : "DD.MM.YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd, D. MMMM YYYY LT" + }, + calendar : { + sameDay: "[Heute um] LT", + sameElse: "L", + nextDay: '[Morgen um] LT', + nextWeek: 'dddd [um] LT', + lastDay: '[Gestern um] LT', + lastWeek: '[letzten] dddd [um] LT' + }, + relativeTime : { + future : "in %s", + past : "vor %s", + s : "ein paar Sekunden", + m : processRelativeTime, + mm : "%d Minuten", + h : processRelativeTime, + hh : "%d Stunden", + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + ordinal : '%d.', + 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. + } + }); +})); +// moment.js locale configuration +// locale : modern greek (el) +// author : Aggelos Karalias : https://github.com/mehiel + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('el', { + monthsNominativeEl : "Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"), + monthsGenitiveEl : "Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"), + months : function (momentToFormat, format) { + if (/D/.test(format.substring(0, format.indexOf("MMMM")))) { // if there is a day number before 'MMMM' + return this._monthsGenitiveEl[momentToFormat.month()]; + } else { + return this._monthsNominativeEl[momentToFormat.month()]; + } + }, + monthsShort : "Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"), + weekdays : "Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"), + weekdaysShort : "Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"), + weekdaysMin : "Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"), + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'μμ' : 'ΜΜ'; + } else { + return isLower ? 'πμ' : 'ΠΜ'; + } + }, + longDateFormat : { + LT : "h:mm A", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendarEl : { + sameDay : '[Σήμερα {}] LT', + nextDay : '[Αύριο {}] LT', + nextWeek : 'dddd [{}] LT', + lastDay : '[Χθες {}] LT', + lastWeek : function () { + switch (this.day()) { + case 6: + return '[το προηγούμενο] dddd [{}] LT'; + default: + return '[την προηγούμενη] dddd [{}] LT'; + } + }, + sameElse : 'L' + }, + calendar : function (key, mom) { + var output = this._calendarEl[key], + hours = mom && mom.hours(); + + if (typeof output === 'function') { + output = output.apply(mom); + } + + return output.replace("{}", (hours % 12 === 1 ? "στη" : "στις")); + }, + relativeTime : { + future : "σε %s", + past : "%s πριν", + s : "δευτερόλεπτα", + m : "ένα λεπτό", + mm : "%d λεπτά", + h : "μία ώρα", + hh : "%d ώρες", + d : "μία μέρα", + dd : "%d μέρες", + M : "ένας μήνας", + MM : "%d μήνες", + y : "ένας χρόνος", + yy : "%d χρόνια" + }, + ordinal : function (number) { + return number + 'η'; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : australian english (en-au) + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('en-au', { + 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("_"), + weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), + longDateFormat : { + LT : "h:mm A", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : "in %s", + past : "%s ago", + s : "a few seconds", + m : "a minute", + mm : "%d minutes", + h : "an hour", + hh : "%d hours", + d : "a day", + dd : "%d days", + M : "a month", + MM : "%d months", + y : "a year", + yy : "%d years" + }, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : canadian english (en-ca) +// author : Jonathan Abourbih : https://github.com/jonbca + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('en-ca', { + 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("_"), + weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), + longDateFormat : { + LT : "h:mm A", + L : "YYYY-MM-DD", + LL : "D MMMM, YYYY", + LLL : "D MMMM, YYYY LT", + LLLL : "dddd, D MMMM, YYYY LT" + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : "in %s", + past : "%s ago", + s : "a few seconds", + m : "a minute", + mm : "%d minutes", + h : "an hour", + hh : "%d hours", + d : "a day", + dd : "%d days", + M : "a month", + MM : "%d months", + y : "a year", + yy : "%d years" + }, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } + }); +})); +// moment.js locale configuration +// locale : great britain english (en-gb) +// author : Chris Gedrim : https://github.com/chrisgedrim + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('en-gb', { + 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("_"), + weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : "in %s", + past : "%s ago", + s : "a few seconds", + m : "a minute", + mm : "%d minutes", + h : "an hour", + hh : "%d hours", + d : "a day", + dd : "%d days", + M : "a month", + MM : "%d months", + y : "a year", + yy : "%d years" + }, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : esperanto (eo) +// author : Colin Dean : https://github.com/colindean +// komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko. +// Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni! + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('eo', { + months : "januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"), + monthsShort : "jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"), + weekdays : "Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"), + weekdaysShort : "Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab".split("_"), + weekdaysMin : "Di_Lu_Ma_Me_Ĵa_Ve_Sa".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "YYYY-MM-DD", + LL : "D[-an de] MMMM, YYYY", + LLL : "D[-an de] MMMM, YYYY LT", + LLLL : "dddd, [la] D[-an de] MMMM, YYYY LT" + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'p.t.m.' : 'P.T.M.'; + } else { + return isLower ? 'a.t.m.' : 'A.T.M.'; + } + }, + calendar : { + sameDay : '[Hodiaŭ je] LT', + nextDay : '[Morgaŭ je] LT', + nextWeek : 'dddd [je] LT', + lastDay : '[Hieraŭ je] LT', + lastWeek : '[pasinta] dddd [je] LT', + sameElse : 'L' + }, + relativeTime : { + future : "je %s", + past : "antaŭ %s", + s : "sekundoj", + m : "minuto", + mm : "%d minutoj", + h : "horo", + hh : "%d horoj", + d : "tago",//ne 'diurno', ĉar estas uzita por proksimumo + dd : "%d tagoj", + M : "monato", + MM : "%d monatoj", + y : "jaro", + yy : "%d jaroj" + }, + ordinal : "%da", + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : spanish (es) +// author : Julio Napurí : https://github.com/julionc + +(function (factory) { + factory(moment); +}(function (moment) { + var monthsShortDot = "ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"), + monthsShort = "ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"); + + return moment.defineLocale('es', { + months : "enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"), + monthsShort : function (m, format) { + if (/-MMM-/.test(format)) { + return monthsShort[m.month()]; + } else { + return monthsShortDot[m.month()]; + } + }, + weekdays : "domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"), + weekdaysShort : "dom._lun._mar._mié._jue._vie._sáb.".split("_"), + weekdaysMin : "Do_Lu_Ma_Mi_Ju_Vi_Sá".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD/MM/YYYY", + LL : "D [de] MMMM [del] YYYY", + LLL : "D [de] MMMM [del] YYYY LT", + LLLL : "dddd, D [de] MMMM [del] YYYY LT" + }, + calendar : { + sameDay : function () { + return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextDay : function () { + return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastDay : function () { + return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : "en %s", + past : "hace %s", + s : "unos segundos", + m : "un minuto", + mm : "%d minutos", + h : "una hora", + hh : "%d horas", + d : "un día", + dd : "%d días", + M : "un mes", + MM : "%d meses", + y : "un año", + yy : "%d años" + }, + ordinal : '%dº', + 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. + } + }); +})); +// moment.js locale configuration +// locale : estonian (et) +// author : Henry Kehlmann : https://github.com/madhenry +// improvements : Illimar Tambek : https://github.com/ragulka + +(function (factory) { + factory(moment); +}(function (moment) { + function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'], + 'm' : ['ühe minuti', 'üks minut'], + 'mm': [number + ' minuti', number + ' minutit'], + 'h' : ['ühe tunni', 'tund aega', 'üks tund'], + 'hh': [number + ' tunni', number + ' tundi'], + 'd' : ['ühe päeva', 'üks päev'], + 'M' : ['kuu aja', 'kuu aega', 'üks kuu'], + 'MM': [number + ' kuu', number + ' kuud'], + 'y' : ['ühe aasta', 'aasta', 'üks aasta'], + 'yy': [number + ' aasta', number + ' aastat'] + }; + if (withoutSuffix) { + return format[key][2] ? format[key][2] : format[key][1]; + } + return isFuture ? format[key][0] : format[key][1]; + } + + return moment.defineLocale('et', { + months : "jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"), + monthsShort : "jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"), + weekdays : "pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"), + weekdaysShort : "P_E_T_K_N_R_L".split("_"), + weekdaysMin : "P_E_T_K_N_R_L".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD.MM.YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd, D. MMMM YYYY LT" + }, + calendar : { + sameDay : '[Täna,] LT', + nextDay : '[Homme,] LT', + nextWeek : '[Järgmine] dddd LT', + lastDay : '[Eile,] LT', + lastWeek : '[Eelmine] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s pärast", + past : "%s tagasi", + s : processRelativeTime, + m : processRelativeTime, + mm : processRelativeTime, + h : processRelativeTime, + hh : processRelativeTime, + d : processRelativeTime, + dd : '%d päeva', + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + ordinal : '%d.', + 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. + } + }); +})); +// moment.js locale configuration +// locale : euskara (eu) +// author : Eneko Illarramendi : https://github.com/eillarra + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('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("_"), + weekdaysMin : "ig_al_ar_az_og_ol_lr".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "YYYY-MM-DD", + LL : "YYYY[ko] MMMM[ren] D[a]", + LLL : "YYYY[ko] MMMM[ren] D[a] LT", + LLLL : "dddd, YYYY[ko] MMMM[ren] D[a] LT", + l : "YYYY-M-D", + ll : "YYYY[ko] MMM D[a]", + lll : "YYYY[ko] MMM D[a] LT", + llll : "ddd, YYYY[ko] MMM D[a] LT" + }, + calendar : { + sameDay : '[gaur] LT[etan]', + nextDay : '[bihar] LT[etan]', + nextWeek : 'dddd LT[etan]', + lastDay : '[atzo] LT[etan]', + lastWeek : '[aurreko] dddd LT[etan]', + sameElse : 'L' + }, + relativeTime : { + future : "%s barru", + past : "duela %s", + s : "segundo batzuk", + m : "minutu bat", + mm : "%d minutu", + h : "ordu bat", + hh : "%d ordu", + d : "egun bat", + dd : "%d egun", + M : "hilabete bat", + MM : "%d hilabete", + y : "urte bat", + yy : "%d urte" + }, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : Persian +// author : Ebrahim Byagowi : https://github.com/ebraminio + +(function (factory) { + factory(moment); +}(function (moment) { + var symbolMap = { + '1': '۱', + '2': '۲', + '3': '۳', + '4': '۴', + '5': '۵', + '6': '۶', + '7': '۷', + '8': '۸', + '9': '۹', + '0': '۰' + }, numberMap = { + '۱': '1', + '۲': '2', + '۳': '3', + '۴': '4', + '۵': '5', + '۶': '6', + '۷': '7', + '۸': '8', + '۹': '9', + '۰': '0' + }; + + return moment.defineLocale('fa', { + months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), + weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), + weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'), + longDateFormat : { + LT : 'HH:mm', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY LT', + LLLL : 'dddd, D MMMM YYYY LT' + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return "قبل از ظهر"; + } else { + return "بعد از ظهر"; + } + }, + calendar : { + sameDay : '[امروز ساعت] LT', + nextDay : '[فردا ساعت] LT', + nextWeek : 'dddd [ساعت] LT', + lastDay : '[دیروز ساعت] LT', + lastWeek : 'dddd [پیش] [ساعت] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'در %s', + past : '%s پیش', + s : 'چندین ثانیه', + m : 'یک دقیقه', + mm : '%d دقیقه', + h : 'یک ساعت', + hh : '%d ساعت', + d : 'یک روز', + dd : '%d روز', + M : 'یک ماه', + MM : '%d ماه', + y : 'یک سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/[۰-۹]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + ordinal : '%dم', + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : finnish (fi) +// author : Tarmo Aidantausta : https://github.com/bleadof + +(function (factory) { + factory(moment); +}(function (moment) { + var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '), + numbersFuture = [ + 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', + numbersPast[7], numbersPast[8], numbersPast[9] + ]; + + function translate(number, withoutSuffix, key, isFuture) { + var result = ""; + switch (key) { + case 's': + return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; + case 'm': + return isFuture ? 'minuutin' : 'minuutti'; + case 'mm': + result = isFuture ? 'minuutin' : 'minuuttia'; + break; + case 'h': + return isFuture ? 'tunnin' : 'tunti'; + case 'hh': + result = isFuture ? 'tunnin' : 'tuntia'; + break; + case 'd': + return isFuture ? 'päivän' : 'päivä'; + case 'dd': + result = isFuture ? 'päivän' : 'päivää'; + break; + case 'M': + return isFuture ? 'kuukauden' : 'kuukausi'; + case 'MM': + result = isFuture ? 'kuukauden' : 'kuukautta'; + break; + case 'y': + return isFuture ? 'vuoden' : 'vuosi'; + case 'yy': + result = isFuture ? 'vuoden' : 'vuotta'; + break; + } + result = verbalNumber(number, isFuture) + " " + result; + return result; + } + + function verbalNumber(number, isFuture) { + return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number; + } + + return moment.defineLocale('fi', { + months : "tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"), + monthsShort : "tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"), + weekdays : "sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"), + weekdaysShort : "su_ma_ti_ke_to_pe_la".split("_"), + weekdaysMin : "su_ma_ti_ke_to_pe_la".split("_"), + longDateFormat : { + LT : "HH.mm", + L : "DD.MM.YYYY", + LL : "Do MMMM[ta] YYYY", + LLL : "Do MMMM[ta] YYYY, [klo] LT", + LLLL : "dddd, Do MMMM[ta] YYYY, [klo] LT", + l : "D.M.YYYY", + ll : "Do MMM YYYY", + lll : "Do MMM YYYY, [klo] LT", + llll : "ddd, Do MMM YYYY, [klo] LT" + }, + calendar : { + sameDay : '[tänään] [klo] LT', + nextDay : '[huomenna] [klo] LT', + nextWeek : 'dddd [klo] LT', + lastDay : '[eilen] [klo] LT', + lastWeek : '[viime] dddd[na] [klo] LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s päästä", + past : "%s sitten", + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + ordinal : "%d.", + 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. + } + }); +})); +// moment.js locale configuration +// locale : faroese (fo) +// author : Ragnar Johannesen : https://github.com/ragnar123 + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('fo', { + months : "januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"), + monthsShort : "jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"), + weekdays : "sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"), + weekdaysShort : "sun_mán_týs_mik_hós_frí_ley".split("_"), + weekdaysMin : "su_má_tý_mi_hó_fr_le".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D. MMMM, YYYY LT" + }, + calendar : { + sameDay : '[Í dag kl.] LT', + nextDay : '[Í morgin kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[Í gjár kl.] LT', + lastWeek : '[síðstu] dddd [kl] LT', + sameElse : 'L' + }, + relativeTime : { + future : "um %s", + past : "%s síðani", + s : "fá sekund", + m : "ein minutt", + mm : "%d minuttir", + h : "ein tími", + hh : "%d tímar", + d : "ein dagur", + dd : "%d dagar", + M : "ein mánaði", + MM : "%d mánaðir", + y : "eitt ár", + yy : "%d ár" + }, + ordinal : '%d.', + 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. + } + }); +})); +// moment.js locale configuration +// locale : canadian french (fr-ca) +// author : Jonathan Abourbih : https://github.com/jonbca + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('fr-ca', { + 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("_"), + weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "YYYY-MM-DD", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: "[Aujourd'hui à] LT", + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L' + }, + relativeTime : { + future : "dans %s", + past : "il y a %s", + s : "quelques secondes", + m : "une minute", + mm : "%d minutes", + h : "une heure", + hh : "%d heures", + d : "un jour", + dd : "%d jours", + M : "un mois", + MM : "%d mois", + y : "un an", + yy : "%d ans" + }, + ordinal : function (number) { + return number + (number === 1 ? 'er' : ''); + } + }); +})); +// moment.js locale configuration +// locale : french (fr) +// author : John Fischer : https://github.com/jfroffice + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('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("_"), + weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: "[Aujourd'hui à] LT", + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L' + }, + relativeTime : { + future : "dans %s", + past : "il y a %s", + s : "quelques secondes", + m : "une minute", + mm : "%d minutes", + h : "une heure", + hh : "%d heures", + d : "un jour", + dd : "%d jours", + M : "un mois", + MM : "%d mois", + y : "un an", + yy : "%d ans" + }, + ordinal : function (number) { + return number + (number === 1 ? 'er' : ''); + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : galician (gl) +// author : Juan G. Hurtado : https://github.com/juanghurtado + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('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("_"), + weekdaysMin : "Do_Lu_Ma_Mé_Xo_Ve_Sá".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay : function () { + return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; + }, + nextDay : function () { + return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; + }, + nextWeek : function () { + return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; + }, + lastDay : function () { + return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT'; + }, + lastWeek : function () { + return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : function (str) { + if (str === "uns segundos") { + return "nuns segundos"; + } + return "en " + str; + }, + past : "hai %s", + s : "uns segundos", + m : "un minuto", + mm : "%d minutos", + h : "unha hora", + hh : "%d horas", + d : "un día", + dd : "%d días", + M : "un mes", + MM : "%d meses", + y : "un ano", + yy : "%d anos" + }, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : Hebrew (he) +// author : Tomer Cohen : https://github.com/tomer +// author : Moshe Simantov : https://github.com/DevelopmentIL +// author : Tal Ater : https://github.com/TalAter + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('he', { + months : "ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"), + monthsShort : "ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"), + weekdays : "ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"), + weekdaysShort : "א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"), + weekdaysMin : "א_ב_ג_ד_ה_ו_ש".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D [ב]MMMM YYYY", + LLL : "D [ב]MMMM YYYY LT", + LLLL : "dddd, D [ב]MMMM YYYY LT", + l : "D/M/YYYY", + ll : "D MMM YYYY", + lll : "D MMM YYYY LT", + llll : "ddd, D MMM YYYY LT" + }, + calendar : { + sameDay : '[היום ב־]LT', + nextDay : '[מחר ב־]LT', + nextWeek : 'dddd [בשעה] LT', + lastDay : '[אתמול ב־]LT', + lastWeek : '[ביום] dddd [האחרון בשעה] LT', + sameElse : 'L' + }, + relativeTime : { + future : "בעוד %s", + past : "לפני %s", + s : "מספר שניות", + m : "דקה", + mm : "%d דקות", + h : "שעה", + hh : function (number) { + if (number === 2) { + return "שעתיים"; + } + return number + " שעות"; + }, + d : "יום", + dd : function (number) { + if (number === 2) { + return "יומיים"; + } + return number + " ימים"; + }, + M : "חודש", + MM : function (number) { + if (number === 2) { + return "חודשיים"; + } + return number + " חודשים"; + }, + y : "שנה", + yy : function (number) { + if (number === 2) { + return "שנתיים"; + } + return number + " שנים"; + } + } + }); +})); +// moment.js locale configuration +// locale : hindi (hi) +// author : Mayank Singhal : https://github.com/mayanksinghal + +(function (factory) { + factory(moment); +}(function (moment) { + var symbolMap = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' + }, + numberMap = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' + }; + + return moment.defineLocale('hi', { + months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split("_"), + monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split("_"), + weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split("_"), + weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split("_"), + weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split("_"), + longDateFormat : { + LT : "A h:mm बजे", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY, LT", + LLLL : "dddd, D MMMM YYYY, LT" + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[कल] LT', + nextWeek : 'dddd, LT', + lastDay : '[कल] LT', + lastWeek : '[पिछले] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s में", + past : "%s पहले", + s : "कुछ ही क्षण", + m : "एक मिनट", + mm : "%d मिनट", + h : "एक घंटा", + hh : "%d घंटे", + d : "एक दिन", + dd : "%d दिन", + M : "एक महीने", + MM : "%d महीने", + y : "एक वर्ष", + yy : "%d वर्ष" + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + // Hindi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "रात"; + } else if (hour < 10) { + return "सुबह"; + } else if (hour < 17) { + return "दोपहर"; + } else if (hour < 20) { + return "शाम"; + } else { + return "रात"; + } + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : hrvatski (hr) +// author : Bojan Marković : https://github.com/bmarkovic + +// based on (sl) translation by Robert Sedovšek + +(function (factory) { + factory(moment); +}(function (moment) { + function translate(number, withoutSuffix, key) { + var result = number + " "; + switch (key) { + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } + } + + return moment.defineLocale('hr', { + months : "sječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_"), + monthsShort : "sje._vel._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"), + weekdays : "nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"), + weekdaysShort : "ned._pon._uto._sri._čet._pet._sub.".split("_"), + weekdaysMin : "ne_po_ut_sr_če_pe_su".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD. MM. YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd, D. MMMM YYYY LT" + }, + calendar : { + sameDay : '[danas u] LT', + nextDay : '[sutra u] LT', + + nextWeek : function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[jučer u] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : "za %s", + past : "prije %s", + s : "par sekundi", + m : translate, + mm : translate, + h : translate, + hh : translate, + d : "dan", + dd : translate, + M : "mjesec", + MM : translate, + y : "godinu", + yy : translate + }, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : hungarian (hu) +// author : Adam Brunner : https://github.com/adambrunner + +(function (factory) { + factory(moment); +}(function (moment) { + var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' '); + + function translate(number, withoutSuffix, key, isFuture) { + var num = number, + suffix; + + switch (key) { + case 's': + return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce'; + case 'm': + return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'mm': + return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'h': + return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'hh': + return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'd': + return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'dd': + return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'M': + return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'MM': + return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'y': + return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); + case 'yy': + return num + (isFuture || withoutSuffix ? ' év' : ' éve'); + } + + return ''; + } + + function week(isFuture) { + return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]'; + } + + return moment.defineLocale('hu', { + months : "január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"), + monthsShort : "jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"), + weekdays : "vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"), + weekdaysShort : "vas_hét_kedd_sze_csüt_pén_szo".split("_"), + weekdaysMin : "v_h_k_sze_cs_p_szo".split("_"), + longDateFormat : { + LT : "H:mm", + L : "YYYY.MM.DD.", + LL : "YYYY. MMMM D.", + LLL : "YYYY. MMMM D., LT", + LLLL : "YYYY. MMMM D., dddd LT" + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower === true ? 'de' : 'DE'; + } else { + return isLower === true ? 'du' : 'DU'; + } + }, + calendar : { + sameDay : '[ma] LT[-kor]', + nextDay : '[holnap] LT[-kor]', + nextWeek : function () { + return week.call(this, true); + }, + lastDay : '[tegnap] LT[-kor]', + lastWeek : function () { + return week.call(this, false); + }, + sameElse : 'L' + }, + relativeTime : { + future : "%s múlva", + past : "%s", + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : Armenian (hy-am) +// author : Armendarabyan : https://github.com/armendarabyan + +(function (factory) { + factory(moment); +}(function (moment) { + function monthsCaseReplace(m, format) { + var months = { + 'nominative': 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_'), + 'accusative': 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_') + }, + + nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ? + 'accusative' : + 'nominative'; + + return months[nounCase][m.month()]; + } + + function monthsShortCaseReplace(m, format) { + var monthsShort = 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'); + + return monthsShort[m.month()]; + } + + function weekdaysCaseReplace(m, format) { + var weekdays = 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'); + + return weekdays[m.day()]; + } + + return moment.defineLocale('hy-am', { + months : monthsCaseReplace, + monthsShort : monthsShortCaseReplace, + weekdays : weekdaysCaseReplace, + weekdaysShort : "կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"), + weekdaysMin : "կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY թ.", + LLL : "D MMMM YYYY թ., LT", + LLLL : "dddd, D MMMM YYYY թ., LT" + }, + calendar : { + sameDay: '[այսօր] LT', + nextDay: '[վաղը] LT', + lastDay: '[երեկ] LT', + nextWeek: function () { + return 'dddd [օրը ժամը] LT'; + }, + lastWeek: function () { + return '[անցած] dddd [օրը ժամը] LT'; + }, + sameElse: 'L' + }, + relativeTime : { + future : "%s հետո", + past : "%s առաջ", + s : "մի քանի վայրկյան", + m : "րոպե", + mm : "%d րոպե", + h : "ժամ", + hh : "%d ժամ", + d : "օր", + dd : "%d օր", + M : "ամիս", + MM : "%d ամիս", + y : "տարի", + yy : "%d տարի" + }, + + meridiem : function (hour) { + if (hour < 4) { + return "գիշերվա"; + } else if (hour < 12) { + return "առավոտվա"; + } else if (hour < 17) { + return "ցերեկվա"; + } else { + return "երեկոյան"; + } + }, + + ordinal: function (number, period) { + switch (period) { + case 'DDD': + case 'w': + case 'W': + case 'DDDo': + if (number === 1) { + return number + '-ին'; + } + return number + '-րդ'; + default: + return number; + } + }, + + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : Bahasa Indonesia (id) +// author : Mohammad Satrio Utomo : https://github.com/tyok +// reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('id', { + months : "Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"), + monthsShort : "Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"), + weekdays : "Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"), + weekdaysShort : "Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"), + weekdaysMin : "Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"), + longDateFormat : { + LT : "HH.mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY [pukul] LT", + LLLL : "dddd, D MMMM YYYY [pukul] LT" + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'siang'; + } else if (hours < 19) { + return 'sore'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Besok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kemarin pukul] LT', + lastWeek : 'dddd [lalu pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : "dalam %s", + past : "%s yang lalu", + s : "beberapa detik", + m : "semenit", + mm : "%d menit", + h : "sejam", + hh : "%d jam", + d : "sehari", + dd : "%d hari", + M : "sebulan", + MM : "%d bulan", + y : "setahun", + yy : "%d tahun" + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : icelandic (is) +// author : Hinrik Örn Sigurðsson : https://github.com/hinrik + +(function (factory) { + factory(moment); +}(function (moment) { + function plural(n) { + if (n % 100 === 11) { + return true; + } else if (n % 10 === 1) { + return false; + } + return true; + } + + function translate(number, withoutSuffix, key, isFuture) { + var result = number + " "; + switch (key) { + case 's': + return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum'; + case 'm': + return withoutSuffix ? 'mínúta' : 'mínútu'; + case 'mm': + if (plural(number)) { + return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum'); + } else if (withoutSuffix) { + return result + 'mínúta'; + } + return result + 'mínútu'; + case 'hh': + if (plural(number)) { + return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum'); + } + return result + 'klukkustund'; + case 'd': + if (withoutSuffix) { + return 'dagur'; + } + return isFuture ? 'dag' : 'degi'; + case 'dd': + if (plural(number)) { + if (withoutSuffix) { + return result + 'dagar'; + } + return result + (isFuture ? 'daga' : 'dögum'); + } else if (withoutSuffix) { + return result + 'dagur'; + } + return result + (isFuture ? 'dag' : 'degi'); + case 'M': + if (withoutSuffix) { + return 'mánuður'; + } + return isFuture ? 'mánuð' : 'mánuði'; + case 'MM': + if (plural(number)) { + if (withoutSuffix) { + return result + 'mánuðir'; + } + return result + (isFuture ? 'mánuði' : 'mánuðum'); + } else if (withoutSuffix) { + return result + 'mánuður'; + } + return result + (isFuture ? 'mánuð' : 'mánuði'); + case 'y': + return withoutSuffix || isFuture ? 'ár' : 'ári'; + case 'yy': + if (plural(number)) { + return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); + } + return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); + } + } + + return moment.defineLocale('is', { + months : "janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"), + monthsShort : "jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"), + weekdays : "sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"), + weekdaysShort : "sun_mán_þri_mið_fim_fös_lau".split("_"), + weekdaysMin : "Su_Má_Þr_Mi_Fi_Fö_La".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD/MM/YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY [kl.] LT", + LLLL : "dddd, D. MMMM YYYY [kl.] LT" + }, + calendar : { + sameDay : '[í dag kl.] LT', + nextDay : '[á morgun kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[í gær kl.] LT', + lastWeek : '[síðasta] dddd [kl.] LT', + sameElse : 'L' + }, + relativeTime : { + future : "eftir %s", + past : "fyrir %s síðan", + s : translate, + m : translate, + mm : translate, + h : "klukkustund", + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + ordinal : '%d.', + 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. + } + }); +})); +// moment.js locale configuration +// locale : italian (it) +// author : Lorenzo : https://github.com/aliem +// author: Mattia Larentis: https://github.com/nostalgiaz + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('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("_"), + weekdaysMin : "D_L_Ma_Me_G_V_S".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay: '[Oggi alle] LT', + nextDay: '[Domani alle] LT', + nextWeek: 'dddd [alle] LT', + lastDay: '[Ieri alle] LT', + lastWeek: '[lo scorso] dddd [alle] LT', + sameElse: 'L' + }, + relativeTime : { + future : function (s) { + return ((/^[0-9].+$/).test(s) ? "tra" : "in") + " " + s; + }, + past : "%s fa", + s : "alcuni secondi", + m : "un minuto", + mm : "%d minuti", + h : "un'ora", + hh : "%d ore", + d : "un giorno", + dd : "%d giorni", + M : "un mese", + MM : "%d mesi", + y : "un anno", + yy : "%d anni" + }, + ordinal: '%dº', + 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. + } + }); +})); +// moment.js locale configuration +// locale : japanese (ja) +// author : LI Long : https://github.com/baryon + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('ja', { + months : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), + monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), + weekdays : "日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"), + weekdaysShort : "日_月_火_水_木_金_土".split("_"), + weekdaysMin : "日_月_火_水_木_金_土".split("_"), + longDateFormat : { + LT : "Ah時m分", + L : "YYYY/MM/DD", + LL : "YYYY年M月D日", + LLL : "YYYY年M月D日LT", + LLLL : "YYYY年M月D日LT dddd" + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return "午前"; + } else { + return "午後"; + } + }, + calendar : { + sameDay : '[今日] LT', + nextDay : '[明日] LT', + nextWeek : '[来週]dddd LT', + lastDay : '[昨日] LT', + lastWeek : '[前週]dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s後", + past : "%s前", + s : "数秒", + m : "1分", + mm : "%d分", + h : "1時間", + hh : "%d時間", + d : "1日", + dd : "%d日", + M : "1ヶ月", + MM : "%dヶ月", + y : "1年", + yy : "%d年" + } + }); +})); +// moment.js locale configuration +// locale : Georgian (ka) +// author : Irakli Janiashvili : https://github.com/irakli-janiashvili + +(function (factory) { + factory(moment); +}(function (moment) { + function monthsCaseReplace(m, format) { + var months = { + 'nominative': 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'), + 'accusative': 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_') + }, + + nounCase = (/D[oD] *MMMM?/).test(format) ? + 'accusative' : + 'nominative'; + + return months[nounCase][m.month()]; + } + + function weekdaysCaseReplace(m, format) { + var weekdays = { + 'nominative': 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'), + 'accusative': 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_') + }, + + nounCase = (/(წინა|შემდეგ)/).test(format) ? + 'accusative' : + 'nominative'; + + return weekdays[nounCase][m.day()]; + } + + return moment.defineLocale('ka', { + months : monthsCaseReplace, + monthsShort : "იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"), + weekdays : weekdaysCaseReplace, + weekdaysShort : "კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"), + weekdaysMin : "კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"), + longDateFormat : { + LT : "h:mm A", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[დღეს] LT[-ზე]', + nextDay : '[ხვალ] LT[-ზე]', + lastDay : '[გუშინ] LT[-ზე]', + nextWeek : '[შემდეგ] dddd LT[-ზე]', + lastWeek : '[წინა] dddd LT-ზე', + sameElse : 'L' + }, + relativeTime : { + future : function (s) { + return (/(წამი|წუთი|საათი|წელი)/).test(s) ? + s.replace(/ი$/, "ში") : + s + "ში"; + }, + past : function (s) { + if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) { + return s.replace(/(ი|ე)$/, "ის წინ"); + } + if ((/წელი/).test(s)) { + return s.replace(/წელი$/, "წლის წინ"); + } + }, + s : "რამდენიმე წამი", + m : "წუთი", + mm : "%d წუთი", + h : "საათი", + hh : "%d საათი", + d : "დღე", + dd : "%d დღე", + M : "თვე", + MM : "%d თვე", + y : "წელი", + yy : "%d წელი" + }, + ordinal : function (number) { + if (number === 0) { + return number; + } + + if (number === 1) { + return number + "-ლი"; + } + + if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) { + return "მე-" + number; + } + + return number + "-ე"; + }, + week : { + dow : 1, + doy : 7 + } + }); +})); +// moment.js locale configuration +// locale : khmer (km) +// author : Kruy Vanna : https://github.com/kruyvanna + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('km', { + months: "មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"), + monthsShort: "មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"), + weekdays: "អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"), + weekdaysShort: "អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"), + weekdaysMin: "អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"), + longDateFormat: { + LT: "HH:mm", + L: "DD/MM/YYYY", + LL: "D MMMM YYYY", + LLL: "D MMMM YYYY LT", + LLLL: "dddd, D MMMM YYYY LT" + }, + calendar: { + sameDay: '[ថ្ងៃនៈ ម៉ោង] LT', + nextDay: '[ស្អែក ម៉ោង] LT', + nextWeek: 'dddd [ម៉ោង] LT', + lastDay: '[ម្សិលមិញ ម៉ោង] LT', + lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT', + sameElse: 'L' + }, + relativeTime: { + future: "%sទៀត", + past: "%sមុន", + s: "ប៉ុន្មានវិនាទី", + m: "មួយនាទី", + mm: "%d នាទី", + h: "មួយម៉ោង", + hh: "%d ម៉ោង", + d: "មួយថ្ងៃ", + dd: "%d ថ្ងៃ", + M: "មួយខែ", + MM: "%d ខែ", + y: "មួយឆ្នាំ", + yy: "%d ឆ្នាំ" + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : korean (ko) +// +// authors +// +// - Kyungwook, Park : https://github.com/kyungw00k +// - Jeeeyul Lee +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('ko', { + months : "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"), + monthsShort : "1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"), + weekdays : "일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"), + weekdaysShort : "일_월_화_수_목_금_토".split("_"), + weekdaysMin : "일_월_화_수_목_금_토".split("_"), + longDateFormat : { + LT : "A h시 mm분", + L : "YYYY.MM.DD", + LL : "YYYY년 MMMM D일", + LLL : "YYYY년 MMMM D일 LT", + LLLL : "YYYY년 MMMM D일 dddd LT" + }, + meridiem : function (hour, minute, isUpper) { + return hour < 12 ? '오전' : '오후'; + }, + calendar : { + sameDay : '오늘 LT', + nextDay : '내일 LT', + nextWeek : 'dddd LT', + lastDay : '어제 LT', + lastWeek : '지난주 dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s 후", + past : "%s 전", + s : "몇초", + ss : "%d초", + m : "일분", + mm : "%d분", + h : "한시간", + hh : "%d시간", + d : "하루", + dd : "%d일", + M : "한달", + MM : "%d달", + y : "일년", + yy : "%d년" + }, + ordinal : '%d일', + meridiemParse : /(오전|오후)/, + isPM : function (token) { + return token === "오후"; + } + }); +})); +// moment.js locale configuration +// locale : Luxembourgish (lb) +// author : mweimerskirch : https://github.com/mweimerskirch, David Raison : https://github.com/kwisatz + +// Note: Luxembourgish has a very particular phonological rule ("Eifeler Regel") that causes the +// deletion of the final "n" in certain contexts. That's what the "eifelerRegelAppliesToWeekday" +// and "eifelerRegelAppliesToNumber" methods are meant for + +(function (factory) { + factory(moment); +}(function (moment) { + function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eng Minutt', 'enger Minutt'], + 'h': ['eng Stonn', 'enger Stonn'], + 'd': ['een Dag', 'engem Dag'], + 'M': ['ee Mount', 'engem Mount'], + 'y': ['ee Joer', 'engem Joer'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + function processFutureTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return "a " + string; + } + return "an " + string; + } + + function processPastTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return "viru " + string; + } + return "virun " + string; + } + + /** + * Returns true if the word before the given number loses the "-n" ending. + * e.g. "an 10 Deeg" but "a 5 Deeg" + * + * @param number {integer} + * @returns {boolean} + */ + function eifelerRegelAppliesToNumber(number) { + number = parseInt(number, 10); + if (isNaN(number)) { + return false; + } + if (number < 0) { + // Negative Number --> always true + return true; + } else if (number < 10) { + // Only 1 digit + if (4 <= number && number <= 7) { + return true; + } + return false; + } else if (number < 100) { + // 2 digits + var lastDigit = number % 10, firstDigit = number / 10; + if (lastDigit === 0) { + return eifelerRegelAppliesToNumber(firstDigit); + } + return eifelerRegelAppliesToNumber(lastDigit); + } else if (number < 10000) { + // 3 or 4 digits --> recursively check first digit + while (number >= 10) { + number = number / 10; + } + return eifelerRegelAppliesToNumber(number); + } else { + // Anything larger than 4 digits: recursively check first n-3 digits + number = number / 1000; + return eifelerRegelAppliesToNumber(number); + } + } + + return moment.defineLocale('lb', { + months: "Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"), + monthsShort: "Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"), + weekdays: "Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"), + weekdaysShort: "So._Mé._Dë._Më._Do._Fr._Sa.".split("_"), + weekdaysMin: "So_Mé_Dë_Më_Do_Fr_Sa".split("_"), + longDateFormat: { + LT: "H:mm [Auer]", + L: "DD.MM.YYYY", + LL: "D. MMMM YYYY", + LLL: "D. MMMM YYYY LT", + LLLL: "dddd, D. MMMM YYYY LT" + }, + calendar: { + sameDay: "[Haut um] LT", + sameElse: "L", + nextDay: '[Muer um] LT', + nextWeek: 'dddd [um] LT', + lastDay: '[Gëschter um] LT', + lastWeek: function () { + // Different date string for "Dënschdeg" (Tuesday) and "Donneschdeg" (Thursday) due to phonological rule + switch (this.day()) { + case 2: + case 4: + return '[Leschten] dddd [um] LT'; + default: + return '[Leschte] dddd [um] LT'; + } + } + }, + relativeTime : { + future : processFutureTime, + past : processPastTime, + s : "e puer Sekonnen", + m : processRelativeTime, + mm : "%d Minutten", + h : processRelativeTime, + hh : "%d Stonnen", + d : processRelativeTime, + dd : "%d Deeg", + M : processRelativeTime, + MM : "%d Méint", + y : processRelativeTime, + yy : "%d Joer" + }, + ordinal: '%d.', + 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. + } + }); +})); +// moment.js locale configuration +// locale : Lithuanian (lt) +// author : Mindaugas Mozūras : https://github.com/mmozuras + +(function (factory) { + factory(moment); +}(function (moment) { + var units = { + "m" : "minutė_minutės_minutę", + "mm": "minutės_minučių_minutes", + "h" : "valanda_valandos_valandą", + "hh": "valandos_valandų_valandas", + "d" : "diena_dienos_dieną", + "dd": "dienos_dienų_dienas", + "M" : "mėnuo_mėnesio_mėnesį", + "MM": "mėnesiai_mėnesių_mėnesius", + "y" : "metai_metų_metus", + "yy": "metai_metų_metus" + }, + weekDays = "sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"); + + function translateSeconds(number, withoutSuffix, key, isFuture) { + if (withoutSuffix) { + return "kelios sekundės"; + } else { + return isFuture ? "kelių sekundžių" : "kelias sekundes"; + } + } + + function translateSingular(number, withoutSuffix, key, isFuture) { + return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]); + } + + function special(number) { + return number % 10 === 0 || (number > 10 && number < 20); + } + + function forms(key) { + return units[key].split("_"); + } + + function translate(number, withoutSuffix, key, isFuture) { + var result = number + " "; + if (number === 1) { + return result + translateSingular(number, withoutSuffix, key[0], isFuture); + } else if (withoutSuffix) { + return result + (special(number) ? forms(key)[1] : forms(key)[0]); + } else { + if (isFuture) { + return result + forms(key)[1]; + } else { + return result + (special(number) ? forms(key)[1] : forms(key)[2]); + } + } + } + + function relativeWeekDay(moment, format) { + var nominative = format.indexOf('dddd HH:mm') === -1, + weekDay = weekDays[moment.day()]; + + return nominative ? weekDay : weekDay.substring(0, weekDay.length - 2) + "į"; + } + + return moment.defineLocale("lt", { + months : "sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"), + monthsShort : "sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"), + weekdays : relativeWeekDay, + weekdaysShort : "Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"), + weekdaysMin : "S_P_A_T_K_Pn_Š".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "YYYY-MM-DD", + LL : "YYYY [m.] MMMM D [d.]", + LLL : "YYYY [m.] MMMM D [d.], LT [val.]", + LLLL : "YYYY [m.] MMMM D [d.], dddd, LT [val.]", + l : "YYYY-MM-DD", + ll : "YYYY [m.] MMMM D [d.]", + lll : "YYYY [m.] MMMM D [d.], LT [val.]", + llll : "YYYY [m.] MMMM D [d.], ddd, LT [val.]" + }, + calendar : { + sameDay : "[Šiandien] LT", + nextDay : "[Rytoj] LT", + nextWeek : "dddd LT", + lastDay : "[Vakar] LT", + lastWeek : "[Praėjusį] dddd LT", + sameElse : "L" + }, + relativeTime : { + future : "po %s", + past : "prieš %s", + s : translateSeconds, + m : translateSingular, + mm : translate, + h : translateSingular, + hh : translate, + d : translateSingular, + dd : translate, + M : translateSingular, + MM : translate, + y : translateSingular, + yy : translate + }, + ordinal : function (number) { + return number + '-oji'; + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : latvian (lv) +// author : Kristaps Karlsons : https://github.com/skakri + +(function (factory) { + factory(moment); +}(function (moment) { + var units = { + 'mm': 'minūti_minūtes_minūte_minūtes', + 'hh': 'stundu_stundas_stunda_stundas', + 'dd': 'dienu_dienas_diena_dienas', + 'MM': 'mēnesi_mēnešus_mēnesis_mēneši', + 'yy': 'gadu_gadus_gads_gadi' + }; + + function format(word, number, withoutSuffix) { + var forms = word.split('_'); + if (withoutSuffix) { + return number % 10 === 1 && number !== 11 ? forms[2] : forms[3]; + } else { + return number % 10 === 1 && number !== 11 ? forms[0] : forms[1]; + } + } + + function relativeTimeWithPlural(number, withoutSuffix, key) { + return number + ' ' + format(units[key], number, withoutSuffix); + } + + return moment.defineLocale('lv', { + months : "janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"), + monthsShort : "jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"), + weekdays : "svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"), + weekdaysShort : "Sv_P_O_T_C_Pk_S".split("_"), + weekdaysMin : "Sv_P_O_T_C_Pk_S".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "YYYY. [gada] D. MMMM", + LLL : "YYYY. [gada] D. MMMM, LT", + LLLL : "YYYY. [gada] D. MMMM, dddd, LT" + }, + calendar : { + sameDay : '[Šodien pulksten] LT', + nextDay : '[Rīt pulksten] LT', + nextWeek : 'dddd [pulksten] LT', + lastDay : '[Vakar pulksten] LT', + lastWeek : '[Pagājušā] dddd [pulksten] LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s vēlāk", + past : "%s agrāk", + s : "dažas sekundes", + m : "minūti", + mm : relativeTimeWithPlural, + h : "stundu", + hh : relativeTimeWithPlural, + d : "dienu", + dd : relativeTimeWithPlural, + M : "mēnesi", + MM : relativeTimeWithPlural, + y : "gadu", + yy : relativeTimeWithPlural + }, + ordinal : '%d.', + 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. + } + }); +})); +// moment.js locale configuration +// locale : macedonian (mk) +// author : Borislav Mickov : https://github.com/B0k0 + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('mk', { + months : "јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"), + monthsShort : "јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"), + weekdays : "недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"), + weekdaysShort : "нед_пон_вто_сре_чет_пет_саб".split("_"), + weekdaysMin : "нe_пo_вт_ср_че_пе_сa".split("_"), + longDateFormat : { + LT : "H:mm", + L : "D.MM.YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[Денес во] LT', + nextDay : '[Утре во] LT', + nextWeek : 'dddd [во] LT', + lastDay : '[Вчера во] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[Во изминатата] dddd [во] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Во изминатиот] dddd [во] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : "после %s", + past : "пред %s", + s : "неколку секунди", + m : "минута", + mm : "%d минути", + h : "час", + hh : "%d часа", + d : "ден", + dd : "%d дена", + M : "месец", + MM : "%d месеци", + y : "година", + yy : "%d години" + }, + ordinal : function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : malayalam (ml) +// author : Floyd Pink : https://github.com/floydpink + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('ml', { + months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split("_"), + monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split("_"), + weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split("_"), + weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split("_"), + weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split("_"), + longDateFormat : { + LT : "A h:mm -നു", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY, LT", + LLLL : "dddd, D MMMM YYYY, LT" + }, + calendar : { + sameDay : '[ഇന്ന്] LT', + nextDay : '[നാളെ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ഇന്നലെ] LT', + lastWeek : '[കഴിഞ്ഞ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s കഴിഞ്ഞ്", + past : "%s മുൻപ്", + s : "അൽപ നിമിഷങ്ങൾ", + m : "ഒരു മിനിറ്റ്", + mm : "%d മിനിറ്റ്", + h : "ഒരു മണിക്കൂർ", + hh : "%d മണിക്കൂർ", + d : "ഒരു ദിവസം", + dd : "%d ദിവസം", + M : "ഒരു മാസം", + MM : "%d മാസം", + y : "ഒരു വർഷം", + yy : "%d വർഷം" + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "രാത്രി"; + } else if (hour < 12) { + return "രാവിലെ"; + } else if (hour < 17) { + return "ഉച്ച കഴിഞ്ഞ്"; + } else if (hour < 20) { + return "വൈകുന്നേരം"; + } else { + return "രാത്രി"; + } + } + }); +})); +// moment.js locale configuration +// locale : Marathi (mr) +// author : Harshad Kale : https://github.com/kalehv + +(function (factory) { + factory(moment); +}(function (moment) { + var symbolMap = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' + }, + numberMap = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' + }; + + return moment.defineLocale('mr', { + months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split("_"), + monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split("_"), + weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split("_"), + weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split("_"), + weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split("_"), + longDateFormat : { + LT : "A h:mm वाजता", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY, LT", + LLLL : "dddd, D MMMM YYYY, LT" + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[उद्या] LT', + nextWeek : 'dddd, LT', + lastDay : '[काल] LT', + lastWeek: '[मागील] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s नंतर", + past : "%s पूर्वी", + s : "सेकंद", + m: "एक मिनिट", + mm: "%d मिनिटे", + h : "एक तास", + hh : "%d तास", + d : "एक दिवस", + dd : "%d दिवस", + M : "एक महिना", + MM : "%d महिने", + y : "एक वर्ष", + yy : "%d वर्षे" + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiem: function (hour, minute, isLower) + { + if (hour < 4) { + return "रात्री"; + } else if (hour < 10) { + return "सकाळी"; + } else if (hour < 17) { + return "दुपारी"; + } else if (hour < 20) { + return "सायंकाळी"; + } else { + return "रात्री"; + } + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : Bahasa Malaysia (ms-MY) +// author : Weldan Jamili : https://github.com/weldan + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('ms-my', { + months : "Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"), + monthsShort : "Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"), + weekdays : "Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"), + weekdaysShort : "Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"), + weekdaysMin : "Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"), + longDateFormat : { + LT : "HH.mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY [pukul] LT", + LLLL : "dddd, D MMMM YYYY [pukul] LT" + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Esok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kelmarin pukul] LT', + lastWeek : 'dddd [lepas pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : "dalam %s", + past : "%s yang lepas", + s : "beberapa saat", + m : "seminit", + mm : "%d minit", + h : "sejam", + hh : "%d jam", + d : "sehari", + dd : "%d hari", + M : "sebulan", + MM : "%d bulan", + y : "setahun", + yy : "%d tahun" + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : Burmese (my) +// author : Squar team, mysquar.com + +(function (factory) { + factory(moment); +}(function (moment) { + var symbolMap = { + '1': '၁', + '2': '၂', + '3': '၃', + '4': '၄', + '5': '၅', + '6': '၆', + '7': '၇', + '8': '၈', + '9': '၉', + '0': '၀' + }, numberMap = { + '၁': '1', + '၂': '2', + '၃': '3', + '၄': '4', + '၅': '5', + '၆': '6', + '၇': '7', + '၈': '8', + '၉': '9', + '၀': '0' + }; + return moment.defineLocale('my', { + months: "ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"), + monthsShort: "ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"), + weekdays: "တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"), + weekdaysShort: "နွေ_လာ_င်္ဂါ_ဟူး_ကြာ_သော_နေ".split("_"), + weekdaysMin: "နွေ_လာ_င်္ဂါ_ဟူး_ကြာ_သော_နေ".split("_"), + longDateFormat: { + LT: "HH:mm", + L: "DD/MM/YYYY", + LL: "D MMMM YYYY", + LLL: "D MMMM YYYY LT", + LLLL: "dddd D MMMM YYYY LT" + }, + calendar: { + sameDay: '[ယနေ.] LT [မှာ]', + nextDay: '[မနက်ဖြန်] LT [မှာ]', + nextWeek: 'dddd LT [မှာ]', + lastDay: '[မနေ.က] LT [မှာ]', + lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]', + sameElse: 'L' + }, + relativeTime: { + future: "လာမည့် %s မှာ", + past: "လွန်ခဲ့သော %s က", + s: "စက္ကန်.အနည်းငယ်", + m: "တစ်မိနစ်", + mm: "%d မိနစ်", + h: "တစ်နာရီ", + hh: "%d နာရီ", + d: "တစ်ရက်", + dd: "%d ရက်", + M: "တစ်လ", + MM: "%d လ", + y: "တစ်နှစ်", + yy: "%d နှစ်" + }, + preparse: function (string) { + return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : norwegian bokmål (nb) +// authors : Espen Hovlandsdal : https://github.com/rexxars +// Sigurd Gartmann : https://github.com/sigurdga + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('nb', { + 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ø._ma._ti._on._to._fr._lø.".split("_"), + weekdaysMin : "sø_ma_ti_on_to_fr_lø".split("_"), + longDateFormat : { + LT : "H.mm", + L : "DD.MM.YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY [kl.] LT", + LLLL : "dddd D. MMMM YYYY [kl.] LT" + }, + calendar : { + sameDay: '[i dag kl.] LT', + nextDay: '[i morgen kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[i går kl.] LT', + lastWeek: '[forrige] dddd [kl.] LT', + sameElse: 'L' + }, + relativeTime : { + future : "om %s", + past : "for %s siden", + s : "noen sekunder", + m : "ett minutt", + mm : "%d minutter", + h : "en time", + hh : "%d timer", + d : "en dag", + dd : "%d dager", + M : "en måned", + MM : "%d måneder", + y : "ett år", + yy : "%d år" + }, + ordinal : '%d.', + 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. + } + }); +})); +// moment.js locale configuration +// locale : nepali/nepalese +// author : suvash : https://github.com/suvash + +(function (factory) { + factory(moment); +}(function (moment) { + var symbolMap = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' + }, + numberMap = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' + }; + + return moment.defineLocale('ne', { + months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split("_"), + monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split("_"), + weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split("_"), + weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split("_"), + weekdaysMin : 'आइ._सो._मङ्_बु._बि._शु._श.'.split("_"), + longDateFormat : { + LT : "Aको h:mm बजे", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY, LT", + LLLL : "dddd, D MMMM YYYY, LT" + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 3) { + return "राती"; + } else if (hour < 10) { + return "बिहान"; + } else if (hour < 15) { + return "दिउँसो"; + } else if (hour < 18) { + return "बेलुका"; + } else if (hour < 20) { + return "साँझ"; + } else { + return "राती"; + } + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[भोली] LT', + nextWeek : '[आउँदो] dddd[,] LT', + lastDay : '[हिजो] LT', + lastWeek : '[गएको] dddd[,] LT', + sameElse : 'L' + }, + relativeTime : { + future : "%sमा", + past : "%s अगाडी", + s : "केही समय", + m : "एक मिनेट", + mm : "%d मिनेट", + h : "एक घण्टा", + hh : "%d घण्टा", + d : "एक दिन", + dd : "%d दिन", + M : "एक महिना", + MM : "%d महिना", + y : "एक बर्ष", + yy : "%d बर्ष" + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : dutch (nl) +// author : Joris Röling : https://github.com/jjupiter + +(function (factory) { + factory(moment); +}(function (moment) { + var monthsShortWithDots = "jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"), + monthsShortWithoutDots = "jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"); + + return moment.defineLocale('nl', { + months : "januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"), + monthsShort : function (m, format) { + if (/-MMM-/.test(format)) { + return monthsShortWithoutDots[m.month()]; + } else { + return monthsShortWithDots[m.month()]; + } + }, + weekdays : "zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"), + weekdaysShort : "zo._ma._di._wo._do._vr._za.".split("_"), + weekdaysMin : "Zo_Ma_Di_Wo_Do_Vr_Za".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD-MM-YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : "over %s", + past : "%s geleden", + s : "een paar seconden", + m : "één minuut", + mm : "%d minuten", + h : "één uur", + hh : "%d uur", + d : "één dag", + dd : "%d dagen", + M : "één maand", + MM : "%d maanden", + y : "één jaar", + yy : "%d jaar" + }, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : norwegian nynorsk (nn) +// author : https://github.com/mechuwind + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('nn', { + months : "januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"), + monthsShort : "jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"), + weekdays : "sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"), + weekdaysShort : "sun_mån_tys_ons_tor_fre_lau".split("_"), + weekdaysMin : "su_må_ty_on_to_fr_lø".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: '[I dag klokka] LT', + nextDay: '[I morgon klokka] LT', + nextWeek: 'dddd [klokka] LT', + lastDay: '[I går klokka] LT', + lastWeek: '[Føregåande] dddd [klokka] LT', + sameElse: 'L' + }, + relativeTime : { + future : "om %s", + past : "for %s sidan", + s : "nokre sekund", + m : "eit minutt", + mm : "%d minutt", + h : "ein time", + hh : "%d timar", + d : "ein dag", + dd : "%d dagar", + M : "ein månad", + MM : "%d månader", + y : "eit år", + yy : "%d år" + }, + ordinal : '%d.', + 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. + } + }); +})); +// moment.js locale configuration +// locale : polish (pl) +// author : Rafal Hirsz : https://github.com/evoL + +(function (factory) { + factory(moment); +}(function (moment) { + var monthsNominative = "styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"), + monthsSubjective = "stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"); + + function plural(n) { + return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1); + } + + function translate(number, withoutSuffix, key) { + var result = number + " "; + switch (key) { + case 'm': + return withoutSuffix ? 'minuta' : 'minutę'; + case 'mm': + return result + (plural(number) ? 'minuty' : 'minut'); + case 'h': + return withoutSuffix ? 'godzina' : 'godzinę'; + case 'hh': + return result + (plural(number) ? 'godziny' : 'godzin'); + case 'MM': + return result + (plural(number) ? 'miesiące' : 'miesięcy'); + case 'yy': + return result + (plural(number) ? 'lata' : 'lat'); + } + } + + return moment.defineLocale('pl', { + months : function (momentToFormat, format) { + if (/D MMMM/.test(format)) { + return monthsSubjective[momentToFormat.month()]; + } else { + return monthsNominative[momentToFormat.month()]; + } + }, + monthsShort : "sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"), + weekdays : "niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"), + weekdaysShort : "nie_pon_wt_śr_czw_pt_sb".split("_"), + weekdaysMin : "N_Pn_Wt_Śr_Cz_Pt_So".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay: '[Dziś o] LT', + nextDay: '[Jutro o] LT', + nextWeek: '[W] dddd [o] LT', + lastDay: '[Wczoraj o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[W zeszłą niedzielę o] LT'; + case 3: + return '[W zeszłą środę o] LT'; + case 6: + return '[W zeszłą sobotę o] LT'; + default: + return '[W zeszły] dddd [o] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : "za %s", + past : "%s temu", + s : "kilka sekund", + m : translate, + mm : translate, + h : translate, + hh : translate, + d : "1 dzień", + dd : '%d dni', + M : "miesiąc", + MM : translate, + y : "rok", + yy : translate + }, + ordinal : '%d.', + 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. + } + }); +})); +// moment.js locale configuration +// locale : brazilian portuguese (pt-br) +// author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('pt-br', { + 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("_"), + weekdaysMin : "dom_2ª_3ª_4ª_5ª_6ª_sáb".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D [de] MMMM [de] YYYY", + LLL : "D [de] MMMM [de] YYYY [às] LT", + LLLL : "dddd, D [de] MMMM [de] YYYY [às] LT" + }, + calendar : { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return (this.day() === 0 || this.day() === 6) ? + '[Último] dddd [às] LT' : // Saturday + Sunday + '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L' + }, + relativeTime : { + future : "em %s", + past : "%s atrás", + s : "segundos", + m : "um minuto", + mm : "%d minutos", + h : "uma hora", + hh : "%d horas", + d : "um dia", + dd : "%d dias", + M : "um mês", + MM : "%d meses", + y : "um ano", + yy : "%d anos" + }, + ordinal : '%dº' + }); +})); +// moment.js locale configuration +// locale : portuguese (pt) +// author : Jefferson : https://github.com/jalex79 + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('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("_"), + weekdaysMin : "dom_2ª_3ª_4ª_5ª_6ª_sáb".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D [de] MMMM [de] YYYY", + LLL : "D [de] MMMM [de] YYYY LT", + LLLL : "dddd, D [de] MMMM [de] YYYY LT" + }, + calendar : { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return (this.day() === 0 || this.day() === 6) ? + '[Último] dddd [às] LT' : // Saturday + Sunday + '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L' + }, + relativeTime : { + future : "em %s", + past : "há %s", + s : "segundos", + m : "um minuto", + mm : "%d minutos", + h : "uma hora", + hh : "%d horas", + d : "um dia", + dd : "%d dias", + M : "um mês", + MM : "%d meses", + y : "um ano", + yy : "%d anos" + }, + ordinal : '%dº', + 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. + } + }); +})); +// moment.js locale configuration +// locale : romanian (ro) +// author : Vlad Gurdiga : https://github.com/gurdiga +// author : Valentin Agachi : https://github.com/avaly + +(function (factory) { + factory(moment); +}(function (moment) { + function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': 'minute', + 'hh': 'ore', + 'dd': 'zile', + 'MM': 'luni', + 'yy': 'ani' + }, + separator = ' '; + if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) { + separator = ' de '; + } + + return number + separator + format[key]; + } + + return moment.defineLocale('ro', { + months : "ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"), + monthsShort : "ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"), + weekdays : "duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"), + weekdaysShort : "Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"), + weekdaysMin : "Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY H:mm", + LLLL : "dddd, D MMMM YYYY H:mm" + }, + calendar : { + sameDay: "[azi la] LT", + nextDay: '[mâine la] LT', + nextWeek: 'dddd [la] LT', + lastDay: '[ieri la] LT', + lastWeek: '[fosta] dddd [la] LT', + sameElse: 'L' + }, + relativeTime : { + future : "peste %s", + past : "%s în urmă", + s : "câteva secunde", + m : "un minut", + mm : relativeTimeWithPlural, + h : "o oră", + hh : relativeTimeWithPlural, + d : "o zi", + dd : relativeTimeWithPlural, + M : "o lună", + MM : relativeTimeWithPlural, + y : "un an", + yy : relativeTimeWithPlural + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : russian (ru) +// author : Viktorminator : https://github.com/Viktorminator +// Author : Menelion Elensúle : https://github.com/Oire + +(function (factory) { + factory(moment); +}(function (moment) { + function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); + } + + function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут', + 'hh': 'час_часа_часов', + 'dd': 'день_дня_дней', + 'MM': 'месяц_месяца_месяцев', + 'yy': 'год_года_лет' + }; + if (key === 'm') { + return withoutSuffix ? 'минута' : 'минуту'; + } + else { + return number + ' ' + plural(format[key], +number); + } + } + + function monthsCaseReplace(m, format) { + var months = { + 'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), + 'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_') + }, + + nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ? + 'accusative' : + 'nominative'; + + return months[nounCase][m.month()]; + } + + function monthsShortCaseReplace(m, format) { + var monthsShort = { + 'nominative': 'янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), + 'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_') + }, + + nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ? + 'accusative' : + 'nominative'; + + return monthsShort[nounCase][m.month()]; + } + + function weekdaysCaseReplace(m, format) { + var weekdays = { + 'nominative': 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'), + 'accusative': 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_') + }, + + nounCase = (/\[ ?[Вв] ?(?:прошлую|следующую)? ?\] ?dddd/).test(format) ? + 'accusative' : + 'nominative'; + + return weekdays[nounCase][m.day()]; + } + + return moment.defineLocale('ru', { + months : monthsCaseReplace, + monthsShort : monthsShortCaseReplace, + weekdays : weekdaysCaseReplace, + weekdaysShort : "вс_пн_вт_ср_чт_пт_сб".split("_"), + weekdaysMin : "вс_пн_вт_ср_чт_пт_сб".split("_"), + monthsParse : [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[й|я]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i], + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY г.", + LLL : "D MMMM YYYY г., LT", + LLLL : "dddd, D MMMM YYYY г., LT" + }, + calendar : { + sameDay: '[Сегодня в] LT', + nextDay: '[Завтра в] LT', + lastDay: '[Вчера в] LT', + nextWeek: function () { + return this.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT'; + }, + lastWeek: function () { + switch (this.day()) { + case 0: + return '[В прошлое] dddd [в] LT'; + case 1: + case 2: + case 4: + return '[В прошлый] dddd [в] LT'; + case 3: + case 5: + case 6: + return '[В прошлую] dddd [в] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : "через %s", + past : "%s назад", + s : "несколько секунд", + m : relativeTimeWithPlural, + mm : relativeTimeWithPlural, + h : "час", + hh : relativeTimeWithPlural, + d : "день", + dd : relativeTimeWithPlural, + M : "месяц", + MM : relativeTimeWithPlural, + y : "год", + yy : relativeTimeWithPlural + }, + + meridiemParse: /ночи|утра|дня|вечера/i, + isPM : function (input) { + return /^(дня|вечера)$/.test(input); + }, + + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "ночи"; + } else if (hour < 12) { + return "утра"; + } else if (hour < 17) { + return "дня"; + } else { + return "вечера"; + } + }, + + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + return number + '-й'; + case 'D': + return number + '-го'; + case 'w': + case 'W': + return number + '-я'; + default: + return number; + } + }, + + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : slovak (sk) +// author : Martin Minka : https://github.com/k2s +// based on work of petrbela : https://github.com/petrbela + +(function (factory) { + factory(moment); +}(function (moment) { + var months = "január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"), + monthsShort = "jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"); + + function plural(n) { + return (n > 1) && (n < 5); + } + + function translate(number, withoutSuffix, key, isFuture) { + var result = number + " "; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami'; + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou'); + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'minúty' : 'minút'); + } else { + return result + 'minútami'; + } + break; + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'hodiny' : 'hodín'); + } else { + return result + 'hodinami'; + } + break; + case 'd': // a day / in a day / a day ago + return (withoutSuffix || isFuture) ? 'deň' : 'dňom'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'dni' : 'dní'); + } else { + return result + 'dňami'; + } + break; + case 'M': // a month / in a month / a month ago + return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'mesiace' : 'mesiacov'); + } else { + return result + 'mesiacmi'; + } + break; + case 'y': // a year / in a year / a year ago + return (withoutSuffix || isFuture) ? 'rok' : 'rokom'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'roky' : 'rokov'); + } else { + return result + 'rokmi'; + } + break; + } + } + + return moment.defineLocale('sk', { + months : months, + monthsShort : monthsShort, + monthsParse : (function (months, monthsShort) { + var i, _monthsParse = []; + for (i = 0; i < 12; i++) { + // use custom parser to solve problem with July (červenec) + _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); + } + return _monthsParse; + }(months, monthsShort)), + weekdays : "nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"), + weekdaysShort : "ne_po_ut_st_št_pi_so".split("_"), + weekdaysMin : "ne_po_ut_st_št_pi_so".split("_"), + longDateFormat : { + LT: "H:mm", + L : "DD.MM.YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd D. MMMM YYYY LT" + }, + calendar : { + sameDay: "[dnes o] LT", + nextDay: '[zajtra o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v nedeľu o] LT'; + case 1: + case 2: + return '[v] dddd [o] LT'; + case 3: + return '[v stredu o] LT'; + case 4: + return '[vo štvrtok o] LT'; + case 5: + return '[v piatok o] LT'; + case 6: + return '[v sobotu o] LT'; + } + }, + lastDay: '[včera o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulú nedeľu o] LT'; + case 1: + case 2: + return '[minulý] dddd [o] LT'; + case 3: + return '[minulú stredu o] LT'; + case 4: + case 5: + return '[minulý] dddd [o] LT'; + case 6: + return '[minulú sobotu o] LT'; + } + }, + sameElse: "L" + }, + relativeTime : { + future : "za %s", + past : "pred %s", + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + ordinal : '%d.', + 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. + } + }); +})); +// moment.js locale configuration +// locale : slovenian (sl) +// author : Robert Sedovšek : https://github.com/sedovsek + +(function (factory) { + factory(moment); +}(function (moment) { + function translate(number, withoutSuffix, key) { + var result = number + " "; + switch (key) { + case 'm': + return withoutSuffix ? 'ena minuta' : 'eno minuto'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2) { + result += 'minuti'; + } else if (number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minut'; + } + return result; + case 'h': + return withoutSuffix ? 'ena ura' : 'eno uro'; + case 'hh': + if (number === 1) { + result += 'ura'; + } else if (number === 2) { + result += 'uri'; + } else if (number === 3 || number === 4) { + result += 'ure'; + } else { + result += 'ur'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dni'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mesec'; + } else if (number === 2) { + result += 'meseca'; + } else if (number === 3 || number === 4) { + result += 'mesece'; + } else { + result += 'mesecev'; + } + return result; + case 'yy': + if (number === 1) { + result += 'leto'; + } else if (number === 2) { + result += 'leti'; + } else if (number === 3 || number === 4) { + result += 'leta'; + } else { + result += 'let'; + } + return result; + } + } + + return moment.defineLocale('sl', { + months : "januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"), + monthsShort : "jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"), + weekdays : "nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"), + weekdaysShort : "ned._pon._tor._sre._čet._pet._sob.".split("_"), + weekdaysMin : "ne_po_to_sr_če_pe_so".split("_"), + longDateFormat : { + LT : "H:mm", + L : "DD. MM. YYYY", + LL : "D. MMMM YYYY", + LLL : "D. MMMM YYYY LT", + LLLL : "dddd, D. MMMM YYYY LT" + }, + calendar : { + sameDay : '[danes ob] LT', + nextDay : '[jutri ob] LT', + + nextWeek : function () { + switch (this.day()) { + case 0: + return '[v] [nedeljo] [ob] LT'; + case 3: + return '[v] [sredo] [ob] LT'; + case 6: + return '[v] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[v] dddd [ob] LT'; + } + }, + lastDay : '[včeraj ob] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[prejšnja] dddd [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prejšnji] dddd [ob] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : "čez %s", + past : "%s nazaj", + s : "nekaj sekund", + m : translate, + mm : translate, + h : translate, + hh : translate, + d : "en dan", + dd : translate, + M : "en mesec", + MM : translate, + y : "eno leto", + yy : translate + }, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : Albanian (sq) +// author : Flakërim Ismani : https://github.com/flakerimi +// author: Menelion Elensúle: https://github.com/Oire (tests) +// author : Oerd Cukalla : https://github.com/oerd (fixes) + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('sq', { + months : "Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"), + monthsShort : "Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"), + weekdays : "E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"), + weekdaysShort : "Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"), + weekdaysMin : "D_H_Ma_Më_E_P_Sh".split("_"), + meridiem : function (hours, minutes, isLower) { + return hours < 12 ? 'PD' : 'MD'; + }, + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[Sot në] LT', + nextDay : '[Nesër në] LT', + nextWeek : 'dddd [në] LT', + lastDay : '[Dje në] LT', + lastWeek : 'dddd [e kaluar në] LT', + sameElse : 'L' + }, + relativeTime : { + future : "në %s", + past : "%s më parë", + s : "disa sekonda", + m : "një minutë", + mm : "%d minuta", + h : "një orë", + hh : "%d orë", + d : "një ditë", + dd : "%d ditë", + M : "një muaj", + MM : "%d muaj", + y : "një vit", + yy : "%d vite" + }, + ordinal : '%d.', + 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. + } + }); +})); +// moment.js locale configuration +// locale : Serbian-cyrillic (sr-cyrl) +// author : Milan Janačković : https://github.com/milan-j + +(function (factory) { + factory(moment); +}(function (moment) { + var translator = { + words: { //Different grammatical cases + m: ['један минут', 'једне минуте'], + mm: ['минут', 'минуте', 'минута'], + h: ['један сат', 'једног сата'], + hh: ['сат', 'сата', 'сати'], + dd: ['дан', 'дана', 'дана'], + MM: ['месец', 'месеца', 'месеци'], + yy: ['година', 'године', 'година'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator.correctGrammaticalCase(number, wordKey); + } + } + }; + + return moment.defineLocale('sr-cyrl', { + months: ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар'], + monthsShort: ['јан.', 'феб.', 'мар.', 'апр.', 'мај', 'јун', 'јул', 'авг.', 'сеп.', 'окт.', 'нов.', 'дец.'], + weekdays: ['недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота'], + weekdaysShort: ['нед.', 'пон.', 'уто.', 'сре.', 'чет.', 'пет.', 'суб.'], + weekdaysMin: ['не', 'по', 'ут', 'ср', 'че', 'пе', 'су'], + longDateFormat: { + LT: "H:mm", + L: "DD. MM. YYYY", + LL: "D. MMMM YYYY", + LLL: "D. MMMM YYYY LT", + LLLL: "dddd, D. MMMM YYYY LT" + }, + calendar: { + sameDay: '[данас у] LT', + nextDay: '[сутра у] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[у] [недељу] [у] LT'; + case 3: + return '[у] [среду] [у] LT'; + case 6: + return '[у] [суботу] [у] LT'; + case 1: + case 2: + case 4: + case 5: + return '[у] dddd [у] LT'; + } + }, + lastDay : '[јуче у] LT', + lastWeek : function () { + var lastWeekDays = [ + '[прошле] [недеље] [у] LT', + '[прошлог] [понедељка] [у] LT', + '[прошлог] [уторка] [у] LT', + '[прошле] [среде] [у] LT', + '[прошлог] [четвртка] [у] LT', + '[прошлог] [петка] [у] LT', + '[прошле] [суботе] [у] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : "за %s", + past : "пре %s", + s : "неколико секунди", + m : translator.translate, + mm : translator.translate, + h : translator.translate, + hh : translator.translate, + d : "дан", + dd : translator.translate, + M : "месец", + MM : translator.translate, + y : "годину", + yy : translator.translate + }, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : Serbian-latin (sr) +// author : Milan Janačković : https://github.com/milan-j + +(function (factory) { + factory(moment); +}(function (moment) { + var translator = { + words: { //Different grammatical cases + m: ['jedan minut', 'jedne minute'], + mm: ['minut', 'minute', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mesec', 'meseca', 'meseci'], + yy: ['godina', 'godine', 'godina'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator.correctGrammaticalCase(number, wordKey); + } + } + }; + + return moment.defineLocale('sr', { + months: ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar'], + monthsShort: ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun', 'jul', 'avg.', 'sep.', 'okt.', 'nov.', 'dec.'], + weekdays: ['nedelja', 'ponedeljak', 'utorak', 'sreda', 'četvrtak', 'petak', 'subota'], + weekdaysShort: ['ned.', 'pon.', 'uto.', 'sre.', 'čet.', 'pet.', 'sub.'], + weekdaysMin: ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'], + longDateFormat: { + LT: "H:mm", + L: "DD. MM. YYYY", + LL: "D. MMMM YYYY", + LLL: "D. MMMM YYYY LT", + LLLL: "dddd, D. MMMM YYYY LT" + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedelju] [u] LT'; + case 3: + return '[u] [sredu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[juče u] LT', + lastWeek : function () { + var lastWeekDays = [ + '[prošle] [nedelje] [u] LT', + '[prošlog] [ponedeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : "za %s", + past : "pre %s", + s : "nekoliko sekundi", + m : translator.translate, + mm : translator.translate, + h : translator.translate, + hh : translator.translate, + d : "dan", + dd : translator.translate, + M : "mesec", + MM : translator.translate, + y : "godinu", + yy : translator.translate + }, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : swedish (sv) +// author : Jens Alm : https://github.com/ulmus + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('sv', { + months : "januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"), + monthsShort : "jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"), + weekdays : "söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"), + weekdaysShort : "sön_mån_tis_ons_tor_fre_lör".split("_"), + weekdaysMin : "sö_må_ti_on_to_fr_lö".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "YYYY-MM-DD", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: '[Idag] LT', + nextDay: '[Imorgon] LT', + lastDay: '[Igår] LT', + nextWeek: 'dddd LT', + lastWeek: '[Förra] dddd[en] LT', + sameElse: 'L' + }, + relativeTime : { + future : "om %s", + past : "för %s sedan", + s : "några sekunder", + m : "en minut", + mm : "%d minuter", + h : "en timme", + hh : "%d timmar", + d : "en dag", + dd : "%d dagar", + M : "en månad", + MM : "%d månader", + y : "ett år", + yy : "%d år" + }, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'e' : + (b === 1) ? 'a' : + (b === 2) ? 'a' : + (b === 3) ? 'e' : 'e'; + return number + output; + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : tamil (ta) +// author : Arjunkumar Krishnamoorthy : https://github.com/tk120404 + +(function (factory) { + factory(moment); +}(function (moment) { + /*var symbolMap = { + '1': '௧', + '2': '௨', + '3': '௩', + '4': '௪', + '5': '௫', + '6': '௬', + '7': '௭', + '8': '௮', + '9': '௯', + '0': '௦' + }, + numberMap = { + '௧': '1', + '௨': '2', + '௩': '3', + '௪': '4', + '௫': '5', + '௬': '6', + '௭': '7', + '௮': '8', + '௯': '9', + '௦': '0' + }; */ + + return moment.defineLocale('ta', { + months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split("_"), + monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split("_"), + weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split("_"), + weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split("_"), + weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY, LT", + LLLL : "dddd, D MMMM YYYY, LT" + }, + calendar : { + sameDay : '[இன்று] LT', + nextDay : '[நாளை] LT', + nextWeek : 'dddd, LT', + lastDay : '[நேற்று] LT', + lastWeek : '[கடந்த வாரம்] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s இல்", + past : "%s முன்", + s : "ஒரு சில விநாடிகள்", + m : "ஒரு நிமிடம்", + mm : "%d நிமிடங்கள்", + h : "ஒரு மணி நேரம்", + hh : "%d மணி நேரம்", + d : "ஒரு நாள்", + dd : "%d நாட்கள்", + M : "ஒரு மாதம்", + MM : "%d மாதங்கள்", + y : "ஒரு வருடம்", + yy : "%d ஆண்டுகள்" + }, +/* preparse: function (string) { + return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + },*/ + ordinal : function (number) { + return number + 'வது'; + }, + + + // refer http://ta.wikipedia.org/s/1er1 + + meridiem : function (hour, minute, isLower) { + if (hour >= 6 && hour <= 10) { + return " காலை"; + } else if (hour >= 10 && hour <= 14) { + return " நண்பகல்"; + } else if (hour >= 14 && hour <= 18) { + return " எற்பாடு"; + } else if (hour >= 18 && hour <= 20) { + return " மாலை"; + } else if (hour >= 20 && hour <= 24) { + return " இரவு"; + } else if (hour >= 0 && hour <= 6) { + return " வைகறை"; + } + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : thai (th) +// author : Kridsada Thanabulpong : https://github.com/sirn + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('th', { + months : "มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"), + monthsShort : "มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา".split("_"), + weekdays : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"), + weekdaysShort : "อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"), // yes, three characters difference + weekdaysMin : "อา._จ._อ._พ._พฤ._ศ._ส.".split("_"), + longDateFormat : { + LT : "H นาฬิกา m นาที", + L : "YYYY/MM/DD", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY เวลา LT", + LLLL : "วันddddที่ D MMMM YYYY เวลา LT" + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return "ก่อนเที่ยง"; + } else { + return "หลังเที่ยง"; + } + }, + calendar : { + sameDay : '[วันนี้ เวลา] LT', + nextDay : '[พรุ่งนี้ เวลา] LT', + nextWeek : 'dddd[หน้า เวลา] LT', + lastDay : '[เมื่อวานนี้ เวลา] LT', + lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT', + sameElse : 'L' + }, + relativeTime : { + future : "อีก %s", + past : "%sที่แล้ว", + s : "ไม่กี่วินาที", + m : "1 นาที", + mm : "%d นาที", + h : "1 ชั่วโมง", + hh : "%d ชั่วโมง", + d : "1 วัน", + dd : "%d วัน", + M : "1 เดือน", + MM : "%d เดือน", + y : "1 ปี", + yy : "%d ปี" + } + }); +})); +// moment.js locale configuration +// locale : Tagalog/Filipino (tl-ph) +// author : Dan Hagman + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('tl-ph', { + months : "Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"), + monthsShort : "Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"), + weekdays : "Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"), + weekdaysShort : "Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"), + weekdaysMin : "Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "MM/D/YYYY", + LL : "MMMM D, YYYY", + LLL : "MMMM D, YYYY LT", + LLLL : "dddd, MMMM DD, YYYY LT" + }, + calendar : { + sameDay: "[Ngayon sa] LT", + nextDay: '[Bukas sa] LT', + nextWeek: 'dddd [sa] LT', + lastDay: '[Kahapon sa] LT', + lastWeek: 'dddd [huling linggo] LT', + sameElse: 'L' + }, + relativeTime : { + future : "sa loob ng %s", + past : "%s ang nakalipas", + s : "ilang segundo", + m : "isang minuto", + mm : "%d minuto", + h : "isang oras", + hh : "%d oras", + d : "isang araw", + dd : "%d araw", + M : "isang buwan", + MM : "%d buwan", + y : "isang taon", + yy : "%d taon" + }, + ordinal : function (number) { + return number; + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : turkish (tr) +// authors : Erhan Gundogan : https://github.com/erhangundogan, +// Burak Yiğit Kaya: https://github.com/BYK + +(function (factory) { + factory(moment); +}(function (moment) { + var suffixes = { + 1: "'inci", + 5: "'inci", + 8: "'inci", + 70: "'inci", + 80: "'inci", + + 2: "'nci", + 7: "'nci", + 20: "'nci", + 50: "'nci", + + 3: "'üncü", + 4: "'üncü", + 100: "'üncü", + + 6: "'ncı", + + 9: "'uncu", + 10: "'uncu", + 30: "'uncu", + + 60: "'ıncı", + 90: "'ıncı" + }; + + return moment.defineLocale('tr', { + months : "Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"), + monthsShort : "Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"), + weekdays : "Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"), + weekdaysShort : "Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"), + weekdaysMin : "Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd, D MMMM YYYY LT" + }, + calendar : { + sameDay : '[bugün saat] LT', + nextDay : '[yarın saat] LT', + nextWeek : '[haftaya] dddd [saat] LT', + lastDay : '[dün] LT', + lastWeek : '[geçen hafta] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : "%s sonra", + past : "%s önce", + s : "birkaç saniye", + m : "bir dakika", + mm : "%d dakika", + h : "bir saat", + hh : "%d saat", + d : "bir gün", + dd : "%d gün", + M : "bir ay", + MM : "%d ay", + y : "bir yıl", + yy : "%d yıl" + }, + ordinal : function (number) { + if (number === 0) { // special case for zero + return number + "'ıncı"; + } + var a = number % 10, + b = number % 100 - a, + c = number >= 100 ? 100 : null; + + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : Morocco Central Atlas Tamaziɣt in Latin (tzm-latn) +// author : Abdel Said : https://github.com/abdelsaid + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('tzm-latn', { + months : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"), + monthsShort : "innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"), + weekdays : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"), + weekdaysShort : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"), + weekdaysMin : "asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: "[asdkh g] LT", + nextDay: '[aska g] LT', + nextWeek: 'dddd [g] LT', + lastDay: '[assant g] LT', + lastWeek: 'dddd [g] LT', + sameElse: 'L' + }, + relativeTime : { + future : "dadkh s yan %s", + past : "yan %s", + s : "imik", + m : "minuḍ", + mm : "%d minuḍ", + h : "saɛa", + hh : "%d tassaɛin", + d : "ass", + dd : "%d ossan", + M : "ayowr", + MM : "%d iyyirn", + y : "asgas", + yy : "%d isgasn" + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : Morocco Central Atlas Tamaziɣt (tzm) +// author : Abdel Said : https://github.com/abdelsaid + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('tzm', { + months : "ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"), + monthsShort : "ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"), + weekdays : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"), + weekdaysShort : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"), + weekdaysMin : "ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "dddd D MMMM YYYY LT" + }, + calendar : { + sameDay: "[ⴰⵙⴷⵅ ⴴ] LT", + nextDay: '[ⴰⵙⴽⴰ ⴴ] LT', + nextWeek: 'dddd [ⴴ] LT', + lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT', + lastWeek: 'dddd [ⴴ] LT', + sameElse: 'L' + }, + relativeTime : { + future : "ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s", + past : "ⵢⴰⵏ %s", + s : "ⵉⵎⵉⴽ", + m : "ⵎⵉⵏⵓⴺ", + mm : "%d ⵎⵉⵏⵓⴺ", + h : "ⵙⴰⵄⴰ", + hh : "%d ⵜⴰⵙⵙⴰⵄⵉⵏ", + d : "ⴰⵙⵙ", + dd : "%d oⵙⵙⴰⵏ", + M : "ⴰⵢoⵓⵔ", + MM : "%d ⵉⵢⵢⵉⵔⵏ", + y : "ⴰⵙⴳⴰⵙ", + yy : "%d ⵉⵙⴳⴰⵙⵏ" + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : ukrainian (uk) +// author : zemlanin : https://github.com/zemlanin +// Author : Menelion Elensúle : https://github.com/Oire + +(function (factory) { + factory(moment); +}(function (moment) { + function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); + } + + function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': 'хвилина_хвилини_хвилин', + 'hh': 'година_години_годин', + 'dd': 'день_дні_днів', + 'MM': 'місяць_місяці_місяців', + 'yy': 'рік_роки_років' + }; + if (key === 'm') { + return withoutSuffix ? 'хвилина' : 'хвилину'; + } + else if (key === 'h') { + return withoutSuffix ? 'година' : 'годину'; + } + else { + return number + ' ' + plural(format[key], +number); + } + } + + function monthsCaseReplace(m, format) { + var months = { + 'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'), + 'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_') + }, + + nounCase = (/D[oD]? *MMMM?/).test(format) ? + 'accusative' : + 'nominative'; + + return months[nounCase][m.month()]; + } + + function weekdaysCaseReplace(m, format) { + var weekdays = { + 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'), + 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'), + 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_') + }, + + nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ? + 'accusative' : + ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ? + 'genitive' : + 'nominative'); + + return weekdays[nounCase][m.day()]; + } + + function processHoursFunction(str) { + return function () { + return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; + }; + } + + return moment.defineLocale('uk', { + months : monthsCaseReplace, + monthsShort : "січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"), + weekdays : weekdaysCaseReplace, + weekdaysShort : "нд_пн_вт_ср_чт_пт_сб".split("_"), + weekdaysMin : "нд_пн_вт_ср_чт_пт_сб".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD.MM.YYYY", + LL : "D MMMM YYYY р.", + LLL : "D MMMM YYYY р., LT", + LLLL : "dddd, D MMMM YYYY р., LT" + }, + calendar : { + sameDay: processHoursFunction('[Сьогодні '), + nextDay: processHoursFunction('[Завтра '), + lastDay: processHoursFunction('[Вчора '), + nextWeek: processHoursFunction('[У] dddd ['), + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return processHoursFunction('[Минулої] dddd [').call(this); + case 1: + case 2: + case 4: + return processHoursFunction('[Минулого] dddd [').call(this); + } + }, + sameElse: 'L' + }, + relativeTime : { + future : "за %s", + past : "%s тому", + s : "декілька секунд", + m : relativeTimeWithPlural, + mm : relativeTimeWithPlural, + h : "годину", + hh : relativeTimeWithPlural, + d : "день", + dd : relativeTimeWithPlural, + M : "місяць", + MM : relativeTimeWithPlural, + y : "рік", + yy : relativeTimeWithPlural + }, + + // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason + + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return "ночі"; + } else if (hour < 12) { + return "ранку"; + } else if (hour < 17) { + return "дня"; + } else { + return "вечора"; + } + }, + + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return number + '-й'; + case 'D': + return number + '-го'; + default: + return number; + } + }, + + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : uzbek +// author : Sardor Muminov : https://github.com/muminoff + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('uz', { + months : "январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"), + monthsShort : "янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"), + weekdays : "Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"), + weekdaysShort : "Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"), + weekdaysMin : "Як_Ду_Се_Чо_Па_Жу_Ша".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM YYYY", + LLL : "D MMMM YYYY LT", + LLLL : "D MMMM YYYY, dddd LT" + }, + calendar : { + sameDay : '[Бугун соат] LT [да]', + nextDay : '[Эртага] LT [да]', + nextWeek : 'dddd [куни соат] LT [да]', + lastDay : '[Кеча соат] LT [да]', + lastWeek : '[Утган] dddd [куни соат] LT [да]', + sameElse : 'L' + }, + relativeTime : { + future : "Якин %s ичида", + past : "Бир неча %s олдин", + s : "фурсат", + m : "бир дакика", + mm : "%d дакика", + h : "бир соат", + hh : "%d соат", + d : "бир кун", + dd : "%d кун", + M : "бир ой", + MM : "%d ой", + y : "бир йил", + yy : "%d йил" + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 4th is the first week of the year. + } + }); +})); +// moment.js locale configuration +// locale : vietnamese (vi) +// author : Bang Nguyen : https://github.com/bangnk + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('vi', { + months : "tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"), + monthsShort : "Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"), + weekdays : "chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"), + weekdaysShort : "CN_T2_T3_T4_T5_T6_T7".split("_"), + weekdaysMin : "CN_T2_T3_T4_T5_T6_T7".split("_"), + longDateFormat : { + LT : "HH:mm", + L : "DD/MM/YYYY", + LL : "D MMMM [năm] YYYY", + LLL : "D MMMM [năm] YYYY LT", + LLLL : "dddd, D MMMM [năm] YYYY LT", + l : "DD/M/YYYY", + ll : "D MMM YYYY", + lll : "D MMM YYYY LT", + llll : "ddd, D MMM YYYY LT" + }, + calendar : { + sameDay: "[Hôm nay lúc] LT", + nextDay: '[Ngày mai lúc] LT', + nextWeek: 'dddd [tuần tới lúc] LT', + lastDay: '[Hôm qua lúc] LT', + lastWeek: 'dddd [tuần rồi lúc] LT', + sameElse: 'L' + }, + relativeTime : { + future : "%s tới", + past : "%s trước", + s : "vài giây", + m : "một phút", + mm : "%d phút", + h : "một giờ", + hh : "%d giờ", + d : "một ngày", + dd : "%d ngày", + M : "một tháng", + MM : "%d tháng", + y : "một năm", + yy : "%d năm" + }, + ordinal : function (number) { + return number; + }, + 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. + } + }); +})); +// moment.js locale configuration +// locale : chinese +// author : suupic : https://github.com/suupic +// author : Zeno Zeng : https://github.com/zenozeng + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('zh-cn', { + months : "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"), + monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), + weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"), + weekdaysShort : "周日_周一_周二_周三_周四_周五_周六".split("_"), + weekdaysMin : "日_一_二_三_四_五_六".split("_"), + longDateFormat : { + LT : "Ah点mm", + L : "YYYY-MM-DD", + LL : "YYYY年MMMD日", + LLL : "YYYY年MMMD日LT", + LLLL : "YYYY年MMMD日ddddLT", + l : "YYYY-MM-DD", + ll : "YYYY年MMMD日", + lll : "YYYY年MMMD日LT", + llll : "YYYY年MMMD日ddddLT" + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return "凌晨"; + } else if (hm < 900) { + return "早上"; + } else if (hm < 1130) { + return "上午"; + } else if (hm < 1230) { + return "中午"; + } else if (hm < 1800) { + return "下午"; + } else { + return "晚上"; + } + }, + calendar : { + sameDay : function () { + return this.minutes() === 0 ? "[今天]Ah[点整]" : "[今天]LT"; + }, + nextDay : function () { + return this.minutes() === 0 ? "[明天]Ah[点整]" : "[明天]LT"; + }, + lastDay : function () { + return this.minutes() === 0 ? "[昨天]Ah[点整]" : "[昨天]LT"; + }, + nextWeek : function () { + var startOfWeek, prefix; + startOfWeek = moment().startOf('week'); + prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]'; + return this.minutes() === 0 ? prefix + "dddAh点整" : prefix + "dddAh点mm"; + }, + lastWeek : function () { + var startOfWeek, prefix; + startOfWeek = moment().startOf('week'); + prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]'; + return this.minutes() === 0 ? prefix + "dddAh点整" : prefix + "dddAh点mm"; + }, + sameElse : 'LL' + }, + ordinal : function (number, period) { + switch (period) { + case "d": + case "D": + case "DDD": + return number + "日"; + case "M": + return number + "月"; + case "w": + case "W": + return number + "周"; + default: + return number; + } + }, + relativeTime : { + future : "%s内", + past : "%s前", + s : "几秒", + m : "1分钟", + mm : "%d分钟", + h : "1小时", + hh : "%d小时", + d : "1天", + dd : "%d天", + M : "1个月", + MM : "%d个月", + y : "1年", + yy : "%d年" + }, + week : { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + 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. + } + }); +})); +// moment.js locale configuration +// locale : traditional chinese (zh-tw) +// author : Ben : https://github.com/ben-lin + +(function (factory) { + factory(moment); +}(function (moment) { + return moment.defineLocale('zh-tw', { + months : "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"), + monthsShort : "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), + weekdays : "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"), + weekdaysShort : "週日_週一_週二_週三_週四_週五_週六".split("_"), + weekdaysMin : "日_一_二_三_四_五_六".split("_"), + longDateFormat : { + LT : "Ah點mm", + L : "YYYY年MMMD日", + LL : "YYYY年MMMD日", + LLL : "YYYY年MMMD日LT", + LLLL : "YYYY年MMMD日ddddLT", + l : "YYYY年MMMD日", + ll : "YYYY年MMMD日", + lll : "YYYY年MMMD日LT", + llll : "YYYY年MMMD日ddddLT" + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 900) { + return "早上"; + } else if (hm < 1130) { + return "上午"; + } else if (hm < 1230) { + return "中午"; + } else if (hm < 1800) { + return "下午"; + } else { + return "晚上"; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + ordinal : function (number, period) { + switch (period) { + case "d" : + case "D" : + case "DDD" : + return number + "日"; + case "M" : + return number + "月"; + case "w" : + case "W" : + return number + "週"; + default : + return number; + } + }, + relativeTime : { + future : "%s內", + past : "%s前", + s : "幾秒", + m : "一分鐘", + mm : "%d分鐘", + h : "一小時", + hh : "%d小時", + d : "一天", + dd : "%d天", + M : "一個月", + MM : "%d個月", + y : "一年", + yy : "%d年" + } + }); +})); + + moment.locale('en'); + + + /************************************ + Exposing Moment + ************************************/ + + function makeGlobal(shouldDeprecate) { + /*global ender:false */ + if (typeof ender !== 'undefined') { + return; + } + oldGlobalMoment = globalScope.moment; + if (shouldDeprecate) { + globalScope.moment = deprecate( + 'Accessing Moment through the global scope is ' + + 'deprecated, and will be removed in an upcoming ' + + 'release.', + moment); + } else { + globalScope.moment = moment; + } + } + + // CommonJS module is defined + if (hasModule) { + module.exports = moment; + } else if (typeof define === 'function' && define.amd) { + define('moment', function (require, exports, module) { + if (module.config && module.config() && module.config().noGlobal === true) { + // release the global variable + globalScope.moment = oldGlobalMoment; + } + + return moment; + }); + makeGlobal(true); + } else { + makeGlobal(); + } +}).call(this); diff --git a/ajax/libs/moment.js/2.8.0/moment-with-locales.min.js b/ajax/libs/moment.js/2.8.0/moment-with-locales.min.js new file mode 100644 index 000000000..06b5661a7 --- /dev/null +++ b/ajax/libs/moment.js/2.8.0/moment-with-locales.min.js @@ -0,0 +1,10 @@ +//! moment.js +//! version : 2.8.0 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com +(function(a){function b(a,b,c){switch(arguments.length){case 2:return null!=a?a:b;case 3:return null!=a?a:null!=b?b:c;default:throw new Error("Implement me")}}function c(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function d(a){rb.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+a)}function e(a,b){var c=!0;return l(function(){return c&&(d(a),c=!1),b.apply(this,arguments)},b)}function f(a,b){nc[a]||(d(b),nc[a]=!0)}function g(a,b){return function(c){return o(a.call(this,c),b)}}function h(a,b){return function(c){return this.localeData().ordinal(a.call(this,c),b)}}function i(){}function j(a,b){b!==!1&&E(a),m(this,a),this._d=new Date(+a._d)}function k(a){var b=x(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._milliseconds=+k+1e3*j+6e4*i+36e5*h,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._locale=rb.localeData(),this._bubble()}function l(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return b.hasOwnProperty("toString")&&(a.toString=b.toString),b.hasOwnProperty("valueOf")&&(a.valueOf=b.valueOf),a}function m(a,b){var c,d,e;if("undefined"!=typeof b._isAMomentObject&&(a._isAMomentObject=b._isAMomentObject),"undefined"!=typeof b._i&&(a._i=b._i),"undefined"!=typeof b._f&&(a._f=b._f),"undefined"!=typeof b._l&&(a._l=b._l),"undefined"!=typeof b._strict&&(a._strict=b._strict),"undefined"!=typeof b._tzm&&(a._tzm=b._tzm),"undefined"!=typeof b._isUTC&&(a._isUTC=b._isUTC),"undefined"!=typeof b._offset&&(a._offset=b._offset),"undefined"!=typeof b._pf&&(a._pf=b._pf),"undefined"!=typeof b._locale&&(a._locale=b._locale),Fb.length>0)for(c in Fb)d=Fb[c],e=b[d],"undefined"!=typeof e&&(a[d]=e);return a}function n(a){return 0>a?Math.ceil(a):Math.floor(a)}function o(a,b,c){for(var d=""+Math.abs(a),e=a>=0;d.lengthd;d++)(c&&a[d]!==b[d]||!c&&z(a[d])!==z(b[d]))&&g++;return g+f}function w(a){if(a){var b=a.toLowerCase().replace(/(.)s$/,"$1");a=gc[a]||hc[b]||b}return a}function x(a){var b,c,d={};for(c in a)a.hasOwnProperty(c)&&(b=w(c),b&&(d[b]=a[c]));return d}function y(b){var c,d;if(0===b.indexOf("week"))c=7,d="day";else{if(0!==b.indexOf("month"))return;c=12,d="month"}rb[b]=function(e,f){var g,h,i=rb._locale[b],j=[];if("number"==typeof e&&(f=e,e=a),h=function(a){var b=rb().utc().set(d,a);return i.call(rb._locale,b,e||"")},null!=f)return h(f);for(g=0;c>g;g++)j.push(h(g));return j}}function z(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=b>=0?Math.floor(b):Math.ceil(b)),c}function A(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function B(a,b,c){return fb(rb([a,11,31+b-c]),b,c).week}function C(a){return D(a)?366:365}function D(a){return a%4===0&&a%100!==0||a%400===0}function E(a){var b;a._a&&-2===a._pf.overflow&&(b=a._a[yb]<0||a._a[yb]>11?yb:a._a[zb]<1||a._a[zb]>A(a._a[xb],a._a[yb])?zb:a._a[Ab]<0||a._a[Ab]>23?Ab:a._a[Bb]<0||a._a[Bb]>59?Bb:a._a[Cb]<0||a._a[Cb]>59?Cb:a._a[Db]<0||a._a[Db]>999?Db:-1,a._pf._overflowDayOfYear&&(xb>b||b>zb)&&(b=zb),a._pf.overflow=b)}function F(a){return null==a._isValid&&(a._isValid=!isNaN(a._d.getTime())&&a._pf.overflow<0&&!a._pf.empty&&!a._pf.invalidMonth&&!a._pf.nullInput&&!a._pf.invalidFormat&&!a._pf.userInvalidated,a._strict&&(a._isValid=a._isValid&&0===a._pf.charsLeftOver&&0===a._pf.unusedTokens.length)),a._isValid}function G(a){return a?a.toLowerCase().replace("_","-"):a}function H(a){for(var b,c,d,e,f=0;f0;){if(d=I(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&v(e,c,!0)>=b-1)break;b--}f++}return null}function I(a){var b=null;if(!Eb[a]&&Gb)try{b=rb.locale(),require("./locale/"+a),rb.locale(b)}catch(c){}return Eb[a]}function J(a,b){return b._isUTC?rb(a).zone(b._offset||0):rb(a).local()}function K(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function L(a){var b,c,d=a.match(Kb);for(b=0,c=d.length;c>b;b++)d[b]=mc[d[b]]?mc[d[b]]:K(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function M(a,b){return a.isValid()?(b=N(b,a.localeData()),ic[b]||(ic[b]=L(b)),ic[b](a)):a.localeData().invalidDate()}function N(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Lb.lastIndex=0;d>=0&&Lb.test(a);)a=a.replace(Lb,c),Lb.lastIndex=0,d-=1;return a}function O(a,b){var c,d=b._strict;switch(a){case"Q":return Wb;case"DDDD":return Yb;case"YYYY":case"GGGG":case"gggg":return d?Zb:Ob;case"Y":case"G":case"g":return _b;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return d?$b:Pb;case"S":if(d)return Wb;case"SS":if(d)return Xb;case"SSS":if(d)return Yb;case"DDD":return Nb;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Rb;case"a":case"A":return b._locale._meridiemParse;case"X":return Ub;case"Z":case"ZZ":return Sb;case"T":return Tb;case"SSSS":return Qb;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return d?Xb:Mb;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Mb;case"Do":return Vb;default:return c=new RegExp(X(W(a.replace("\\","")),"i"))}}function P(a){a=a||"";var b=a.match(Sb)||[],c=b[b.length-1]||[],d=(c+"").match(ec)||["-",0,0],e=+(60*d[1])+z(d[2]);return"+"===d[0]?-e:e}function Q(a,b,c){var d,e=c._a;switch(a){case"Q":null!=b&&(e[yb]=3*(z(b)-1));break;case"M":case"MM":null!=b&&(e[yb]=z(b)-1);break;case"MMM":case"MMMM":d=c._locale.monthsParse(b),null!=d?e[yb]=d:c._pf.invalidMonth=b;break;case"D":case"DD":null!=b&&(e[zb]=z(b));break;case"Do":null!=b&&(e[zb]=z(parseInt(b,10)));break;case"DDD":case"DDDD":null!=b&&(c._dayOfYear=z(b));break;case"YY":e[xb]=rb.parseTwoDigitYear(b);break;case"YYYY":case"YYYYY":case"YYYYYY":e[xb]=z(b);break;case"a":case"A":c._isPm=c._locale.isPM(b);break;case"H":case"HH":case"h":case"hh":e[Ab]=z(b);break;case"m":case"mm":e[Bb]=z(b);break;case"s":case"ss":e[Cb]=z(b);break;case"S":case"SS":case"SSS":case"SSSS":e[Db]=z(1e3*("0."+b));break;case"X":c._d=new Date(1e3*parseFloat(b));break;case"Z":case"ZZ":c._useUTC=!0,c._tzm=P(b);break;case"dd":case"ddd":case"dddd":d=c._locale.weekdaysParse(b),null!=d?(c._w=c._w||{},c._w.d=d):c._pf.invalidWeekday=b;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":a=a.substr(0,1);case"gggg":case"GGGG":case"GGGGG":a=a.substr(0,2),b&&(c._w=c._w||{},c._w[a]=z(b));break;case"gg":case"GG":c._w=c._w||{},c._w[a]=rb.parseTwoDigitYear(b)}}function R(a){var c,d,e,f,g,h,i;c=a._w,null!=c.GG||null!=c.W||null!=c.E?(g=1,h=4,d=b(c.GG,a._a[xb],fb(rb(),1,4).year),e=b(c.W,1),f=b(c.E,1)):(g=a._locale._week.dow,h=a._locale._week.doy,d=b(c.gg,a._a[xb],fb(rb(),g,h).year),e=b(c.w,1),null!=c.d?(f=c.d,g>f&&++e):f=null!=c.e?c.e+g:g),i=gb(d,e,f,h,g),a._a[xb]=i.year,a._dayOfYear=i.dayOfYear}function S(a){var c,d,e,f,g=[];if(!a._d){for(e=U(a),a._w&&null==a._a[zb]&&null==a._a[yb]&&R(a),a._dayOfYear&&(f=b(a._a[xb],e[xb]),a._dayOfYear>C(f)&&(a._pf._overflowDayOfYear=!0),d=bb(f,0,a._dayOfYear),a._a[yb]=d.getUTCMonth(),a._a[zb]=d.getUTCDate()),c=0;3>c&&null==a._a[c];++c)a._a[c]=g[c]=e[c];for(;7>c;c++)a._a[c]=g[c]=null==a._a[c]?2===c?1:0:a._a[c];a._d=(a._useUTC?bb:ab).apply(null,g),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()+a._tzm)}}function T(a){var b;a._d||(b=x(a._i),a._a=[b.year,b.month,b.day,b.hour,b.minute,b.second,b.millisecond],S(a))}function U(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function V(a){if(a._f===rb.ISO_8601)return void Z(a);a._a=[],a._pf.empty=!0;var b,c,d,e,f,g=""+a._i,h=g.length,i=0;for(d=N(a._f,a._locale).match(Kb)||[],b=0;b0&&a._pf.unusedInput.push(f),g=g.slice(g.indexOf(c)+c.length),i+=c.length),mc[e]?(c?a._pf.empty=!1:a._pf.unusedTokens.push(e),Q(e,c,a)):a._strict&&!c&&a._pf.unusedTokens.push(e);a._pf.charsLeftOver=h-i,g.length>0&&a._pf.unusedInput.push(g),a._isPm&&a._a[Ab]<12&&(a._a[Ab]+=12),a._isPm===!1&&12===a._a[Ab]&&(a._a[Ab]=0),S(a),E(a)}function W(a){return a.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e})}function X(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Y(a){var b,d,e,f,g;if(0===a._f.length)return a._pf.invalidFormat=!0,void(a._d=new Date(0/0));for(f=0;fg)&&(e=g,d=b));l(a,d||b)}function Z(a){var b,c,d=a._i,e=ac.exec(d);if(e){for(a._pf.iso=!0,b=0,c=cc.length;c>b;b++)if(cc[b][1].exec(d)){a._f=cc[b][0]+(e[6]||" ");break}for(b=0,c=dc.length;c>b;b++)if(dc[b][1].exec(d)){a._f+=dc[b][0];break}d.match(Sb)&&(a._f+="Z"),V(a)}else a._isValid=!1}function $(a){Z(a),a._isValid===!1&&(delete a._isValid,rb.createFromInputFallback(a))}function _(b){var c,d=b._i;d===a?b._d=new Date:u(d)?b._d=new Date(+d):null!==(c=Hb.exec(d))?b._d=new Date(+c[1]):"string"==typeof d?$(b):t(d)?(b._a=d.slice(0),S(b)):"object"==typeof d?T(b):"number"==typeof d?b._d=new Date(d):rb.createFromInputFallback(b)}function ab(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 1970>a&&h.setFullYear(a),h}function bb(a){var b=new Date(Date.UTC.apply(null,arguments));return 1970>a&&b.setUTCFullYear(a),b}function cb(a,b){if("string"==typeof a)if(isNaN(a)){if(a=b.weekdaysParse(a),"number"!=typeof a)return null}else a=parseInt(a,10);return a}function db(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function eb(a,b,c){var d=rb.duration(a).abs(),e=wb(d.as("s")),f=wb(d.as("m")),g=wb(d.as("h")),h=wb(d.as("d")),i=wb(d.as("M")),j=wb(d.as("y")),k=e0,k[4]=c,db.apply({},k)}function fb(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=rb(a).add(f,"d"),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function gb(a,b,c,d,e){var f,g,h=bb(a,0,1).getUTCDay();return h=0===h?7:h,c=null!=c?c:e,f=e-h+(h>d?7:0)-(e>h?7:0),g=7*(b-1)+(c-e)+f+1,{year:g>0?a:a-1,dayOfYear:g>0?g:C(a-1)+g}}function hb(b){var c=b._i,d=b._f;return b._locale=b._locale||rb.localeData(b._l),null===c||d===a&&""===c?rb.invalid({nullInput:!0}):("string"==typeof c&&(b._i=c=b._locale.preparse(c)),rb.isMoment(c)?new j(c,!0):(d?t(d)?Y(b):V(b):_(b),new j(b)))}function ib(a,b){var c,d;if(1===b.length&&t(b[0])&&(b=b[0]),!b.length)return rb();for(c=b[0],d=1;d=0?"+":"-";return b+o(Math.abs(a),6)},gg:function(){return o(this.weekYear()%100,2)},gggg:function(){return o(this.weekYear(),4)},ggggg:function(){return o(this.weekYear(),5)},GG:function(){return o(this.isoWeekYear()%100,2)},GGGG:function(){return o(this.isoWeekYear(),4)},GGGGG:function(){return o(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return z(this.milliseconds()/100)},SS:function(){return o(z(this.milliseconds()/10),2)},SSS:function(){return o(this.milliseconds(),3)},SSSS:function(){return o(this.milliseconds(),3)},Z:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+o(z(a/60),2)+":"+o(z(a)%60,2)},ZZ:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+o(z(a/60),2)+o(z(a)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},nc={},oc=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];kc.length;)tb=kc.pop(),mc[tb+"o"]=h(mc[tb],tb);for(;lc.length;)tb=lc.pop(),mc[tb+tb]=g(mc[tb],2);mc.DDDD=g(mc.DDD,3),l(i.prototype,{set:function(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(a){return this._months[a.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(a){return this._monthsShort[a.month()]},monthsParse:function(a){var b,c,d;for(this._monthsParse||(this._monthsParse=[]),b=0;12>b;b++)if(this._monthsParse[b]||(c=rb.utc([2e3,b]),d="^"+this.months(c,"")+"|^"+this.monthsShort(c,""),this._monthsParse[b]=new RegExp(d.replace(".",""),"i")),this._monthsParse[b].test(a))return b},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(a){return this._weekdays[a.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(a){return this._weekdaysShort[a.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(a){return this._weekdaysMin[a.day()]},weekdaysParse:function(a){var b,c,d;for(this._weekdaysParse||(this._weekdaysParse=[]),b=0;7>b;b++)if(this._weekdaysParse[b]||(c=rb([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b},isPM:function(a){return"p"===(a+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(a,b){var c=this._calendar[a];return"function"==typeof c?c.apply(b):c},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)},pastFuture:function(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)},ordinal:function(a){return this._ordinal.replace("%d",a)},_ordinal:"%d",preparse:function(a){return a},postformat:function(a){return a},week:function(a){return fb(a,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),rb=function(b,d,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._i=b,g._f=d,g._l=e,g._strict=f,g._isUTC=!1,g._pf=c(),hb(g)},rb.suppressDeprecationWarnings=!1,rb.createFromInputFallback=e("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i)}),rb.min=function(){var a=[].slice.call(arguments,0);return ib("isBefore",a)},rb.max=function(){var a=[].slice.call(arguments,0);return ib("isAfter",a)},rb.utc=function(b,d,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._useUTC=!0,g._isUTC=!0,g._l=e,g._i=b,g._f=d,g._strict=f,g._pf=c(),hb(g).utc()},rb.unix=function(a){return rb(1e3*a)},rb.duration=function(a,b){var c,d,e,f,g=a,h=null;return rb.isDuration(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(g={},b?g[b]=a:g.milliseconds=a):(h=Ib.exec(a))?(c="-"===h[1]?-1:1,g={y:0,d:z(h[zb])*c,h:z(h[Ab])*c,m:z(h[Bb])*c,s:z(h[Cb])*c,ms:z(h[Db])*c}):(h=Jb.exec(a))?(c="-"===h[1]?-1:1,e=function(a){var b=a&&parseFloat(a.replace(",","."));return(isNaN(b)?0:b)*c},g={y:e(h[2]),M:e(h[3]),d:e(h[4]),h:e(h[5]),m:e(h[6]),s:e(h[7]),w:e(h[8])}):"object"==typeof g&&("from"in g||"to"in g)&&(f=q(rb(g.from),rb(g.to)),g={},g.ms=f.milliseconds,g.M=f.months),d=new k(g),rb.isDuration(a)&&a.hasOwnProperty("_locale")&&(d._locale=a._locale),d},rb.version=ub,rb.defaultFormat=bc,rb.ISO_8601=function(){},rb.momentProperties=Fb,rb.updateOffset=function(){},rb.relativeTimeThreshold=function(b,c){return jc[b]===a?!1:c===a?jc[b]:(jc[b]=c,!0)},rb.lang=e("moment.lang is deprecated. Use moment.locale instead.",function(a,b){return rb.locale(a,b)}),rb.locale=function(a,b){var c;return a&&(c="undefined"!=typeof b?rb.defineLocale(a,b):rb.localeData(a),c&&(rb.duration._locale=rb._locale=c)),rb._locale._abbr},rb.defineLocale=function(a,b){return null!==b?(b.abbr=a,Eb[a]||(Eb[a]=new i),Eb[a].set(b),rb.locale(a),Eb[a]):(delete Eb[a],null)},rb.langData=e("moment.langData is deprecated. Use moment.localeData instead.",function(a){return rb.localeData(a)}),rb.localeData=function(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return rb._locale;if(!t(a)){if(b=I(a))return b;a=[a]}return H(a)},rb.isMoment=function(a){return a instanceof j||null!=a&&a.hasOwnProperty("_isAMomentObject")},rb.isDuration=function(a){return a instanceof k};for(tb=oc.length-1;tb>=0;--tb)y(oc[tb]);rb.normalizeUnits=function(a){return w(a)},rb.invalid=function(a){var b=rb.utc(0/0);return null!=a?l(b._pf,a):b._pf.userInvalidated=!0,b},rb.parseZone=function(){return rb.apply(null,arguments).parseZone()},rb.parseTwoDigitYear=function(a){return z(a)+(z(a)>68?1900:2e3)},l(rb.fn=j.prototype,{clone:function(){return rb(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var a=rb(this).utc();return 00:!1},parsingFlags:function(){return l({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(a){return this.zone(0,a)},local:function(a){return this._isUTC&&(this.zone(0,a),this._isUTC=!1,a&&this.add(this._d.getTimezoneOffset(),"m")),this},format:function(a){var b=M(this,a||rb.defaultFormat);return this.localeData().postformat(b)},add:r(1,"add"),subtract:r(-1,"subtract"),diff:function(a,b,c){var d,e,f=J(a,this),g=6e4*(this.zone()-f.zone());return b=w(b),"year"===b||"month"===b?(d=432e5*(this.daysInMonth()+f.daysInMonth()),e=12*(this.year()-f.year())+(this.month()-f.month()),e+=(this-rb(this).startOf("month")-(f-rb(f).startOf("month")))/d,e-=6e4*(this.zone()-rb(this).startOf("month").zone()-(f.zone()-rb(f).startOf("month").zone()))/d,"year"===b&&(e/=12)):(d=this-f,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-g)/864e5:"week"===b?(d-g)/6048e5:d),c?e:n(e)},from:function(a,b){return rb.duration({to:this,from:a}).locale(this.locale()).humanize(!b)},fromNow:function(a){return this.from(rb(),a)},calendar:function(a){var b=a||rb(),c=J(b,this).startOf("day"),d=this.diff(c,"days",!0),e=-6>d?"sameElse":-1>d?"lastWeek":0>d?"lastDay":1>d?"sameDay":2>d?"nextDay":7>d?"nextWeek":"sameElse";return this.format(this.localeData().calendar(e,this))},isLeapYear:function(){return D(this.year())},isDST:function(){return this.zone()+rb(a).startOf(b)},isBefore:function(a,b){return b="undefined"!=typeof b?b:"millisecond",+this.clone().startOf(b)<+rb(a).startOf(b)},isSame:function(a,b){return b=b||"ms",+this.clone().startOf(b)===+J(a,this).startOf(b)},min:e("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(a){return a=rb.apply(null,arguments),this>a?this:a}),max:e("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(a){return a=rb.apply(null,arguments),a>this?this:a}),zone:function(a,b){var c,d=this._offset||0;return null==a?this._isUTC?d:this._d.getTimezoneOffset():("string"==typeof a&&(a=P(a)),Math.abs(a)<16&&(a=60*a),!this._isUTC&&b&&(c=this._d.getTimezoneOffset()),this._offset=a,this._isUTC=!0,null!=c&&this.subtract(c,"m"),d!==a&&(!b||this._changeInProgress?s(this,rb.duration(d-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,rb.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(a){return a=a?rb(a).zone():0,(this.zone()-a)%60===0},daysInMonth:function(){return A(this.year(),this.month())},dayOfYear:function(a){var b=wb((rb(this).startOf("day")-rb(this).startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")},quarter:function(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)},weekYear:function(a){var b=fb(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==a?b:this.add(a-b,"y")},isoWeekYear:function(a){var b=fb(this,1,4).year;return null==a?b:this.add(a-b,"y")},week:function(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")},isoWeek:function(a){var b=fb(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")},weekday:function(a){var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")},isoWeekday:function(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)},isoWeeksInYear:function(){return B(this.year(),1,4)},weeksInYear:function(){var a=this.localeData()._week;return B(this.year(),a.dow,a.doy)},get:function(a){return a=w(a),this[a]()},set:function(a,b){return a=w(a),"function"==typeof this[a]&&this[a](b),this},locale:function(b){return b===a?this._locale._abbr:(this._locale=rb.localeData(b),this)},lang:e("moment().lang() is deprecated. Use moment().localeData() instead.",function(a){return this.localeData(a)}),localeData:function(){return this._locale}}),rb.fn.millisecond=rb.fn.milliseconds=mb("Milliseconds",!1),rb.fn.second=rb.fn.seconds=mb("Seconds",!1),rb.fn.minute=rb.fn.minutes=mb("Minutes",!1),rb.fn.hour=rb.fn.hours=mb("Hours",!0),rb.fn.date=mb("Date",!0),rb.fn.dates=e("dates accessor is deprecated. Use date instead.",mb("Date",!0)),rb.fn.year=mb("FullYear",!0),rb.fn.years=e("years accessor is deprecated. Use year instead.",mb("FullYear",!0)),rb.fn.days=rb.fn.day,rb.fn.months=rb.fn.month,rb.fn.weeks=rb.fn.week,rb.fn.isoWeeks=rb.fn.isoWeek,rb.fn.quarters=rb.fn.quarter,rb.fn.toJSON=rb.fn.toISOString,l(rb.duration.fn=k.prototype,{_bubble:function(){var a,b,c,d=this._milliseconds,e=this._days,f=this._months,g=this._data,h=0;g.milliseconds=d%1e3,a=n(d/1e3),g.seconds=a%60,b=n(a/60),g.minutes=b%60,c=n(b/60),g.hours=c%24,e+=n(c/24),h=n(nb(e)),e-=n(ob(h)),f+=n(e/30),e%=30,h+=n(f/12),f%=12,g.days=e,g.months=f,g.years=h},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return n(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*z(this._months/12)},humanize:function(a){var b=eb(this,!a,this.localeData());return a&&(b=this.localeData().pastFuture(+this,b)),this.localeData().postformat(b)},add:function(a,b){var c=rb.duration(a,b);return this._milliseconds+=c._milliseconds,this._days+=c._days,this._months+=c._months,this._bubble(),this},subtract:function(a,b){var c=rb.duration(a,b);return this._milliseconds-=c._milliseconds,this._days-=c._days,this._months-=c._months,this._bubble(),this},get:function(a){return a=w(a),this[a.toLowerCase()+"s"]()},as:function(a){var b,c;if(a=w(a),b=this._days+this._milliseconds/864e5,"month"===a||"year"===a)return c=this._months+12*nb(b),"month"===a?c:c/12;switch(b+=ob(this._months/12),a){case"week":return b/7;case"day":return b;case"hour":return 24*b;case"minute":return 24*b*60;case"second":return 24*b*60*60;case"millisecond":return 24*b*60*60*1e3;default:throw new Error("Unknown unit "+a)}},lang:rb.fn.lang,locale:rb.fn.locale,toIsoString:e("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var a=Math.abs(this.years()),b=Math.abs(this.months()),c=Math.abs(this.days()),d=Math.abs(this.hours()),e=Math.abs(this.minutes()),f=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(a?a+"Y":"")+(b?b+"M":"")+(c?c+"D":"")+(d||e||f?"T":"")+(d?d+"H":"")+(e?e+"M":"")+(f?f+"S":""):"P0D"},localeData:function(){return this._locale}});for(tb in fc)fc.hasOwnProperty(tb)&&pb(tb.toLowerCase());rb.duration.fn.asMilliseconds=function(){return this.as("ms")},rb.duration.fn.asSeconds=function(){return this.as("s")},rb.duration.fn.asMinutes=function(){return this.as("m")},rb.duration.fn.asHours=function(){return this.as("h")},rb.duration.fn.asDays=function(){return this.as("d")},rb.duration.fn.asWeeks=function(){return this.as("weeks")},rb.duration.fn.asMonths=function(){return this.as("M")},rb.duration.fn.asYears=function(){return this.as("y")},rb.locale("en",{ordinal:function(a){var b=a%10,c=1===z(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),function(a){a(rb)}(function(a){return a.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_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("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiem:function(a,b,c){return 12>a?c?"vm":"VM":c?"nm":"NM"},longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de") +},week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})}),function(a){a(rb)}(function(a){var b={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},c={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};return a.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},meridiem:function(a){return 12>a?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return c[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}),function(a){a(rb)}(function(a){var b={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},c={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};return a.defineLocale("ar",{months:"يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"),monthsShort:"يناير/ كانون الثاني_فبراير/ شباط_مارس/ آذار_أبريل/ نيسان_مايو/ أيار_يونيو/ حزيران_يوليو/ تموز_أغسطس/ آب_سبتمبر/ أيلول_أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},meridiem:function(a){return 12>a?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return c[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}),function(a){a(rb)}(function(a){var b={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};return a.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiem:function(a){return 4>a?"gecə":12>a?"səhər":17>a?"gündüz":"axşam"},ordinal:function(a){if(0===a)return a+"-ıncı";var c=a%10,d=a%100-c,e=a>=100?100:null;return a+(b[c]||b[d]||b[e])},week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){function b(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function c(a,c,d){var e={mm:c?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:c?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};return"m"===d?c?"хвіліна":"хвіліну":"h"===d?c?"гадзіна":"гадзіну":a+" "+b(e[d],+a)}function d(a,b){var c={nominative:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_"),accusative:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_")},d=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function e(a,b){var c={nominative:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),accusative:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_")},d=/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/.test(b)?"accusative":"nominative";return c[d][a.day()]}return a.defineLocale("be",{months:d,monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:e,weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., LT",LLLL:"dddd, D MMMM YYYY г., LT"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:c,mm:c,h:c,hh:c,d:"дзень",dd:c,M:"месяц",MM:c,y:"год",yy:c},meridiem:function(a){return 4>a?"ночы":12>a?"раніцы":17>a?"дня":"вечара"},ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a%10!==2&&a%10!==3||a%100===12||a%100===13?a+"-ы":a+"-і";case"D":return a+"-га";default:return a}},week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){return a.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&20>c?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){var b={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},c={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};return a.defineLocale("bn",{months:"জানুয়ারী_ফেবুয়ারী_মার্চ_এপ্রিল_মে_জুন_জুলাই_অগাস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপর_মে_জুন_জুল_অগ_সেপ্ট_অক্টো_নভ_ডিসেম্".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পত্তিবার_শুক্রুবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পত্তি_শুক্রু_শনি".split("_"),weekdaysMin:"রব_সম_মঙ্গ_বু_ব্রিহ_শু_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কএক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(a){return a.replace(/[১২৩৪৫৬৭৮৯০]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 4>a?"রাত":10>a?"শকাল":17>a?"দুপুর":20>a?"বিকেল":"রাত"},week:{dow:0,doy:6}})}),function(a){a(rb)}(function(a){var b={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},c={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};return a.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(a){return a.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 4>a?"མཚན་མོ":10>a?"ཞོགས་ཀས":17>a?"ཉིན་གུང":20>a?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}})}),function(a){a(rb)}(function(b){function c(a,b,c){var d={mm:"munutenn",MM:"miz",dd:"devezh"};return a+" "+f(d[c],a)}function d(a){switch(e(a)){case 1:case 3:case 4:case 5:case 9:return a+" bloaz";default:return a+" vloaz"}}function e(a){return a>9?e(a%10):a}function f(a,b){return 2===b?g(a):a}function g(b){var c={m:"v",b:"v",d:"z"};return c[b.charAt(0)]===a?b:c[b.charAt(0)]+b.substring(1)}return b.defineLocale("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("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),longDateFormat:{LT:"h[e]mm A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY LT",LLLL:"dddd, D [a viz] MMMM YYYY LT"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:c,h:"un eur",hh:"%d eur",d:"un devezh",dd:c,M:"ur miz",MM:c,y:"ur bloaz",yy:d},ordinal:function(a){var b=1===a?"añ":"vet";return a+b},week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){function b(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}return a.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),longDateFormat:{LT:"H:mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:b,mm:b,h:b,hh:b,d:"dan",dd:b,M:"mjesec",MM:b,y:"godinu",yy:b},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){return a.defineLocale("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("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){function b(a){return a>1&&5>a&&1!==~~(a/10)}function c(a,c,d,e){var f=a+" ";switch(d){case"s":return c||e?"pár sekund":"pár sekundami";case"m":return c?"minuta":e?"minutu":"minutou";case"mm":return c||e?f+(b(a)?"minuty":"minut"):f+"minutami";break;case"h":return c?"hodina":e?"hodinu":"hodinou";case"hh":return c||e?f+(b(a)?"hodiny":"hodin"):f+"hodinami";break;case"d":return c||e?"den":"dnem";case"dd":return c||e?f+(b(a)?"dny":"dní"):f+"dny";break;case"M":return c||e?"měsíc":"měsícem";case"MM":return c||e?f+(b(a)?"měsíce":"měsíců"):f+"měsíci";break;case"y":return c||e?"rok":"rokem";case"yy":return c||e?f+(b(a)?"roky":"let"):f+"lety"}}var d="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),e="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");return a.defineLocale("cs",{months:d,monthsShort:e,monthsParse:function(a,b){var c,d=[];for(c=0;12>c;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(d,e),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H.mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd D. MMMM YYYY LT"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:c,m:c,mm:c,h:c,hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("cv",{months:"кăрлач_нарăс_пуш_ака_май_çĕртме_утă_çурла_авăн_юпа_чӳк_раштав".split("_"),monthsShort:"кăр_нар_пуш_ака_май_çĕр_утă_çур_ав_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кĕçнерникун_эрнекун_шăматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кĕç_эрн_шăм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кç_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",L:"DD-MM-YYYY",LL:"YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ]",LLL:"YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT",LLLL:"dddd, YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ĕнер] LT [сехетре]",nextWeek:"[Çитес] dddd LT [сехетре]",lastWeek:"[Иртнĕ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(a){var b=/сехет$/i.exec(a)?"рен":/çул$/i.exec(a)?"тан":"ран";return a+b},past:"%s каялла",s:"пĕр-ик çеккунт",m:"пĕр минут",mm:"%d минут",h:"пĕр сехет",hh:"%d сехет",d:"пĕр кун",dd:"%d кун",M:"пĕр уйăх",MM:"%d уйăх",y:"пĕр çул",yy:"%d çул"},ordinal:"%d-мĕш",week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){return a.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},ordinal:function(a){var b=a,c="",d=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"];return b>20?c=40===b||50===b||60===b||80===b||100===b?"fed":"ain":b>0&&(c=d[b]),a+c},week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd [d.] D. MMMM YYYY LT"},calendar:{sameDay:"[I dag kl.] LT",nextDay:"[I morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[I går kl.] LT",lastWeek:"[sidste] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){function b(a,b,c){var d={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?d[c][0]:d[c][1]}return a.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm [Uhr]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[Heute um] LT",sameElse:"L",nextDay:"[Morgen um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gestern um] LT",lastWeek:"[letzten] dddd [um] LT"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:b,mm:"%d Minuten",h:b,hh:"%d Stunden",d:b,dd:b,M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){function b(a,b,c){var d={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?d[c][0]:d[c][1]}return a.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm [Uhr]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[Heute um] LT",sameElse:"L",nextDay:"[Morgen um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gestern um] LT",lastWeek:"[letzten] dddd [um] LT"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:b,mm:"%d Minuten",h:b,hh:"%d Stunden",d:b,dd:b,M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(a,b){return/D/.test(b.substring(0,b.indexOf("MMMM")))?this._monthsGenitiveEl[a.month()]:this._monthsNominativeEl[a.month()]},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(a,b,c){return a>11?c?"μμ":"ΜΜ":c?"πμ":"ΠΜ"},longDateFormat:{LT:"h:mm A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(a,b){var c=this._calendarEl[a],d=b&&b.hours();return"function"==typeof c&&(c=c.apply(b)),c.replace("{}",d%12===1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},ordinal:function(a){return a+"η"},week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("en-au",{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("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("en-ca",{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("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",L:"YYYY-MM-DD",LL:"D MMMM, YYYY",LLL:"D MMMM, YYYY LT",LLLL:"dddd, D MMMM, YYYY LT"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}})}),function(a){a(rb)}(function(a){return a.defineLocale("en-gb",{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("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"),weekdaysShort:"Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Ĵa_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"D[-an de] MMMM, YYYY",LLL:"D[-an de] MMMM, YYYY LT",LLLL:"dddd, [la] D[-an de] MMMM, YYYY LT"},meridiem:function(a,b,c){return a>11?c?"p.t.m.":"P.T.M.":c?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"je %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},ordinal:"%da",week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){var b="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),c="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");return a.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,d){return/-MMM-/.test(d)?c[a.month()]:b[a.month()]},weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"Do_Lu_Ma_Mi_Ju_Vi_Sá".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D [de] MMMM [del] YYYY",LLL:"D [de] MMMM [del] YYYY LT",LLLL:"dddd, D [de] MMMM [del] YYYY LT"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){function b(a,b,c,d){var e={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:[a+" minuti",a+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[a+" tunni",a+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[a+" kuu",a+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[a+" aasta",a+" aastat"]};return b?e[c][2]?e[c][2]:e[c][1]:d?e[c][0]:e[c][1]}return a.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:b,m:b,mm:b,h:b,hh:b,d:b,dd:"%d päeva",M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("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("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] LT",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] LT",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] LT",llll:"ddd, YYYY[ko] MMM D[a] LT"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){var b={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},c={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"}; +return a.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},meridiem:function(a){return 12>a?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چندین ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return c[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]}).replace(/,/g,"،")},ordinal:"%dم",week:{dow:6,doy:12}})}),function(a){a(rb)}(function(a){function b(a,b,d,e){var f="";switch(d){case"s":return e?"muutaman sekunnin":"muutama sekunti";case"m":return e?"minuutin":"minuutti";case"mm":f=e?"minuutin":"minuuttia";break;case"h":return e?"tunnin":"tunti";case"hh":f=e?"tunnin":"tuntia";break;case"d":return e?"päivän":"päivä";case"dd":f=e?"päivän":"päivää";break;case"M":return e?"kuukauden":"kuukausi";case"MM":f=e?"kuukauden":"kuukautta";break;case"y":return e?"vuoden":"vuosi";case"yy":f=e?"vuoden":"vuotta"}return f=c(a,e)+" "+f}function c(a,b){return 10>a?b?e[a]:d[a]:a}var d="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),e=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",d[7],d[8],d[9]];return a.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] LT",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] LT",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] LT",llll:"ddd, Do MMM YYYY, [klo] LT"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:b,m:b,mm:b,h:b,hh:b,d:b,dd:b,M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D. MMMM, YYYY LT"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minutt",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaði",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("fr-ca",{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("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(a){return a+(1===a?"er":"")}})}),function(a){a(rb)}(function(a){return a.defineLocale("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("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(a){return a+(1===a?"er":"")},week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("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("_"),weekdaysMin:"Do_Lu_Ma_Mé_Xo_Ve_Sá".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(a){return"uns segundos"===a?"nuns segundos":"en "+a},past:"hai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},ordinal:"%dº",week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){return a.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY LT",LLLL:"dddd, D [ב]MMMM YYYY LT",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY LT",llll:"ddd, D MMM YYYY LT"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(a){return 2===a?"שעתיים":a+" שעות"},d:"יום",dd:function(a){return 2===a?"יומיים":a+" ימים"},M:"חודש",MM:function(a){return 2===a?"חודשיים":a+" חודשים"},y:"שנה",yy:function(a){return 2===a?"שנתיים":a+" שנים"}}})}),function(a){a(rb)}(function(a){var b={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},c={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};return a.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 4>a?"रात":10>a?"सुबह":17>a?"दोपहर":20>a?"शाम":"रात"},week:{dow:0,doy:6}})}),function(a){a(rb)}(function(a){function b(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}return a.defineLocale("hr",{months:"sječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_"),monthsShort:"sje._vel._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),longDateFormat:{LT:"H:mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:b,mm:b,h:b,hh:b,d:"dan",dd:b,M:"mjesec",MM:b,y:"godinu",yy:b},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){function b(a,b,c,d){var e=a;switch(c){case"s":return d||b?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(d||b?" perc":" perce");case"mm":return e+(d||b?" perc":" perce");case"h":return"egy"+(d||b?" óra":" órája");case"hh":return e+(d||b?" óra":" órája");case"d":return"egy"+(d||b?" nap":" napja");case"dd":return e+(d||b?" nap":" napja");case"M":return"egy"+(d||b?" hónap":" hónapja");case"MM":return e+(d||b?" hónap":" hónapja");case"y":return"egy"+(d||b?" év":" éve");case"yy":return e+(d||b?" év":" éve")}return""}function c(a){return(a?"":"[múlt] ")+"["+d[this.day()]+"] LT[-kor]"}var d="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");return a.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D., LT",LLLL:"YYYY. MMMM D., dddd LT"},meridiem:function(a,b,c){return 12>a?c===!0?"de":"DE":c===!0?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return c.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return c.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:b,m:b,mm:b,h:b,hh:b,d:b,dd:b,M:b,MM:b,y:b,yy:b},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){function b(a,b){var c={nominative:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_"),accusative:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_")},d=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function c(a){var b="հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_");return b[a.month()]}function d(a){var b="կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_");return b[a.day()]}return a.defineLocale("hy-am",{months:b,monthsShort:c,weekdays:d,weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., LT",LLLL:"dddd, D MMMM YYYY թ., LT"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiem:function(a){return 4>a?"գիշերվա":12>a?"առավոտվա":17>a?"ցերեկվա":"երեկոյան"},ordinal:function(a,b){switch(b){case"DDD":case"w":case"W":case"DDDo":return 1===a?a+"-ին":a+"-րդ";default:return a}},week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){return a.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] LT",LLLL:"dddd, D MMMM YYYY [pukul] LT"},meridiem:function(a){return 11>a?"pagi":15>a?"siang":19>a?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){function b(a){return a%100===11?!0:a%10===1?!1:!0}function c(a,c,d,e){var f=a+" ";switch(d){case"s":return c||e?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return c?"mínúta":"mínútu";case"mm":return b(a)?f+(c||e?"mínútur":"mínútum"):c?f+"mínúta":f+"mínútu";case"hh":return b(a)?f+(c||e?"klukkustundir":"klukkustundum"):f+"klukkustund";case"d":return c?"dagur":e?"dag":"degi";case"dd":return b(a)?c?f+"dagar":f+(e?"daga":"dögum"):c?f+"dagur":f+(e?"dag":"degi");case"M":return c?"mánuður":e?"mánuð":"mánuði";case"MM":return b(a)?c?f+"mánuðir":f+(e?"mánuði":"mánuðum"):c?f+"mánuður":f+(e?"mánuð":"mánuði");case"y":return c||e?"ár":"ári";case"yy":return b(a)?f+(c||e?"ár":"árum"):f+(c||e?"ár":"ári")}}return a.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] LT",LLLL:"dddd, D. MMMM YYYY [kl.] LT"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:c,m:c,mm:c,h:"klukkustund",hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("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("_"),weekdaysMin:"D_L_Ma_Me_G_V_S".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:"[lo scorso] dddd [alle] LT",sameElse:"L"},relativeTime:{future:function(a){return(/^[0-9].+$/.test(a)?"tra":"in")+" "+a},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"Ah時m分",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日LT",LLLL:"YYYY年M月D日LT dddd"},meridiem:function(a){return 12>a?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})}),function(a){a(rb)}(function(a){function b(a,b){var c={nominative:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),accusative:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},d=/D[oD] *MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function c(a,b){var c={nominative:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),accusative:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_")},d=/(წინა|შემდეგ)/.test(b)?"accusative":"nominative";return c[d][a.day()]}return a.defineLocale("ka",{months:b,monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:c,weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(a){return/(წამი|წუთი|საათი|წელი)/.test(a)?a.replace(/ი$/,"ში"):a+"ში"},past:function(a){return/(წამი|წუთი|საათი|დღე|თვე)/.test(a)?a.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(a)?a.replace(/წელი$/,"წლის წინ"):void 0},s:"რამდენიმე წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},ordinal:function(a){return 0===a?a:1===a?a+"-ლი":20>a||100>=a&&a%20===0||a%100===0?"მე-"+a:a+"-ე"},week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){return a.defineLocale("km",{months:"មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysMin:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[ថ្ងៃនៈ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h시 mm분",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 LT",LLLL:"YYYY년 MMMM D일 dddd LT"},meridiem:function(a){return 12>a?"오전":"오후"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇초",ss:"%d초",m:"일분",mm:"%d분",h:"한시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한달",MM:"%d달",y:"일년",yy:"%d년"},ordinal:"%d일",meridiemParse:/(오전|오후)/,isPM:function(a){return"오후"===a}})}),function(a){a(rb)}(function(a){function b(a,b,c){var d={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return b?d[c][0]:d[c][1]}function c(a){var b=a.substr(0,a.indexOf(" "));return e(b)?"a "+a:"an "+a}function d(a){var b=a.substr(0,a.indexOf(" "));return e(b)?"viru "+a:"virun "+a}function e(a){if(a=parseInt(a,10),isNaN(a))return!1;if(0>a)return!0;if(10>a)return a>=4&&7>=a?!0:!1;if(100>a){var b=a%10,c=a/10;return e(0===b?c:b)}if(1e4>a){for(;a>=10;)a/=10;return e(a)}return a/=1e3,e(a)}return a.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),longDateFormat:{LT:"H:mm [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:c,past:d,s:"e puer Sekonnen",m:b,mm:"%d Minutten",h:b,hh:"%d Stonnen",d:b,dd:"%d Deeg",M:b,MM:"%d Méint",y:b,yy:"%d Joer"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){function b(a,b,c,d){return b?"kelios sekundės":d?"kelių sekundžių":"kelias sekundes"}function c(a,b,c,d){return b?e(c)[0]:d?e(c)[1]:e(c)[2]}function d(a){return a%10===0||a>10&&20>a}function e(a){return h[a].split("_")}function f(a,b,f,g){var h=a+" ";return 1===a?h+c(a,b,f[0],g):b?h+(d(a)?e(f)[1]:e(f)[0]):g?h+e(f)[1]:h+(d(a)?e(f)[1]:e(f)[2])}function g(a,b){var c=-1===b.indexOf("dddd HH:mm"),d=i[a.day()];return c?d:d.substring(0,d.length-2)+"į"}var h={m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"},i="sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_");return a.defineLocale("lt",{months:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:g,weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], LT [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, LT [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], LT [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, LT [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:b,m:c,mm:f,h:c,hh:f,d:c,dd:f,M:c,MM:f,y:c,yy:f},ordinal:function(a){return a+"-oji"},week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){function b(a,b,c){var d=a.split("_");return c?b%10===1&&11!==b?d[2]:d[3]:b%10===1&&11!==b?d[0]:d[1]}function c(a,c,e){return a+" "+b(d[e],a,c)}var d={mm:"minūti_minūtes_minūte_minūtes",hh:"stundu_stundas_stunda_stundas",dd:"dienu_dienas_diena_dienas",MM:"mēnesi_mēnešus_mēnesis_mēneši",yy:"gadu_gadus_gads_gadi"};return a.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, LT",LLLL:"YYYY. [gada] D. MMMM, dddd, LT"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"%s vēlāk",past:"%s agrāk",s:"dažas sekundes",m:"minūti",mm:c,h:"stundu",hh:c,d:"dienu",dd:c,M:"mēnesi",MM:c,y:"gadu",yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Во изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Во изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&20>c?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){return a.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiem:function(a){return 4>a?"രാത്രി":12>a?"രാവിലെ":17>a?"ഉച്ച കഴിഞ്ഞ്":20>a?"വൈകുന്നേരം":"രാത്രി"}})}),function(a){a(rb)}(function(a){var b={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},c={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};return a.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%s नंतर",past:"%s पूर्वी",s:"सेकंद",m:"एक मिनिट",mm:"%d मिनिटे",h:"एक तास",hh:"%d तास",d:"एक दिवस",dd:"%d दिवस",M:"एक महिना",MM:"%d महिने",y:"एक वर्ष",yy:"%d वर्षे"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 4>a?"रात्री":10>a?"सकाळी":17>a?"दुपारी":20>a?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})}),function(a){a(rb)}(function(a){return a.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] LT",LLLL:"dddd, D MMMM YYYY [pukul] LT"},meridiem:function(a){return 11>a?"pagi":15>a?"tengahari":19>a?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){var b={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},c={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};return a.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_င်္ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_င်္ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(a){return a.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("nb",{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ø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"H.mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] LT",LLLL:"dddd D. MMMM YYYY [kl.] LT"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"for %s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},ordinal:"%d.",week:{dow:1,doy:4}}) +}),function(a){a(rb)}(function(a){var b={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},c={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};return a.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आइ._सो._मङ्_बु._बि._शु._श.".split("_"),longDateFormat:{LT:"Aको h:mm बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return c[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return b[a]})},meridiem:function(a){return 3>a?"राती":10>a?"बिहान":15>a?"दिउँसो":18>a?"बेलुका":20>a?"साँझ":"राती"},calendar:{sameDay:"[आज] LT",nextDay:"[भोली] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडी",s:"केही समय",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){var b="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),c="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_");return a.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,d){return/-MMM-/.test(d)?c[a.month()]:b[a.month()]},weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),longDateFormat:{LT:"HH:mm",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"for %s sidan",s:"nokre sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){function b(a){return 5>a%10&&a%10>1&&~~(a/10)%10!==1}function c(a,c,d){var e=a+" ";switch(d){case"m":return c?"minuta":"minutę";case"mm":return e+(b(a)?"minuty":"minut");case"h":return c?"godzina":"godzinę";case"hh":return e+(b(a)?"godziny":"godzin");case"MM":return e+(b(a)?"miesiące":"miesięcy");case"yy":return e+(b(a)?"lata":"lat")}}var d="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),e="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");return a.defineLocale("pl",{months:function(a,b){return/D MMMM/.test(b)?e[a.month()]:d[a.month()]},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"nie_pon_wt_śr_czw_pt_sb".split("_"),weekdaysMin:"N_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:c,mm:c,h:c,hh:c,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:c,y:"rok",yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("pt-br",{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("_"),weekdaysMin:"dom_2ª_3ª_4ª_5ª_6ª_sáb".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] LT",LLLL:"dddd, D [de] MMMM [de] YYYY [às] LT"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinal:"%dº"})}),function(a){a(rb)}(function(a){return a.defineLocale("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("_"),weekdaysMin:"dom_2ª_3ª_4ª_5ª_6ª_sáb".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY LT",LLLL:"dddd, D [de] MMMM [de] YYYY LT"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinal:"%dº",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){function b(a,b,c){var d={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},e=" ";return(a%100>=20||a>=100&&a%100===0)&&(e=" de "),a+e+d[c]}return a.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:b,h:"o oră",hh:b,d:"o zi",dd:b,M:"o lună",MM:b,y:"un an",yy:b},week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){function b(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function c(a,c,d){var e={mm:c?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===d?c?"минута":"минуту":a+" "+b(e[d],+a)}function d(a,b){var c={nominative:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),accusative:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_")},d=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function e(a,b){var c={nominative:"янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),accusative:"янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек".split("_")},d=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function f(a,b){var c={nominative:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),accusative:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_")},d=/\[ ?[Вв] ?(?:прошлую|следующую)? ?\] ?dddd/.test(b)?"accusative":"nominative";return c[d][a.day()]}return a.defineLocale("ru",{months:d,monthsShort:e,weekdays:f,weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[й|я]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i],longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., LT",LLLL:"dddd, D MMMM YYYY г., LT"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(){return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT"},lastWeek:function(){switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:c,mm:c,h:"час",hh:c,d:"день",dd:c,M:"месяц",MM:c,y:"год",yy:c},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(a){return/^(дня|вечера)$/.test(a)},meridiem:function(a){return 4>a?"ночи":12>a?"утра":17>a?"дня":"вечера"},ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":return a+"-й";case"D":return a+"-го";case"w":case"W":return a+"-я";default:return a}},week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){function b(a){return a>1&&5>a}function c(a,c,d,e){var f=a+" ";switch(d){case"s":return c||e?"pár sekúnd":"pár sekundami";case"m":return c?"minúta":e?"minútu":"minútou";case"mm":return c||e?f+(b(a)?"minúty":"minút"):f+"minútami";break;case"h":return c?"hodina":e?"hodinu":"hodinou";case"hh":return c||e?f+(b(a)?"hodiny":"hodín"):f+"hodinami";break;case"d":return c||e?"deň":"dňom";case"dd":return c||e?f+(b(a)?"dni":"dní"):f+"dňami";break;case"M":return c||e?"mesiac":"mesiacom";case"MM":return c||e?f+(b(a)?"mesiace":"mesiacov"):f+"mesiacmi";break;case"y":return c||e?"rok":"rokom";case"yy":return c||e?f+(b(a)?"roky":"rokov"):f+"rokmi"}}var d="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),e="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");return a.defineLocale("sk",{months:d,monthsShort:e,monthsParse:function(a,b){var c,d=[];for(c=0;12>c;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(d,e),weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd D. MMMM YYYY LT"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:c,m:c,mm:c,h:c,hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){function b(a,b,c){var d=a+" ";switch(c){case"m":return b?"ena minuta":"eno minuto";case"mm":return d+=1===a?"minuta":2===a?"minuti":3===a||4===a?"minute":"minut";case"h":return b?"ena ura":"eno uro";case"hh":return d+=1===a?"ura":2===a?"uri":3===a||4===a?"ure":"ur";case"dd":return d+=1===a?"dan":"dni";case"MM":return d+=1===a?"mesec":2===a?"meseca":3===a||4===a?"mesece":"mesecev";case"yy":return d+=1===a?"leto":2===a?"leti":3===a||4===a?"leta":"let"}}return a.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),longDateFormat:{LT:"H:mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[prejšnja] dddd [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"%s nazaj",s:"nekaj sekund",m:b,mm:b,h:b,hh:b,d:"en dan",dd:b,M:"en mesec",MM:b,y:"eno leto",yy:b},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){return a.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),meridiem:function(a){return 12>a?"PD":"MD"},longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},ordinal:"%d.",week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){var b={words:{m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(a,c,d){var e=b.words[d];return 1===d.length?c?e[0]:e[1]:a+" "+b.correctGrammaticalCase(a,e)}};return a.defineLocale("sr-cyrl",{months:["јануар","фебруар","март","април","мај","јун","јул","август","септембар","октобар","новембар","децембар"],monthsShort:["јан.","феб.","мар.","апр.","мај","јун","јул","авг.","сеп.","окт.","нов.","дец."],weekdays:["недеља","понедељак","уторак","среда","четвртак","петак","субота"],weekdaysShort:["нед.","пон.","уто.","сре.","чет.","пет.","суб."],weekdaysMin:["не","по","ут","ср","че","пе","су"],longDateFormat:{LT:"H:mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var a=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:b.translate,mm:b.translate,h:b.translate,hh:b.translate,d:"дан",dd:b.translate,M:"месец",MM:b.translate,y:"годину",yy:b.translate},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){var b={words:{m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(a,c,d){var e=b.words[d];return 1===d.length?c?e[0]:e[1]:a+" "+b.correctGrammaticalCase(a,e)}};return a.defineLocale("sr",{months:["januar","februar","mart","april","maj","jun","jul","avgust","septembar","oktobar","novembar","decembar"],monthsShort:["jan.","feb.","mar.","apr.","maj","jun","jul","avg.","sep.","okt.","nov.","dec."],weekdays:["nedelja","ponedeljak","utorak","sreda","četvrtak","petak","subota"],weekdaysShort:["ned.","pon.","uto.","sre.","čet.","pet.","sub."],weekdaysMin:["ne","po","ut","sr","če","pe","su"],longDateFormat:{LT:"H:mm",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY LT",LLLL:"dddd, D. MMMM YYYY LT"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:b.translate,mm:b.translate,h:b.translate,hh:b.translate,d:"dan",dd:b.translate,M:"mesec",MM:b.translate,y:"godinu",yy:b.translate},ordinal:"%d.",week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){return a.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"dddd LT",lastWeek:"[Förra] dddd[en] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"e":1===b?"a":2===b?"a":3===b?"e":"e";return a+c},week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, LT",LLLL:"dddd, D MMMM YYYY, LT"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},ordinal:function(a){return a+"வது"},meridiem:function(a){return a>=6&&10>=a?" காலை":a>=10&&14>=a?" நண்பகல்":a>=14&&18>=a?" எற்பாடு":a>=18&&20>=a?" மாலை":a>=20&&24>=a?" இரவு":a>=0&&6>=a?" வைகறை":void 0},week:{dow:0,doy:6}})}),function(a){a(rb)}(function(a){return a.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา".split("_"),weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),longDateFormat:{LT:"H นาฬิกา m นาที",L:"YYYY/MM/DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา LT",LLLL:"วันddddที่ D MMMM YYYY เวลา LT"},meridiem:function(a){return 12>a?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}),function(a){a(rb)}(function(a){return a.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM DD, YYYY LT"},calendar:{sameDay:"[Ngayon sa] LT",nextDay:"[Bukas sa] LT",nextWeek:"dddd [sa] LT",lastDay:"[Kahapon sa] LT",lastWeek:"dddd [huling linggo] LT",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},ordinal:function(a){return a},week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){var b={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};return a.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd, D MMMM YYYY LT"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(a){if(0===a)return a+"'ıncı";var c=a%10,d=a%100-c,e=a>=100?100:null;return a+(b[c]||b[d]||b[e])},week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){return a.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}),function(a){a(rb)}(function(a){return a.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"dddd D MMMM YYYY LT"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})}),function(a){a(rb)}(function(a){function b(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function c(a,c,d){var e={mm:"хвилина_хвилини_хвилин",hh:"година_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===d?c?"хвилина":"хвилину":"h"===d?c?"година":"годину":a+" "+b(e[d],+a)}function d(a,b){var c={nominative:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_"),accusative:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_")},d=/D[oD]? *MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function e(a,b){var c={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")},d=/(\[[ВвУу]\]) ?dddd/.test(b)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(b)?"genitive":"nominative";return c[d][a.day()]}function f(a){return function(){return a+"о"+(11===this.hours()?"б":"")+"] LT"}}return a.defineLocale("uk",{months:d,monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:e,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., LT",LLLL:"dddd, D MMMM YYYY р., LT"},calendar:{sameDay:f("[Сьогодні "),nextDay:f("[Завтра "),lastDay:f("[Вчора "),nextWeek:f("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return f("[Минулої] dddd [").call(this);case 1:case 2:case 4:return f("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:c,mm:c,h:"годину",hh:c,d:"день",dd:c,M:"місяць",MM:c,y:"рік",yy:c},meridiem:function(a){return 4>a?"ночі":12>a?"ранку":17>a?"дня":"вечора"},ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a+"-й";case"D":return a+"-го";default:return a}},week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){return a.defineLocale("uz",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY LT",LLLL:"D MMMM YYYY, dddd LT"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})}),function(a){a(rb)}(function(a){return a.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY LT",LLLL:"dddd, D MMMM [năm] YYYY LT",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY LT",llll:"ddd, D MMM YYYY LT"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},ordinal:function(a){return a},week:{dow:1,doy:4}})}),function(a){a(rb)}(function(a){return a.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah点mm",L:"YYYY-MM-DD",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日LT",LLLL:"YYYY年MMMD日ddddLT",l:"YYYY-MM-DD",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日LT",llll:"YYYY年MMMD日ddddLT"},meridiem:function(a,b){var c=100*a+b;return 600>c?"凌晨":900>c?"早上":1130>c?"上午":1230>c?"中午":1800>c?"下午":"晚上"},calendar:{sameDay:function(){return 0===this.minutes()?"[今天]Ah[点整]":"[今天]LT"},nextDay:function(){return 0===this.minutes()?"[明天]Ah[点整]":"[明天]LT"},lastDay:function(){return 0===this.minutes()?"[昨天]Ah[点整]":"[昨天]LT"},nextWeek:function(){var b,c;return b=a().startOf("week"),c=this.unix()-b.unix()>=604800?"[下]":"[本]",0===this.minutes()?c+"dddAh点整":c+"dddAh点mm"},lastWeek:function(){var b,c;return b=a().startOf("week"),c=this.unix()c?"早上":1130>c?"上午":1230>c?"中午":1800>c?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日"; +case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"一分鐘",mm:"%d分鐘",h:"一小時",hh:"%d小時",d:"一天",dd:"%d天",M:"一個月",MM:"%d個月",y:"一年",yy:"%d年"}})}),rb.locale("en"),Gb?module.exports=rb:"function"==typeof define&&define.amd?(define("moment",function(a,b,c){return c.config&&c.config()&&c.config().noGlobal===!0&&(vb.moment=sb),rb}),qb(!0)):qb()}).call(this); \ No newline at end of file diff --git a/ajax/libs/moment.js/2.8.0/moment.js b/ajax/libs/moment.js/2.8.0/moment.js new file mode 100644 index 000000000..3dbc6e7e5 --- /dev/null +++ b/ajax/libs/moment.js/2.8.0/moment.js @@ -0,0 +1,2803 @@ +//! moment.js +//! version : 2.8.0 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com + +(function (undefined) { + /************************************ + Constants + ************************************/ + + var moment, + VERSION = '2.8.0', + // the global-scope this is NOT the global object in Node.js + globalScope = typeof global !== 'undefined' ? global : this, + oldGlobalMoment, + round = Math.round, + i, + + YEAR = 0, + MONTH = 1, + DATE = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECOND = 6, + + // internal storage for locale config files + locales = {}, + + // extra moment internal properties (plugins register props here) + momentProperties = [], + + // check for nodeJS + hasModule = (typeof module !== 'undefined' && module.exports), + + // ASP.NET json date format regex + aspNetJsonRegex = /^\/?Date\((\-?\d+)/i, + aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/, + + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/, + + // format tokens + formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g, + localFormattingTokens = /(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g, + + // parsing token regexes + parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99 + parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999 + parseTokenOneToFourDigits = /\d{1,4}/, // 0 - 9999 + parseTokenOneToSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999 + parseTokenDigits = /\d+/, // nonzero number of digits + parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic. + parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z + parseTokenT = /T/i, // T (ISO separator) + parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 + parseTokenOrdinal = /\d{1,2}/, + + //strict parsing regexes + parseTokenOneDigit = /\d/, // 0 - 9 + parseTokenTwoDigits = /\d\d/, // 00 - 99 + parseTokenThreeDigits = /\d{3}/, // 000 - 999 + parseTokenFourDigits = /\d{4}/, // 0000 - 9999 + parseTokenSixDigits = /[+-]?\d{6}/, // -999,999 - 999,999 + parseTokenSignedNumber = /[+-]?\d+/, // -inf - inf + + // iso 8601 regex + // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) + isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + + isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', + + isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/], + ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/], + ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/], + ['GGGG-[W]WW', /\d{4}-W\d{2}/], + ['YYYY-DDD', /\d{4}-\d{3}/] + ], + + // iso time formats and regexes + isoTimes = [ + ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], + ['HH:mm', /(T| )\d\d:\d\d/], + ['HH', /(T| )\d\d/] + ], + + // timezone chunker "+10:00" > ["10", "00"] or "-1530" > ["-15", "30"] + parseTimezoneChunker = /([\+\-]|\d\d)/gi, + + // getter and setter names + proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'), + unitMillisecondFactors = { + 'Milliseconds' : 1, + 'Seconds' : 1e3, + 'Minutes' : 6e4, + 'Hours' : 36e5, + 'Days' : 864e5, + 'Months' : 2592e6, + 'Years' : 31536e6 + }, + + unitAliases = { + ms : 'millisecond', + s : 'second', + m : 'minute', + h : 'hour', + d : 'day', + D : 'date', + w : 'week', + W : 'isoWeek', + M : 'month', + Q : 'quarter', + y : 'year', + DDD : 'dayOfYear', + e : 'weekday', + E : 'isoWeekday', + gg: 'weekYear', + GG: 'isoWeekYear' + }, + + camelFunctions = { + dayofyear : 'dayOfYear', + isoweekday : 'isoWeekday', + isoweek : 'isoWeek', + weekyear : 'weekYear', + isoweekyear : 'isoWeekYear' + }, + + // format function strings + formatFunctions = {}, + + // default relative time thresholds + relativeTimeThresholds = { + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month + M: 11 // months to year + }, + + // tokens to ordinalize and pad + ordinalizeTokens = 'DDD w W M D d'.split(' '), + paddedTokens = 'M D H h m s w W'.split(' '), + + formatTokenFunctions = { + M : function () { + return this.month() + 1; + }, + MMM : function (format) { + return this.localeData().monthsShort(this, format); + }, + MMMM : function (format) { + return this.localeData().months(this, format); + }, + D : function () { + return this.date(); + }, + DDD : function () { + return this.dayOfYear(); + }, + d : function () { + return this.day(); + }, + dd : function (format) { + return this.localeData().weekdaysMin(this, format); + }, + ddd : function (format) { + return this.localeData().weekdaysShort(this, format); + }, + dddd : function (format) { + return this.localeData().weekdays(this, format); + }, + w : function () { + return this.week(); + }, + W : function () { + return this.isoWeek(); + }, + YY : function () { + return leftZeroFill(this.year() % 100, 2); + }, + YYYY : function () { + return leftZeroFill(this.year(), 4); + }, + YYYYY : function () { + return leftZeroFill(this.year(), 5); + }, + YYYYYY : function () { + var y = this.year(), sign = y >= 0 ? '+' : '-'; + return sign + leftZeroFill(Math.abs(y), 6); + }, + gg : function () { + return leftZeroFill(this.weekYear() % 100, 2); + }, + gggg : function () { + return leftZeroFill(this.weekYear(), 4); + }, + ggggg : function () { + return leftZeroFill(this.weekYear(), 5); + }, + GG : function () { + return leftZeroFill(this.isoWeekYear() % 100, 2); + }, + GGGG : function () { + return leftZeroFill(this.isoWeekYear(), 4); + }, + GGGGG : function () { + return leftZeroFill(this.isoWeekYear(), 5); + }, + e : function () { + return this.weekday(); + }, + E : function () { + return this.isoWeekday(); + }, + a : function () { + return this.localeData().meridiem(this.hours(), this.minutes(), true); + }, + A : function () { + return this.localeData().meridiem(this.hours(), this.minutes(), false); + }, + H : function () { + return this.hours(); + }, + h : function () { + return this.hours() % 12 || 12; + }, + m : function () { + return this.minutes(); + }, + s : function () { + return this.seconds(); + }, + S : function () { + return toInt(this.milliseconds() / 100); + }, + SS : function () { + return leftZeroFill(toInt(this.milliseconds() / 10), 2); + }, + SSS : function () { + return leftZeroFill(this.milliseconds(), 3); + }, + SSSS : function () { + return leftZeroFill(this.milliseconds(), 3); + }, + Z : function () { + var a = -this.zone(), + b = '+'; + if (a < 0) { + a = -a; + b = '-'; + } + return b + leftZeroFill(toInt(a / 60), 2) + ':' + leftZeroFill(toInt(a) % 60, 2); + }, + ZZ : function () { + var a = -this.zone(), + b = '+'; + if (a < 0) { + a = -a; + b = '-'; + } + return b + leftZeroFill(toInt(a / 60), 2) + leftZeroFill(toInt(a) % 60, 2); + }, + z : function () { + return this.zoneAbbr(); + }, + zz : function () { + return this.zoneName(); + }, + X : function () { + return this.unix(); + }, + Q : function () { + return this.quarter(); + } + }, + + deprecations = {}, + + lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin']; + + // Pick the first defined of two or three arguments. dfl comes from + // default. + function dfl(a, b, c) { + switch (arguments.length) { + case 2: return a != null ? a : b; + case 3: return a != null ? a : b != null ? b : c; + default: throw new Error('Implement me'); + } + } + + function defaultParsingFlags() { + // We need to deep clone this object, and es5 standard is not very + // helpful. + return { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false, + iso: false + }; + } + + function printMsg(msg) { + if (moment.suppressDeprecationWarnings === false && + typeof console !== 'undefined' && console.warn) { + console.warn("Deprecation warning: " + msg); + } + } + + function deprecate(msg, fn) { + var firstTime = true; + return extend(function () { + if (firstTime) { + printMsg(msg); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } + + function deprecateSimple(name, msg) { + if (!deprecations[name]) { + printMsg(msg); + deprecations[name] = true; + } + } + + function padToken(func, count) { + return function (a) { + return leftZeroFill(func.call(this, a), count); + }; + } + function ordinalizeToken(func, period) { + return function (a) { + return this.localeData().ordinal(func.call(this, a), period); + }; + } + + while (ordinalizeTokens.length) { + i = ordinalizeTokens.pop(); + formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i); + } + while (paddedTokens.length) { + i = paddedTokens.pop(); + formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2); + } + formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3); + + + /************************************ + Constructors + ************************************/ + + function Locale() { + } + + // Moment prototype object + function Moment(config, skipOverflow) { + if (skipOverflow !== false) { + checkOverflow(config); + } + copyConfig(this, config); + this._d = new Date(+config._d); + } + + // Duration Constructor + function Duration(duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + // representation for dateAddRemove + this._milliseconds = +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 36e5; // 1000 * 60 * 60 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + + weeks * 7; + // It is impossible translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + + quarters * 3 + + years * 12; + + this._data = {}; + + this._locale = moment.localeData(); + + this._bubble(); + } + + /************************************ + Helpers + ************************************/ + + + function extend(a, b) { + for (var i in b) { + if (b.hasOwnProperty(i)) { + a[i] = b[i]; + } + } + + if (b.hasOwnProperty('toString')) { + a.toString = b.toString; + } + + if (b.hasOwnProperty('valueOf')) { + a.valueOf = b.valueOf; + } + + return a; + } + + function copyConfig(to, from) { + var i, prop, val; + + if (typeof from._isAMomentObject !== 'undefined') { + to._isAMomentObject = from._isAMomentObject; + } + if (typeof from._i !== 'undefined') { + to._i = from._i; + } + if (typeof from._f !== 'undefined') { + to._f = from._f; + } + if (typeof from._l !== 'undefined') { + to._l = from._l; + } + if (typeof from._strict !== 'undefined') { + to._strict = from._strict; + } + if (typeof from._tzm !== 'undefined') { + to._tzm = from._tzm; + } + if (typeof from._isUTC !== 'undefined') { + to._isUTC = from._isUTC; + } + if (typeof from._offset !== 'undefined') { + to._offset = from._offset; + } + if (typeof from._pf !== 'undefined') { + to._pf = from._pf; + } + if (typeof from._locale !== 'undefined') { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i in momentProperties) { + prop = momentProperties[i]; + val = from[prop]; + if (typeof val !== 'undefined') { + to[prop] = val; + } + } + } + + return to; + } + + function absRound(number) { + if (number < 0) { + return Math.ceil(number); + } else { + return Math.floor(number); + } + } + + // left zero fill a number + // see http://jsperf.com/left-zero-filling for performance comparison + function leftZeroFill(number, targetLength, forceSign) { + var output = '' + Math.abs(number), + sign = number >= 0; + + while (output.length < targetLength) { + output = '0' + output; + } + return (sign ? (forceSign ? '+' : '') : '-') + output; + } + + function positiveMomentsDifference(base, other) { + var res = {milliseconds: 0, months: 0}; + + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + + return res; + } + + function momentsDifference(base, other) { + var res; + other = makeAs(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; + } + + // TODO: remove 'name' arg after deprecation is removed + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple(name, "moment()." + name + "(period, number) is deprecated. Please use moment()." + name + "(number, period)."); + tmp = val; val = period; period = tmp; + } + + val = typeof val === 'string' ? +val : val; + dur = moment.duration(val, period); + addOrSubtractDurationFromMoment(this, dur, direction); + return this; + }; + } + + function addOrSubtractDurationFromMoment(mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = duration._days, + months = duration._months; + updateOffset = updateOffset == null ? true : updateOffset; + + if (milliseconds) { + mom._d.setTime(+mom._d + milliseconds * isAdding); + } + if (days) { + rawSetter(mom, 'Date', rawGetter(mom, 'Date') + days * isAdding); + } + if (months) { + rawMonthSetter(mom, rawGetter(mom, 'Month') + months * isAdding); + } + if (updateOffset) { + moment.updateOffset(mom, days || months); + } + } + + // check if is an array + function isArray(input) { + return Object.prototype.toString.call(input) === '[object Array]'; + } + + function isDate(input) { + return Object.prototype.toString.call(input) === '[object Date]' || + input instanceof Date; + } + + // compare two arrays, return the number of differences + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ((dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { + diffs++; + } + } + return diffs + lengthDiff; + } + + function normalizeUnits(units) { + if (units) { + var lowered = units.toLowerCase().replace(/(.)s$/, '$1'); + units = unitAliases[units] || camelFunctions[lowered] || lowered; + } + return units; + } + + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (inputObject.hasOwnProperty(prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; + } + + function makeList(field) { + var count, setter; + + if (field.indexOf('week') === 0) { + count = 7; + setter = 'day'; + } + else if (field.indexOf('month') === 0) { + count = 12; + setter = 'month'; + } + else { + return; + } + + moment[field] = function (format, index) { + var i, getter, + method = moment._locale[field], + results = []; + + if (typeof format === 'number') { + index = format; + format = undefined; + } + + getter = function (i) { + var m = moment().utc().set(setter, i); + return method.call(moment._locale, m, format || ''); + }; + + if (index != null) { + return getter(index); + } + else { + for (i = 0; i < count; i++) { + results.push(getter(i)); + } + return results; + } + }; + } + + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + if (coercedNumber >= 0) { + value = Math.floor(coercedNumber); + } else { + value = Math.ceil(coercedNumber); + } + } + + return value; + } + + function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); + } + + function weeksInYear(year, dow, doy) { + return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week; + } + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + + function checkOverflow(m) { + var overflow; + if (m._a && m._pf.overflow === -2) { + overflow = + m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH : + m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE : + m._a[HOUR] < 0 || m._a[HOUR] > 23 ? HOUR : + m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE : + m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND : + m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND : + -1; + + if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } + + m._pf.overflow = overflow; + } + } + + function isValid(m) { + if (m._isValid == null) { + m._isValid = !isNaN(m._d.getTime()) && + m._pf.overflow < 0 && + !m._pf.empty && + !m._pf.invalidMonth && + !m._pf.nullInput && + !m._pf.invalidFormat && + !m._pf.userInvalidated; + + if (m._strict) { + m._isValid = m._isValid && + m._pf.charsLeftOver === 0 && + m._pf.unusedTokens.length === 0; + } + } + return m._isValid; + } + + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } + + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, j, next, locale, split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return null; + } + + function loadLocale(name) { + var oldLocale = null; + if (!locales[name] && hasModule) { + try { + oldLocale = moment.locale(); + require('./locale/' + name); + // because defineLocale currently also sets the global locale, we want to undo that for lazy loaded locales + moment.locale(oldLocale); + } catch (e) { } + } + return locales[name]; + } + + // Return a moment from input, that is local/utc/zone equivalent to model. + function makeAs(input, model) { + return model._isUTC ? moment(input).zone(model._offset || 0) : + moment(input).local(); + } + + /************************************ + Locale + ************************************/ + + + extend(Locale.prototype, { + + set : function (config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (typeof prop === 'function') { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + }, + + _months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + months : function (m) { + return this._months[m.month()]; + }, + + _monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + monthsShort : function (m) { + return this._monthsShort[m.month()]; + }, + + monthsParse : function (monthName) { + var i, mom, regex; + + if (!this._monthsParse) { + this._monthsParse = []; + } + + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + if (!this._monthsParse[i]) { + mom = moment.utc([2000, i]); + regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (this._monthsParse[i].test(monthName)) { + return i; + } + } + }, + + _weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdays : function (m) { + return this._weekdays[m.day()]; + }, + + _weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysShort : function (m) { + return this._weekdaysShort[m.day()]; + }, + + _weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + weekdaysMin : function (m) { + return this._weekdaysMin[m.day()]; + }, + + weekdaysParse : function (weekdayName) { + var i, mom, regex; + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + if (!this._weekdaysParse[i]) { + mom = moment([2000, 1]).day(i); + regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } + }, + + _longDateFormat : { + LT : 'h:mm A', + L : 'MM/DD/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY LT', + LLLL : 'dddd, MMMM D, YYYY LT' + }, + longDateFormat : function (key) { + var output = this._longDateFormat[key]; + if (!output && this._longDateFormat[key.toUpperCase()]) { + output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) { + return val.slice(1); + }); + this._longDateFormat[key] = output; + } + return output; + }, + + isPM : function (input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return ((input + '').toLowerCase().charAt(0) === 'p'); + }, + + _meridiemParse : /[ap]\.?m?\.?/i, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + }, + + _calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + calendar : function (key, mom) { + var output = this._calendar[key]; + return typeof output === 'function' ? output.apply(mom) : output; + }, + + _relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + + relativeTime : function (number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return (typeof output === 'function') ? + output(number, withoutSuffix, string, isFuture) : + output.replace(/%d/i, number); + }, + + pastFuture : function (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); + }, + + ordinal : function (number) { + return this._ordinal.replace('%d', number); + }, + _ordinal : '%d', + + preparse : function (string) { + return string; + }, + + postformat : function (string) { + return string; + }, + + week : function (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + }, + + _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. + }, + + _invalidDate: 'Invalid date', + invalidDate: function () { + return this._invalidDate; + } + }); + + /************************************ + Formatting + ************************************/ + + + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); + } + + function makeFormatFunction(format) { + var array = format.match(formattingTokens), i, length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = ''; + for (i = 0; i < length; i++) { + output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; + } + return output; + }; + } + + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + + if (!formatFunctions[format]) { + formatFunctions[format] = makeFormatFunction(format); + } + + return formatFunctions[format](m); + } + + function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; + } + + + /************************************ + Parsing + ************************************/ + + + // get the regex to find the next token + function getParseRegexForToken(token, config) { + var a, strict = config._strict; + switch (token) { + case 'Q': + return parseTokenOneDigit; + case 'DDDD': + return parseTokenThreeDigits; + case 'YYYY': + case 'GGGG': + case 'gggg': + return strict ? parseTokenFourDigits : parseTokenOneToFourDigits; + case 'Y': + case 'G': + case 'g': + return parseTokenSignedNumber; + case 'YYYYYY': + case 'YYYYY': + case 'GGGGG': + case 'ggggg': + return strict ? parseTokenSixDigits : parseTokenOneToSixDigits; + case 'S': + if (strict) { + return parseTokenOneDigit; + } + /* falls through */ + case 'SS': + if (strict) { + return parseTokenTwoDigits; + } + /* falls through */ + case 'SSS': + if (strict) { + return parseTokenThreeDigits; + } + /* falls through */ + case 'DDD': + return parseTokenOneToThreeDigits; + case 'MMM': + case 'MMMM': + case 'dd': + case 'ddd': + case 'dddd': + return parseTokenWord; + case 'a': + case 'A': + return config._locale._meridiemParse; + case 'X': + return parseTokenTimestampMs; + case 'Z': + case 'ZZ': + return parseTokenTimezone; + case 'T': + return parseTokenT; + case 'SSSS': + return parseTokenDigits; + case 'MM': + case 'DD': + case 'YY': + case 'GG': + case 'gg': + case 'HH': + case 'hh': + case 'mm': + case 'ss': + case 'ww': + case 'WW': + return strict ? parseTokenTwoDigits : parseTokenOneOrTwoDigits; + case 'M': + case 'D': + case 'd': + case 'H': + case 'h': + case 'm': + case 's': + case 'w': + case 'W': + case 'e': + case 'E': + return parseTokenOneOrTwoDigits; + case 'Do': + return parseTokenOrdinal; + default : + a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), 'i')); + return a; + } + } + + function timezoneMinutesFromString(string) { + string = string || ''; + var possibleTzMatches = (string.match(parseTokenTimezone) || []), + tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [], + parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0], + minutes = +(parts[1] * 60) + toInt(parts[2]); + + return parts[0] === '+' ? -minutes : minutes; + } + + // function to convert string input to date + function addTimeToArrayFromToken(token, input, config) { + var a, datePartArray = config._a; + + switch (token) { + // QUARTER + case 'Q': + if (input != null) { + datePartArray[MONTH] = (toInt(input) - 1) * 3; + } + break; + // MONTH + case 'M' : // fall through to MM + case 'MM' : + if (input != null) { + datePartArray[MONTH] = toInt(input) - 1; + } + break; + case 'MMM' : // fall through to MMMM + case 'MMMM' : + a = config._locale.monthsParse(input); + // if we didn't find a month name, mark the date as invalid. + if (a != null) { + datePartArray[MONTH] = a; + } else { + config._pf.invalidMonth = input; + } + break; + // DAY OF MONTH + case 'D' : // fall through to DD + case 'DD' : + if (input != null) { + datePartArray[DATE] = toInt(input); + } + break; + case 'Do' : + if (input != null) { + datePartArray[DATE] = toInt(parseInt(input, 10)); + } + break; + // DAY OF YEAR + case 'DDD' : // fall through to DDDD + case 'DDDD' : + if (input != null) { + config._dayOfYear = toInt(input); + } + + break; + // YEAR + case 'YY' : + datePartArray[YEAR] = moment.parseTwoDigitYear(input); + break; + case 'YYYY' : + case 'YYYYY' : + case 'YYYYYY' : + datePartArray[YEAR] = toInt(input); + break; + // AM / PM + case 'a' : // fall through to A + case 'A' : + config._isPm = config._locale.isPM(input); + break; + // 24 HOUR + case 'H' : // fall through to hh + case 'HH' : // fall through to hh + case 'h' : // fall through to hh + case 'hh' : + datePartArray[HOUR] = toInt(input); + break; + // MINUTE + case 'm' : // fall through to mm + case 'mm' : + datePartArray[MINUTE] = toInt(input); + break; + // SECOND + case 's' : // fall through to ss + case 'ss' : + datePartArray[SECOND] = toInt(input); + break; + // MILLISECOND + case 'S' : + case 'SS' : + case 'SSS' : + case 'SSSS' : + datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000); + break; + // UNIX TIMESTAMP WITH MS + case 'X': + config._d = new Date(parseFloat(input) * 1000); + break; + // TIMEZONE + case 'Z' : // fall through to ZZ + case 'ZZ' : + config._useUTC = true; + config._tzm = timezoneMinutesFromString(input); + break; + // WEEKDAY - human + case 'dd': + case 'ddd': + case 'dddd': + a = config._locale.weekdaysParse(input); + // if we didn't get a weekday name, mark the date as invalid + if (a != null) { + config._w = config._w || {}; + config._w['d'] = a; + } else { + config._pf.invalidWeekday = input; + } + break; + // WEEK, WEEK DAY - numeric + case 'w': + case 'ww': + case 'W': + case 'WW': + case 'd': + case 'e': + case 'E': + token = token.substr(0, 1); + /* falls through */ + case 'gggg': + case 'GGGG': + case 'GGGGG': + token = token.substr(0, 2); + if (input) { + config._w = config._w || {}; + config._w[token] = toInt(input); + } + break; + case 'gg': + case 'GG': + config._w = config._w || {}; + config._w[token] = moment.parseTwoDigitYear(input); + } + } + + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = dfl(w.GG, config._a[YEAR], weekOfYear(moment(), 1, 4).year); + week = dfl(w.W, 1); + weekday = dfl(w.E, 1); + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year); + week = dfl(w.w, 1); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < dow) { + ++week; + } + } else if (w.e != null) { + // local weekday -- counting starts from begining of week + weekday = w.e + dow; + } else { + // default to begining of week + weekday = dow; + } + } + temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow); + + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } + + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function dateFromConfig(config) { + var i, date, input = [], currentDate, yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear) { + yearToUse = dfl(config._a[YEAR], currentDate[YEAR]); + + if (config._dayOfYear > daysInYear(yearToUse)) { + config._pf._overflowDayOfYear = true; + } + + date = makeUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + } + + config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input); + // Apply timezone offset from input. The actual zone can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() + config._tzm); + } + } + + function dateFromObject(config) { + var normalizedInput; + + if (config._d) { + return; + } + + normalizedInput = normalizeObjectUnits(config._i); + config._a = [ + normalizedInput.year, + normalizedInput.month, + normalizedInput.day, + normalizedInput.hour, + normalizedInput.minute, + normalizedInput.second, + normalizedInput.millisecond + ]; + + dateFromConfig(config); + } + + function currentDateArray(config) { + var now = new Date(); + if (config._useUTC) { + return [ + now.getUTCFullYear(), + now.getUTCMonth(), + now.getUTCDate() + ]; + } else { + return [now.getFullYear(), now.getMonth(), now.getDate()]; + } + } + + // date from string and format string + function makeDateFromStringAndFormat(config) { + if (config._f === moment.ISO_8601) { + parseISO(config); + return; + } + + config._a = []; + config._pf.empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, parsedInput, tokens, token, skipped, + stringLength = string.length, + totalParsedInputLength = 0; + + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + config._pf.unusedInput.push(skipped); + } + string = string.slice(string.indexOf(parsedInput) + parsedInput.length); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + config._pf.empty = false; + } + else { + config._pf.unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } + else if (config._strict && !parsedInput) { + config._pf.unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + config._pf.charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + config._pf.unusedInput.push(string); + } + + // handle am pm + if (config._isPm && config._a[HOUR] < 12) { + config._a[HOUR] += 12; + } + // if is 12 am, change hours to 0 + if (config._isPm === false && config._a[HOUR] === 12) { + config._a[HOUR] = 0; + } + + dateFromConfig(config); + checkOverflow(config); + } + + function unescapeFormat(s) { + return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + }); + } + + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function regexpEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + + // date from string and array of format strings + function makeDateFromStringAndArray(config) { + var tempConfig, + bestMoment, + + scoreToBeat, + i, + currentScore; + + if (config._f.length === 0) { + config._pf.invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + tempConfig = copyConfig({}, config); + tempConfig._pf = defaultParsingFlags(); + tempConfig._f = config._f[i]; + makeDateFromStringAndFormat(tempConfig); + + if (!isValid(tempConfig)) { + continue; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += tempConfig._pf.charsLeftOver; + + //or tokens + currentScore += tempConfig._pf.unusedTokens.length * 10; + + tempConfig._pf.score = currentScore; + + if (scoreToBeat == null || currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + + extend(config, bestMoment || tempConfig); + } + + // date from iso format + function parseISO(config) { + var i, l, + string = config._i, + match = isoRegex.exec(string); + + if (match) { + config._pf.iso = true; + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(string)) { + // match[5] should be "T" or undefined + config._f = isoDates[i][0] + (match[6] || ' '); + break; + } + } + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(string)) { + config._f += isoTimes[i][0]; + break; + } + } + if (string.match(parseTokenTimezone)) { + config._f += 'Z'; + } + makeDateFromStringAndFormat(config); + } else { + config._isValid = false; + } + } + + // date from iso format or fallback + function makeDateFromString(config) { + parseISO(config); + if (config._isValid === false) { + delete config._isValid; + moment.createFromInputFallback(config); + } + } + + function makeDateFromInput(config) { + var input = config._i, matched; + if (input === undefined) { + config._d = new Date(); + } else if (isDate(input)) { + config._d = new Date(+input); + } else if ((matched = aspNetJsonRegex.exec(input)) !== null) { + config._d = new Date(+matched[1]); + } else if (typeof input === 'string') { + makeDateFromString(config); + } else if (isArray(input)) { + config._a = input.slice(0); + dateFromConfig(config); + } else if (typeof(input) === 'object') { + dateFromObject(config); + } else if (typeof(input) === 'number') { + // from milliseconds + config._d = new Date(input); + } else { + moment.createFromInputFallback(config); + } + } + + function makeDate(y, m, d, h, M, s, ms) { + //can't just apply() to create a date: + //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply + var date = new Date(y, m, d, h, M, s, ms); + + //the date constructor doesn't accept years < 1970 + if (y < 1970) { + date.setFullYear(y); + } + return date; + } + + function makeUTCDate(y) { + var date = new Date(Date.UTC.apply(null, arguments)); + if (y < 1970) { + date.setUTCFullYear(y); + } + return date; + } + + function parseWeekday(input, locale) { + if (typeof input === 'string') { + if (!isNaN(input)) { + input = parseInt(input, 10); + } + else { + input = locale.weekdaysParse(input); + if (typeof input !== 'number') { + return null; + } + } + } + return input; + } + + /************************************ + Relative Time + ************************************/ + + + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } + + function relativeTime(posNegDuration, withoutSuffix, locale) { + var duration = moment.duration(posNegDuration).abs(), + seconds = round(duration.as('s')), + minutes = round(duration.as('m')), + hours = round(duration.as('h')), + days = round(duration.as('d')), + months = round(duration.as('M')), + years = round(duration.as('y')), + + args = seconds < relativeTimeThresholds.s && ['s', seconds] || + minutes === 1 && ['m'] || + minutes < relativeTimeThresholds.m && ['mm', minutes] || + hours === 1 && ['h'] || + hours < relativeTimeThresholds.h && ['hh', hours] || + days === 1 && ['d'] || + days < relativeTimeThresholds.d && ['dd', days] || + months === 1 && ['M'] || + months < relativeTimeThresholds.M && ['MM', months] || + years === 1 && ['y'] || ['yy', years]; + + args[2] = withoutSuffix; + args[3] = +posNegDuration > 0; + args[4] = locale; + return substituteTimeAgo.apply({}, args); + } + + + /************************************ + Week of Year + ************************************/ + + + // firstDayOfWeek 0 = sun, 6 = sat + // the day of the week that starts the week + // (usually sunday or monday) + // firstDayOfWeekOfYear 0 = sun, 6 = sat + // the first week is the week that contains the first + // of this day of the week + // (eg. ISO weeks use thursday (4)) + function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { + var end = firstDayOfWeekOfYear - firstDayOfWeek, + daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), + adjustedMoment; + + + if (daysToDayOfWeek > end) { + daysToDayOfWeek -= 7; + } + + if (daysToDayOfWeek < end - 7) { + daysToDayOfWeek += 7; + } + + adjustedMoment = moment(mom).add(daysToDayOfWeek, 'd'); + return { + week: Math.ceil(adjustedMoment.dayOfYear() / 7), + year: adjustedMoment.year() + }; + } + + //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { + var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear; + + d = d === 0 ? 7 : d; + weekday = weekday != null ? weekday : firstDayOfWeek; + daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0); + dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1; + + return { + year: dayOfYear > 0 ? year : year - 1, + dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear + }; + } + + /************************************ + Top Level Functions + ************************************/ + + function makeMoment(config) { + var input = config._i, + format = config._f; + + config._locale = config._locale || moment.localeData(config._l); + + if (input === null || (format === undefined && input === '')) { + return moment.invalid({nullInput: true}); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (moment.isMoment(input)) { + return new Moment(input, true); + } else if (format) { + if (isArray(format)) { + makeDateFromStringAndArray(config); + } else { + makeDateFromStringAndFormat(config); + } + } else { + makeDateFromInput(config); + } + + return new Moment(config); + } + + moment = function (input, format, locale, strict) { + var c; + + if (typeof(locale) === "boolean") { + strict = locale; + locale = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c = {}; + c._isAMomentObject = true; + c._i = input; + c._f = format; + c._l = locale; + c._strict = strict; + c._isUTC = false; + c._pf = defaultParsingFlags(); + + return makeMoment(c); + }; + + moment.suppressDeprecationWarnings = false; + + moment.createFromInputFallback = deprecate( + 'moment construction falls back to js Date. This is ' + + 'discouraged and will be removed in upcoming major ' + + 'release. Please refer to ' + + 'https://github.com/moment/moment/issues/1407 for more info.', + function (config) { + config._d = new Date(config._i); + } + ); + + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return moment(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (moments[i][fn](res)) { + res = moments[i]; + } + } + return res; + } + + moment.min = function () { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); + }; + + moment.max = function () { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); + }; + + // creating with utc + moment.utc = function (input, format, locale, strict) { + var c; + + if (typeof(locale) === "boolean") { + strict = locale; + locale = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c = {}; + c._isAMomentObject = true; + c._useUTC = true; + c._isUTC = true; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + c._pf = defaultParsingFlags(); + + return makeMoment(c).utc(); + }; + + // creating with unix timestamp (in seconds) + moment.unix = function (input) { + return moment(input * 1000); + }; + + // duration + moment.duration = function (input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + parseIso, + diffRes; + + if (moment.isDuration(input)) { + duration = { + ms: input._milliseconds, + d: input._days, + M: input._months + }; + } else if (typeof input === 'number') { + duration = {}; + if (key) { + duration[key] = input; + } else { + duration.milliseconds = input; + } + } else if (!!(match = aspNetTimeSpanJsonRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y: 0, + d: toInt(match[DATE]) * sign, + h: toInt(match[HOUR]) * sign, + m: toInt(match[MINUTE]) * sign, + s: toInt(match[SECOND]) * sign, + ms: toInt(match[MILLISECOND]) * sign + }; + } else if (!!(match = isoDurationRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + parseIso = function (inp) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; + }; + duration = { + y: parseIso(match[2]), + M: parseIso(match[3]), + d: parseIso(match[4]), + h: parseIso(match[5]), + m: parseIso(match[6]), + s: parseIso(match[7]), + w: parseIso(match[8]) + }; + } else if (typeof duration === 'object' && + ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(moment(duration.from), moment(duration.to)); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (moment.isDuration(input) && input.hasOwnProperty('_locale')) { + ret._locale = input._locale; + } + + return ret; + }; + + // version number + moment.version = VERSION; + + // default format + moment.defaultFormat = isoFormat; + + // constant that refers to the ISO standard + moment.ISO_8601 = function () {}; + + // Plugins that add properties should also add the key here (null value), + // so we can properly clone ourselves. + moment.momentProperties = momentProperties; + + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + moment.updateOffset = function () {}; + + // This function allows you to set a threshold for relative time strings + moment.relativeTimeThreshold = function (threshold, limit) { + if (relativeTimeThresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return relativeTimeThresholds[threshold]; + } + relativeTimeThresholds[threshold] = limit; + return true; + }; + + moment.lang = deprecate( + "moment.lang is deprecated. Use moment.locale instead.", + function (key, value) { + return moment.locale(key, value); + } + ); + + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + moment.locale = function (key, values) { + var data; + if (key) { + if (typeof(values) !== "undefined") { + data = moment.defineLocale(key, values); + } + else { + data = moment.localeData(key); + } + + if (data) { + moment.duration._locale = moment._locale = data; + } + } + + return moment._locale._abbr; + }; + + moment.defineLocale = function (name, values) { + if (values !== null) { + values.abbr = name; + if (!locales[name]) { + locales[name] = new Locale(); + } + locales[name].set(values); + + // backwards compat for now: also set the locale + moment.locale(name); + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + }; + + moment.langData = deprecate( + "moment.langData is deprecated. Use moment.localeData instead.", + function (key) { + return moment.localeData(key); + } + ); + + // returns locale data + moment.localeData = function (key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return moment._locale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); + }; + + // compare moment object + moment.isMoment = function (obj) { + return obj instanceof Moment || + (obj != null && obj.hasOwnProperty('_isAMomentObject')); + }; + + // for typechecking Duration objects + moment.isDuration = function (obj) { + return obj instanceof Duration; + }; + + for (i = lists.length - 1; i >= 0; --i) { + makeList(lists[i]); + } + + moment.normalizeUnits = function (units) { + return normalizeUnits(units); + }; + + moment.invalid = function (flags) { + var m = moment.utc(NaN); + if (flags != null) { + extend(m._pf, flags); + } + else { + m._pf.userInvalidated = true; + } + + return m; + }; + + moment.parseZone = function () { + return moment.apply(null, arguments).parseZone(); + }; + + moment.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; + + /************************************ + Moment Prototype + ************************************/ + + + extend(moment.fn = Moment.prototype, { + + clone : function () { + return moment(this); + }, + + valueOf : function () { + return +this._d + ((this._offset || 0) * 60000); + }, + + unix : function () { + return Math.floor(+this / 1000); + }, + + toString : function () { + return this.clone().locale('en').format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ"); + }, + + toDate : function () { + return this._offset ? new Date(+this) : this._d; + }, + + toISOString : function () { + var m = moment(this).utc(); + if (0 < m.year() && m.year() <= 9999) { + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } else { + return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + }, + + toArray : function () { + var m = this; + return [ + m.year(), + m.month(), + m.date(), + m.hours(), + m.minutes(), + m.seconds(), + m.milliseconds() + ]; + }, + + isValid : function () { + return isValid(this); + }, + + isDSTShifted : function () { + if (this._a) { + return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0; + } + + return false; + }, + + parsingFlags : function () { + return extend({}, this._pf); + }, + + invalidAt: function () { + return this._pf.overflow; + }, + + utc : function (keepLocalTime) { + return this.zone(0, keepLocalTime); + }, + + local : function (keepLocalTime) { + if (this._isUTC) { + this.zone(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.add(this._d.getTimezoneOffset(), 'm'); + } + } + return this; + }, + + format : function (inputString) { + var output = formatMoment(this, inputString || moment.defaultFormat); + return this.localeData().postformat(output); + }, + + add : createAdder(1, 'add'), + + subtract : createAdder(-1, 'subtract'), + + diff : function (input, units, asFloat) { + var that = makeAs(input, this), + zoneDiff = (this.zone() - that.zone()) * 6e4, + diff, output; + + units = normalizeUnits(units); + + if (units === 'year' || units === 'month') { + // average number of days in the months in the given dates + diff = (this.daysInMonth() + that.daysInMonth()) * 432e5; // 24 * 60 * 60 * 1000 / 2 + // difference in months + output = ((this.year() - that.year()) * 12) + (this.month() - that.month()); + // adjust by taking difference in days, average number of days + // and dst in the given months. + output += ((this - moment(this).startOf('month')) - + (that - moment(that).startOf('month'))) / diff; + // same as above but with zones, to negate all dst + output -= ((this.zone() - moment(this).startOf('month').zone()) - + (that.zone() - moment(that).startOf('month').zone())) * 6e4 / diff; + if (units === 'year') { + output = output / 12; + } + } else { + diff = (this - that); + output = units === 'second' ? diff / 1e3 : // 1000 + units === 'minute' ? diff / 6e4 : // 1000 * 60 + units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60 + units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst + units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst + diff; + } + return asFloat ? output : absRound(output); + }, + + from : function (time, withoutSuffix) { + return moment.duration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); + }, + + fromNow : function (withoutSuffix) { + return this.from(moment(), withoutSuffix); + }, + + calendar : function (time) { + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're zone'd or not. + var now = time || moment(), + sod = makeAs(now, this).startOf('day'), + diff = this.diff(sod, 'days', true), + format = diff < -6 ? 'sameElse' : + diff < -1 ? 'lastWeek' : + diff < 0 ? 'lastDay' : + diff < 1 ? 'sameDay' : + diff < 2 ? 'nextDay' : + diff < 7 ? 'nextWeek' : 'sameElse'; + return this.format(this.localeData().calendar(format, this)); + }, + + isLeapYear : function () { + return isLeapYear(this.year()); + }, + + isDST : function () { + return (this.zone() < this.clone().month(0).zone() || + this.zone() < this.clone().month(5).zone()); + }, + + day : function (input) { + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } + }, + + month : makeAccessor('Month', true), + + startOf : function (units) { + units = normalizeUnits(units); + // the following switch intentionally omits break keywords + // to utilize falling through the cases. + switch (units) { + case 'year': + this.month(0); + /* falls through */ + case 'quarter': + case 'month': + this.date(1); + /* falls through */ + case 'week': + case 'isoWeek': + case 'day': + this.hours(0); + /* falls through */ + case 'hour': + this.minutes(0); + /* falls through */ + case 'minute': + this.seconds(0); + /* falls through */ + case 'second': + this.milliseconds(0); + /* falls through */ + } + + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } else if (units === 'isoWeek') { + this.isoWeekday(1); + } + + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); + } + + return this; + }, + + endOf: function (units) { + units = normalizeUnits(units); + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); + }, + + isAfter: function (input, units) { + units = typeof units !== 'undefined' ? units : 'millisecond'; + return +this.clone().startOf(units) > +moment(input).startOf(units); + }, + + isBefore: function (input, units) { + units = typeof units !== 'undefined' ? units : 'millisecond'; + return +this.clone().startOf(units) < +moment(input).startOf(units); + }, + + isSame: function (input, units) { + units = units || 'ms'; + return +this.clone().startOf(units) === +makeAs(input, this).startOf(units); + }, + + min: deprecate( + 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', + function (other) { + other = moment.apply(null, arguments); + return other < this ? this : other; + } + ), + + max: deprecate( + 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', + function (other) { + other = moment.apply(null, arguments); + return other > this ? this : other; + } + ), + + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[zone(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist int zone + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + zone : function (input, keepLocalTime) { + var offset = this._offset || 0, + localAdjust; + if (input != null) { + if (typeof input === 'string') { + input = timezoneMinutesFromString(input); + } + if (Math.abs(input) < 16) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = this._d.getTimezoneOffset(); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.subtract(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addOrSubtractDurationFromMoment(this, + moment.duration(offset - input, 'm'), 1, false); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + moment.updateOffset(this, true); + this._changeInProgress = null; + } + } + } else { + return this._isUTC ? offset : this._d.getTimezoneOffset(); + } + return this; + }, + + zoneAbbr : function () { + return this._isUTC ? 'UTC' : ''; + }, + + zoneName : function () { + return this._isUTC ? 'Coordinated Universal Time' : ''; + }, + + parseZone : function () { + if (this._tzm) { + this.zone(this._tzm); + } else if (typeof this._i === 'string') { + this.zone(this._i); + } + return this; + }, + + hasAlignedHourOffset : function (input) { + if (!input) { + input = 0; + } + else { + input = moment(input).zone(); + } + + return (this.zone() - input) % 60 === 0; + }, + + daysInMonth : function () { + return daysInMonth(this.year(), this.month()); + }, + + dayOfYear : function (input) { + var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); + }, + + quarter : function (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); + }, + + weekYear : function (input) { + var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year; + return input == null ? year : this.add((input - year), 'y'); + }, + + isoWeekYear : function (input) { + var year = weekOfYear(this, 1, 4).year; + return input == null ? year : this.add((input - year), 'y'); + }, + + week : function (input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + }, + + isoWeek : function (input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + }, + + weekday : function (input) { + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + }, + + isoWeekday : function (input) { + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); + }, + + isoWeeksInYear : function () { + return weeksInYear(this.year(), 1, 4); + }, + + weeksInYear : function () { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + }, + + get : function (units) { + units = normalizeUnits(units); + return this[units](); + }, + + set : function (units, value) { + units = normalizeUnits(units); + if (typeof this[units] === 'function') { + this[units](value); + } + return this; + }, + + // If passed a locale key, it will set the locale for this + // instance. Otherwise, it will return the locale configuration + // variables for this instance. + locale : function (key) { + if (key === undefined) { + return this._locale._abbr; + } else { + this._locale = moment.localeData(key); + return this; + } + }, + + lang : deprecate( + "moment().lang() is deprecated. Use moment().localeData() instead.", + function (key) { + return this.localeData(key); + } + ), + + localeData : function () { + return this._locale; + } + }); + + function rawMonthSetter(mom, value) { + var dayOfMonth; + + // TODO: Move this out of here! + if (typeof value === 'string') { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (typeof value !== 'number') { + return mom; + } + } + + dayOfMonth = Math.min(mom.date(), + daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; + } + + function rawGetter(mom, unit) { + return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); + } + + function rawSetter(mom, unit, value) { + if (unit === 'Month') { + return rawMonthSetter(mom, value); + } else { + return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + } + + function makeAccessor(unit, keepTime) { + return function (value) { + if (value != null) { + rawSetter(this, unit, value); + moment.updateOffset(this, keepTime); + return this; + } else { + return rawGetter(this, unit); + } + }; + } + + moment.fn.millisecond = moment.fn.milliseconds = makeAccessor('Milliseconds', false); + moment.fn.second = moment.fn.seconds = makeAccessor('Seconds', false); + moment.fn.minute = moment.fn.minutes = makeAccessor('Minutes', false); + // Setting the hour should keep the time, because the user explicitly + // specified which hour he wants. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + moment.fn.hour = moment.fn.hours = makeAccessor('Hours', true); + // moment.fn.month is defined separately + moment.fn.date = makeAccessor('Date', true); + moment.fn.dates = deprecate('dates accessor is deprecated. Use date instead.', makeAccessor('Date', true)); + moment.fn.year = makeAccessor('FullYear', true); + moment.fn.years = deprecate('years accessor is deprecated. Use year instead.', makeAccessor('FullYear', true)); + + // add plural methods + moment.fn.days = moment.fn.day; + moment.fn.months = moment.fn.month; + moment.fn.weeks = moment.fn.week; + moment.fn.isoWeeks = moment.fn.isoWeek; + moment.fn.quarters = moment.fn.quarter; + + // add aliased format methods + moment.fn.toJSON = moment.fn.toISOString; + + /************************************ + Duration Prototype + ************************************/ + + + function daysToYears (days) { + // 400 years have 146097 days (taking into account leap year rules) + return days * 400 / 146097; + } + + function yearsToDays (years) { + // years * 365 + absRound(years / 4) - + // absRound(years / 100) + absRound(years / 400); + return years * 146097 / 400; + } + + extend(moment.duration.fn = Duration.prototype, { + + _bubble : function () { + var milliseconds = this._milliseconds, + days = this._days, + months = this._months, + data = this._data, + seconds, minutes, hours, years = 0; + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absRound(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absRound(seconds / 60); + data.minutes = minutes % 60; + + hours = absRound(minutes / 60); + data.hours = hours % 24; + + days += absRound(hours / 24); + + // Accurately convert days to years, assume start from year 0. + years = absRound(daysToYears(days)); + days -= absRound(yearsToDays(years)); + + // 30 days to a month + // TODO (iskren): Use anchor date (like 1st Jan) to compute this. + months += absRound(days / 30); + days %= 30; + + // 12 months -> 1 year + years += absRound(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + }, + + abs : function () { + this._milliseconds = Math.abs(this._milliseconds); + this._days = Math.abs(this._days); + this._months = Math.abs(this._months); + + this._data.milliseconds = Math.abs(this._data.milliseconds); + this._data.seconds = Math.abs(this._data.seconds); + this._data.minutes = Math.abs(this._data.minutes); + this._data.hours = Math.abs(this._data.hours); + this._data.months = Math.abs(this._data.months); + this._data.years = Math.abs(this._data.years); + + return this; + }, + + weeks : function () { + return absRound(this.days() / 7); + }, + + valueOf : function () { + return this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6; + }, + + humanize : function (withSuffix) { + var output = relativeTime(this, !withSuffix, this.localeData()); + + if (withSuffix) { + output = this.localeData().pastFuture(+this, output); + } + + return this.localeData().postformat(output); + }, + + add : function (input, val) { + // supports only 2.0-style add(1, 's') or add(moment) + var dur = moment.duration(input, val); + + this._milliseconds += dur._milliseconds; + this._days += dur._days; + this._months += dur._months; + + this._bubble(); + + return this; + }, + + subtract : function (input, val) { + var dur = moment.duration(input, val); + + this._milliseconds -= dur._milliseconds; + this._days -= dur._days; + this._months -= dur._months; + + this._bubble(); + + return this; + }, + + get : function (units) { + units = normalizeUnits(units); + return this[units.toLowerCase() + 's'](); + }, + + as : function (units) { + var days, months; + units = normalizeUnits(units); + + days = this._days + this._milliseconds / 864e5; + if (units === 'month' || units === 'year') { + months = this._months + daysToYears(days) * 12; + return units === 'month' ? months : months / 12; + } else { + days += yearsToDays(this._months / 12); + switch (units) { + case 'week': return days / 7; + case 'day': return days; + case 'hour': return days * 24; + case 'minute': return days * 24 * 60; + case 'second': return days * 24 * 60 * 60; + case 'millisecond': return days * 24 * 60 * 60 * 1000; + default: throw new Error('Unknown unit ' + units); + } + } + }, + + lang : moment.fn.lang, + locale : moment.fn.locale, + + toIsoString : deprecate( + "toIsoString() is deprecated. Please use toISOString() instead " + + "(notice the capitals)", + function () { + return this.toISOString(); + } + ), + + toISOString : function () { + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var years = Math.abs(this.years()), + months = Math.abs(this.months()), + days = Math.abs(this.days()), + hours = Math.abs(this.hours()), + minutes = Math.abs(this.minutes()), + seconds = Math.abs(this.seconds() + this.milliseconds() / 1000); + + if (!this.asSeconds()) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + return (this.asSeconds() < 0 ? '-' : '') + + 'P' + + (years ? years + 'Y' : '') + + (months ? months + 'M' : '') + + (days ? days + 'D' : '') + + ((hours || minutes || seconds) ? 'T' : '') + + (hours ? hours + 'H' : '') + + (minutes ? minutes + 'M' : '') + + (seconds ? seconds + 'S' : ''); + }, + + localeData : function () { + return this._locale; + } + }); + + function makeDurationGetter(name) { + moment.duration.fn[name] = function () { + return this._data[name]; + }; + } + + for (i in unitMillisecondFactors) { + if (unitMillisecondFactors.hasOwnProperty(i)) { + makeDurationGetter(i.toLowerCase()); + } + } + + moment.duration.fn.asMilliseconds = function () { + return this.as('ms'); + }; + moment.duration.fn.asSeconds = function () { + return this.as('s'); + }; + moment.duration.fn.asMinutes = function () { + return this.as('m'); + }; + moment.duration.fn.asHours = function () { + return this.as('h'); + }; + moment.duration.fn.asDays = function () { + return this.as('d'); + }; + moment.duration.fn.asWeeks = function () { + return this.as('weeks'); + }; + moment.duration.fn.asMonths = function () { + return this.as('M'); + }; + moment.duration.fn.asYears = function () { + return this.as('y'); + }; + + /************************************ + Default Locale + ************************************/ + + + // Set default locale, other locale will inherit from English. + moment.locale('en', { + ordinal : function (number) { + var b = number % 10, + output = (toInt(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } + }); + + /* EMBED_LOCALES */ + + /************************************ + Exposing Moment + ************************************/ + + function makeGlobal(shouldDeprecate) { + /*global ender:false */ + if (typeof ender !== 'undefined') { + return; + } + oldGlobalMoment = globalScope.moment; + if (shouldDeprecate) { + globalScope.moment = deprecate( + 'Accessing Moment through the global scope is ' + + 'deprecated, and will be removed in an upcoming ' + + 'release.', + moment); + } else { + globalScope.moment = moment; + } + } + + // CommonJS module is defined + if (hasModule) { + module.exports = moment; + } else if (typeof define === 'function' && define.amd) { + define('moment', function (require, exports, module) { + if (module.config && module.config() && module.config().noGlobal === true) { + // release the global variable + globalScope.moment = oldGlobalMoment; + } + + return moment; + }); + makeGlobal(true); + } else { + makeGlobal(); + } +}).call(this); diff --git a/ajax/libs/moment.js/2.8.0/moment.min.js b/ajax/libs/moment.js/2.8.0/moment.min.js new file mode 100644 index 000000000..c59a42a4b --- /dev/null +++ b/ajax/libs/moment.js/2.8.0/moment.min.js @@ -0,0 +1,6 @@ +//! moment.js +//! version : 2.8.0 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com +(function(a){function b(a,b,c){switch(arguments.length){case 2:return null!=a?a:b;case 3:return null!=a?a:null!=b?b:c;default:throw new Error("Implement me")}}function c(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function d(a){rb.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+a)}function e(a,b){var c=!0;return l(function(){return c&&(d(a),c=!1),b.apply(this,arguments)},b)}function f(a,b){nc[a]||(d(b),nc[a]=!0)}function g(a,b){return function(c){return o(a.call(this,c),b)}}function h(a,b){return function(c){return this.localeData().ordinal(a.call(this,c),b)}}function i(){}function j(a,b){b!==!1&&E(a),m(this,a),this._d=new Date(+a._d)}function k(a){var b=x(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._milliseconds=+k+1e3*j+6e4*i+36e5*h,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._locale=rb.localeData(),this._bubble()}function l(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return b.hasOwnProperty("toString")&&(a.toString=b.toString),b.hasOwnProperty("valueOf")&&(a.valueOf=b.valueOf),a}function m(a,b){var c,d,e;if("undefined"!=typeof b._isAMomentObject&&(a._isAMomentObject=b._isAMomentObject),"undefined"!=typeof b._i&&(a._i=b._i),"undefined"!=typeof b._f&&(a._f=b._f),"undefined"!=typeof b._l&&(a._l=b._l),"undefined"!=typeof b._strict&&(a._strict=b._strict),"undefined"!=typeof b._tzm&&(a._tzm=b._tzm),"undefined"!=typeof b._isUTC&&(a._isUTC=b._isUTC),"undefined"!=typeof b._offset&&(a._offset=b._offset),"undefined"!=typeof b._pf&&(a._pf=b._pf),"undefined"!=typeof b._locale&&(a._locale=b._locale),Fb.length>0)for(c in Fb)d=Fb[c],e=b[d],"undefined"!=typeof e&&(a[d]=e);return a}function n(a){return 0>a?Math.ceil(a):Math.floor(a)}function o(a,b,c){for(var d=""+Math.abs(a),e=a>=0;d.lengthd;d++)(c&&a[d]!==b[d]||!c&&z(a[d])!==z(b[d]))&&g++;return g+f}function w(a){if(a){var b=a.toLowerCase().replace(/(.)s$/,"$1");a=gc[a]||hc[b]||b}return a}function x(a){var b,c,d={};for(c in a)a.hasOwnProperty(c)&&(b=w(c),b&&(d[b]=a[c]));return d}function y(b){var c,d;if(0===b.indexOf("week"))c=7,d="day";else{if(0!==b.indexOf("month"))return;c=12,d="month"}rb[b]=function(e,f){var g,h,i=rb._locale[b],j=[];if("number"==typeof e&&(f=e,e=a),h=function(a){var b=rb().utc().set(d,a);return i.call(rb._locale,b,e||"")},null!=f)return h(f);for(g=0;c>g;g++)j.push(h(g));return j}}function z(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=b>=0?Math.floor(b):Math.ceil(b)),c}function A(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function B(a,b,c){return fb(rb([a,11,31+b-c]),b,c).week}function C(a){return D(a)?366:365}function D(a){return a%4===0&&a%100!==0||a%400===0}function E(a){var b;a._a&&-2===a._pf.overflow&&(b=a._a[yb]<0||a._a[yb]>11?yb:a._a[zb]<1||a._a[zb]>A(a._a[xb],a._a[yb])?zb:a._a[Ab]<0||a._a[Ab]>23?Ab:a._a[Bb]<0||a._a[Bb]>59?Bb:a._a[Cb]<0||a._a[Cb]>59?Cb:a._a[Db]<0||a._a[Db]>999?Db:-1,a._pf._overflowDayOfYear&&(xb>b||b>zb)&&(b=zb),a._pf.overflow=b)}function F(a){return null==a._isValid&&(a._isValid=!isNaN(a._d.getTime())&&a._pf.overflow<0&&!a._pf.empty&&!a._pf.invalidMonth&&!a._pf.nullInput&&!a._pf.invalidFormat&&!a._pf.userInvalidated,a._strict&&(a._isValid=a._isValid&&0===a._pf.charsLeftOver&&0===a._pf.unusedTokens.length)),a._isValid}function G(a){return a?a.toLowerCase().replace("_","-"):a}function H(a){for(var b,c,d,e,f=0;f0;){if(d=I(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&v(e,c,!0)>=b-1)break;b--}f++}return null}function I(a){var b=null;if(!Eb[a]&&Gb)try{b=rb.locale(),require("./locale/"+a),rb.locale(b)}catch(c){}return Eb[a]}function J(a,b){return b._isUTC?rb(a).zone(b._offset||0):rb(a).local()}function K(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function L(a){var b,c,d=a.match(Kb);for(b=0,c=d.length;c>b;b++)d[b]=mc[d[b]]?mc[d[b]]:K(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function M(a,b){return a.isValid()?(b=N(b,a.localeData()),ic[b]||(ic[b]=L(b)),ic[b](a)):a.localeData().invalidDate()}function N(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Lb.lastIndex=0;d>=0&&Lb.test(a);)a=a.replace(Lb,c),Lb.lastIndex=0,d-=1;return a}function O(a,b){var c,d=b._strict;switch(a){case"Q":return Wb;case"DDDD":return Yb;case"YYYY":case"GGGG":case"gggg":return d?Zb:Ob;case"Y":case"G":case"g":return _b;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return d?$b:Pb;case"S":if(d)return Wb;case"SS":if(d)return Xb;case"SSS":if(d)return Yb;case"DDD":return Nb;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Rb;case"a":case"A":return b._locale._meridiemParse;case"X":return Ub;case"Z":case"ZZ":return Sb;case"T":return Tb;case"SSSS":return Qb;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return d?Xb:Mb;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Mb;case"Do":return Vb;default:return c=new RegExp(X(W(a.replace("\\","")),"i"))}}function P(a){a=a||"";var b=a.match(Sb)||[],c=b[b.length-1]||[],d=(c+"").match(ec)||["-",0,0],e=+(60*d[1])+z(d[2]);return"+"===d[0]?-e:e}function Q(a,b,c){var d,e=c._a;switch(a){case"Q":null!=b&&(e[yb]=3*(z(b)-1));break;case"M":case"MM":null!=b&&(e[yb]=z(b)-1);break;case"MMM":case"MMMM":d=c._locale.monthsParse(b),null!=d?e[yb]=d:c._pf.invalidMonth=b;break;case"D":case"DD":null!=b&&(e[zb]=z(b));break;case"Do":null!=b&&(e[zb]=z(parseInt(b,10)));break;case"DDD":case"DDDD":null!=b&&(c._dayOfYear=z(b));break;case"YY":e[xb]=rb.parseTwoDigitYear(b);break;case"YYYY":case"YYYYY":case"YYYYYY":e[xb]=z(b);break;case"a":case"A":c._isPm=c._locale.isPM(b);break;case"H":case"HH":case"h":case"hh":e[Ab]=z(b);break;case"m":case"mm":e[Bb]=z(b);break;case"s":case"ss":e[Cb]=z(b);break;case"S":case"SS":case"SSS":case"SSSS":e[Db]=z(1e3*("0."+b));break;case"X":c._d=new Date(1e3*parseFloat(b));break;case"Z":case"ZZ":c._useUTC=!0,c._tzm=P(b);break;case"dd":case"ddd":case"dddd":d=c._locale.weekdaysParse(b),null!=d?(c._w=c._w||{},c._w.d=d):c._pf.invalidWeekday=b;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":a=a.substr(0,1);case"gggg":case"GGGG":case"GGGGG":a=a.substr(0,2),b&&(c._w=c._w||{},c._w[a]=z(b));break;case"gg":case"GG":c._w=c._w||{},c._w[a]=rb.parseTwoDigitYear(b)}}function R(a){var c,d,e,f,g,h,i;c=a._w,null!=c.GG||null!=c.W||null!=c.E?(g=1,h=4,d=b(c.GG,a._a[xb],fb(rb(),1,4).year),e=b(c.W,1),f=b(c.E,1)):(g=a._locale._week.dow,h=a._locale._week.doy,d=b(c.gg,a._a[xb],fb(rb(),g,h).year),e=b(c.w,1),null!=c.d?(f=c.d,g>f&&++e):f=null!=c.e?c.e+g:g),i=gb(d,e,f,h,g),a._a[xb]=i.year,a._dayOfYear=i.dayOfYear}function S(a){var c,d,e,f,g=[];if(!a._d){for(e=U(a),a._w&&null==a._a[zb]&&null==a._a[yb]&&R(a),a._dayOfYear&&(f=b(a._a[xb],e[xb]),a._dayOfYear>C(f)&&(a._pf._overflowDayOfYear=!0),d=bb(f,0,a._dayOfYear),a._a[yb]=d.getUTCMonth(),a._a[zb]=d.getUTCDate()),c=0;3>c&&null==a._a[c];++c)a._a[c]=g[c]=e[c];for(;7>c;c++)a._a[c]=g[c]=null==a._a[c]?2===c?1:0:a._a[c];a._d=(a._useUTC?bb:ab).apply(null,g),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()+a._tzm)}}function T(a){var b;a._d||(b=x(a._i),a._a=[b.year,b.month,b.day,b.hour,b.minute,b.second,b.millisecond],S(a))}function U(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function V(a){if(a._f===rb.ISO_8601)return void Z(a);a._a=[],a._pf.empty=!0;var b,c,d,e,f,g=""+a._i,h=g.length,i=0;for(d=N(a._f,a._locale).match(Kb)||[],b=0;b0&&a._pf.unusedInput.push(f),g=g.slice(g.indexOf(c)+c.length),i+=c.length),mc[e]?(c?a._pf.empty=!1:a._pf.unusedTokens.push(e),Q(e,c,a)):a._strict&&!c&&a._pf.unusedTokens.push(e);a._pf.charsLeftOver=h-i,g.length>0&&a._pf.unusedInput.push(g),a._isPm&&a._a[Ab]<12&&(a._a[Ab]+=12),a._isPm===!1&&12===a._a[Ab]&&(a._a[Ab]=0),S(a),E(a)}function W(a){return a.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e})}function X(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Y(a){var b,d,e,f,g;if(0===a._f.length)return a._pf.invalidFormat=!0,void(a._d=new Date(0/0));for(f=0;fg)&&(e=g,d=b));l(a,d||b)}function Z(a){var b,c,d=a._i,e=ac.exec(d);if(e){for(a._pf.iso=!0,b=0,c=cc.length;c>b;b++)if(cc[b][1].exec(d)){a._f=cc[b][0]+(e[6]||" ");break}for(b=0,c=dc.length;c>b;b++)if(dc[b][1].exec(d)){a._f+=dc[b][0];break}d.match(Sb)&&(a._f+="Z"),V(a)}else a._isValid=!1}function $(a){Z(a),a._isValid===!1&&(delete a._isValid,rb.createFromInputFallback(a))}function _(b){var c,d=b._i;d===a?b._d=new Date:u(d)?b._d=new Date(+d):null!==(c=Hb.exec(d))?b._d=new Date(+c[1]):"string"==typeof d?$(b):t(d)?(b._a=d.slice(0),S(b)):"object"==typeof d?T(b):"number"==typeof d?b._d=new Date(d):rb.createFromInputFallback(b)}function ab(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 1970>a&&h.setFullYear(a),h}function bb(a){var b=new Date(Date.UTC.apply(null,arguments));return 1970>a&&b.setUTCFullYear(a),b}function cb(a,b){if("string"==typeof a)if(isNaN(a)){if(a=b.weekdaysParse(a),"number"!=typeof a)return null}else a=parseInt(a,10);return a}function db(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function eb(a,b,c){var d=rb.duration(a).abs(),e=wb(d.as("s")),f=wb(d.as("m")),g=wb(d.as("h")),h=wb(d.as("d")),i=wb(d.as("M")),j=wb(d.as("y")),k=e0,k[4]=c,db.apply({},k)}function fb(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=rb(a).add(f,"d"),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function gb(a,b,c,d,e){var f,g,h=bb(a,0,1).getUTCDay();return h=0===h?7:h,c=null!=c?c:e,f=e-h+(h>d?7:0)-(e>h?7:0),g=7*(b-1)+(c-e)+f+1,{year:g>0?a:a-1,dayOfYear:g>0?g:C(a-1)+g}}function hb(b){var c=b._i,d=b._f;return b._locale=b._locale||rb.localeData(b._l),null===c||d===a&&""===c?rb.invalid({nullInput:!0}):("string"==typeof c&&(b._i=c=b._locale.preparse(c)),rb.isMoment(c)?new j(c,!0):(d?t(d)?Y(b):V(b):_(b),new j(b)))}function ib(a,b){var c,d;if(1===b.length&&t(b[0])&&(b=b[0]),!b.length)return rb();for(c=b[0],d=1;d=0?"+":"-";return b+o(Math.abs(a),6)},gg:function(){return o(this.weekYear()%100,2)},gggg:function(){return o(this.weekYear(),4)},ggggg:function(){return o(this.weekYear(),5)},GG:function(){return o(this.isoWeekYear()%100,2)},GGGG:function(){return o(this.isoWeekYear(),4)},GGGGG:function(){return o(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return z(this.milliseconds()/100)},SS:function(){return o(z(this.milliseconds()/10),2)},SSS:function(){return o(this.milliseconds(),3)},SSSS:function(){return o(this.milliseconds(),3)},Z:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+o(z(a/60),2)+":"+o(z(a)%60,2)},ZZ:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+o(z(a/60),2)+o(z(a)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},nc={},oc=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];kc.length;)tb=kc.pop(),mc[tb+"o"]=h(mc[tb],tb);for(;lc.length;)tb=lc.pop(),mc[tb+tb]=g(mc[tb],2);mc.DDDD=g(mc.DDD,3),l(i.prototype,{set:function(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(a){return this._months[a.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(a){return this._monthsShort[a.month()]},monthsParse:function(a){var b,c,d;for(this._monthsParse||(this._monthsParse=[]),b=0;12>b;b++)if(this._monthsParse[b]||(c=rb.utc([2e3,b]),d="^"+this.months(c,"")+"|^"+this.monthsShort(c,""),this._monthsParse[b]=new RegExp(d.replace(".",""),"i")),this._monthsParse[b].test(a))return b},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(a){return this._weekdays[a.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(a){return this._weekdaysShort[a.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(a){return this._weekdaysMin[a.day()]},weekdaysParse:function(a){var b,c,d;for(this._weekdaysParse||(this._weekdaysParse=[]),b=0;7>b;b++)if(this._weekdaysParse[b]||(c=rb([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b},isPM:function(a){return"p"===(a+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(a,b){var c=this._calendar[a];return"function"==typeof c?c.apply(b):c},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)},pastFuture:function(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)},ordinal:function(a){return this._ordinal.replace("%d",a)},_ordinal:"%d",preparse:function(a){return a},postformat:function(a){return a},week:function(a){return fb(a,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),rb=function(b,d,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._i=b,g._f=d,g._l=e,g._strict=f,g._isUTC=!1,g._pf=c(),hb(g)},rb.suppressDeprecationWarnings=!1,rb.createFromInputFallback=e("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i)}),rb.min=function(){var a=[].slice.call(arguments,0);return ib("isBefore",a)},rb.max=function(){var a=[].slice.call(arguments,0);return ib("isAfter",a)},rb.utc=function(b,d,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._useUTC=!0,g._isUTC=!0,g._l=e,g._i=b,g._f=d,g._strict=f,g._pf=c(),hb(g).utc()},rb.unix=function(a){return rb(1e3*a)},rb.duration=function(a,b){var c,d,e,f,g=a,h=null;return rb.isDuration(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(g={},b?g[b]=a:g.milliseconds=a):(h=Ib.exec(a))?(c="-"===h[1]?-1:1,g={y:0,d:z(h[zb])*c,h:z(h[Ab])*c,m:z(h[Bb])*c,s:z(h[Cb])*c,ms:z(h[Db])*c}):(h=Jb.exec(a))?(c="-"===h[1]?-1:1,e=function(a){var b=a&&parseFloat(a.replace(",","."));return(isNaN(b)?0:b)*c},g={y:e(h[2]),M:e(h[3]),d:e(h[4]),h:e(h[5]),m:e(h[6]),s:e(h[7]),w:e(h[8])}):"object"==typeof g&&("from"in g||"to"in g)&&(f=q(rb(g.from),rb(g.to)),g={},g.ms=f.milliseconds,g.M=f.months),d=new k(g),rb.isDuration(a)&&a.hasOwnProperty("_locale")&&(d._locale=a._locale),d},rb.version=ub,rb.defaultFormat=bc,rb.ISO_8601=function(){},rb.momentProperties=Fb,rb.updateOffset=function(){},rb.relativeTimeThreshold=function(b,c){return jc[b]===a?!1:c===a?jc[b]:(jc[b]=c,!0)},rb.lang=e("moment.lang is deprecated. Use moment.locale instead.",function(a,b){return rb.locale(a,b)}),rb.locale=function(a,b){var c;return a&&(c="undefined"!=typeof b?rb.defineLocale(a,b):rb.localeData(a),c&&(rb.duration._locale=rb._locale=c)),rb._locale._abbr},rb.defineLocale=function(a,b){return null!==b?(b.abbr=a,Eb[a]||(Eb[a]=new i),Eb[a].set(b),rb.locale(a),Eb[a]):(delete Eb[a],null)},rb.langData=e("moment.langData is deprecated. Use moment.localeData instead.",function(a){return rb.localeData(a)}),rb.localeData=function(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return rb._locale;if(!t(a)){if(b=I(a))return b;a=[a]}return H(a)},rb.isMoment=function(a){return a instanceof j||null!=a&&a.hasOwnProperty("_isAMomentObject")},rb.isDuration=function(a){return a instanceof k};for(tb=oc.length-1;tb>=0;--tb)y(oc[tb]);rb.normalizeUnits=function(a){return w(a)},rb.invalid=function(a){var b=rb.utc(0/0);return null!=a?l(b._pf,a):b._pf.userInvalidated=!0,b},rb.parseZone=function(){return rb.apply(null,arguments).parseZone()},rb.parseTwoDigitYear=function(a){return z(a)+(z(a)>68?1900:2e3)},l(rb.fn=j.prototype,{clone:function(){return rb(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var a=rb(this).utc();return 00:!1},parsingFlags:function(){return l({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(a){return this.zone(0,a)},local:function(a){return this._isUTC&&(this.zone(0,a),this._isUTC=!1,a&&this.add(this._d.getTimezoneOffset(),"m")),this},format:function(a){var b=M(this,a||rb.defaultFormat);return this.localeData().postformat(b)},add:r(1,"add"),subtract:r(-1,"subtract"),diff:function(a,b,c){var d,e,f=J(a,this),g=6e4*(this.zone()-f.zone());return b=w(b),"year"===b||"month"===b?(d=432e5*(this.daysInMonth()+f.daysInMonth()),e=12*(this.year()-f.year())+(this.month()-f.month()),e+=(this-rb(this).startOf("month")-(f-rb(f).startOf("month")))/d,e-=6e4*(this.zone()-rb(this).startOf("month").zone()-(f.zone()-rb(f).startOf("month").zone()))/d,"year"===b&&(e/=12)):(d=this-f,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-g)/864e5:"week"===b?(d-g)/6048e5:d),c?e:n(e)},from:function(a,b){return rb.duration({to:this,from:a}).locale(this.locale()).humanize(!b)},fromNow:function(a){return this.from(rb(),a)},calendar:function(a){var b=a||rb(),c=J(b,this).startOf("day"),d=this.diff(c,"days",!0),e=-6>d?"sameElse":-1>d?"lastWeek":0>d?"lastDay":1>d?"sameDay":2>d?"nextDay":7>d?"nextWeek":"sameElse";return this.format(this.localeData().calendar(e,this))},isLeapYear:function(){return D(this.year())},isDST:function(){return this.zone()+rb(a).startOf(b)},isBefore:function(a,b){return b="undefined"!=typeof b?b:"millisecond",+this.clone().startOf(b)<+rb(a).startOf(b)},isSame:function(a,b){return b=b||"ms",+this.clone().startOf(b)===+J(a,this).startOf(b)},min:e("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(a){return a=rb.apply(null,arguments),this>a?this:a}),max:e("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(a){return a=rb.apply(null,arguments),a>this?this:a}),zone:function(a,b){var c,d=this._offset||0;return null==a?this._isUTC?d:this._d.getTimezoneOffset():("string"==typeof a&&(a=P(a)),Math.abs(a)<16&&(a=60*a),!this._isUTC&&b&&(c=this._d.getTimezoneOffset()),this._offset=a,this._isUTC=!0,null!=c&&this.subtract(c,"m"),d!==a&&(!b||this._changeInProgress?s(this,rb.duration(d-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,rb.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(a){return a=a?rb(a).zone():0,(this.zone()-a)%60===0},daysInMonth:function(){return A(this.year(),this.month())},dayOfYear:function(a){var b=wb((rb(this).startOf("day")-rb(this).startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")},quarter:function(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)},weekYear:function(a){var b=fb(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==a?b:this.add(a-b,"y")},isoWeekYear:function(a){var b=fb(this,1,4).year;return null==a?b:this.add(a-b,"y")},week:function(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")},isoWeek:function(a){var b=fb(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")},weekday:function(a){var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")},isoWeekday:function(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)},isoWeeksInYear:function(){return B(this.year(),1,4)},weeksInYear:function(){var a=this.localeData()._week;return B(this.year(),a.dow,a.doy)},get:function(a){return a=w(a),this[a]()},set:function(a,b){return a=w(a),"function"==typeof this[a]&&this[a](b),this},locale:function(b){return b===a?this._locale._abbr:(this._locale=rb.localeData(b),this)},lang:e("moment().lang() is deprecated. Use moment().localeData() instead.",function(a){return this.localeData(a)}),localeData:function(){return this._locale}}),rb.fn.millisecond=rb.fn.milliseconds=mb("Milliseconds",!1),rb.fn.second=rb.fn.seconds=mb("Seconds",!1),rb.fn.minute=rb.fn.minutes=mb("Minutes",!1),rb.fn.hour=rb.fn.hours=mb("Hours",!0),rb.fn.date=mb("Date",!0),rb.fn.dates=e("dates accessor is deprecated. Use date instead.",mb("Date",!0)),rb.fn.year=mb("FullYear",!0),rb.fn.years=e("years accessor is deprecated. Use year instead.",mb("FullYear",!0)),rb.fn.days=rb.fn.day,rb.fn.months=rb.fn.month,rb.fn.weeks=rb.fn.week,rb.fn.isoWeeks=rb.fn.isoWeek,rb.fn.quarters=rb.fn.quarter,rb.fn.toJSON=rb.fn.toISOString,l(rb.duration.fn=k.prototype,{_bubble:function(){var a,b,c,d=this._milliseconds,e=this._days,f=this._months,g=this._data,h=0;g.milliseconds=d%1e3,a=n(d/1e3),g.seconds=a%60,b=n(a/60),g.minutes=b%60,c=n(b/60),g.hours=c%24,e+=n(c/24),h=n(nb(e)),e-=n(ob(h)),f+=n(e/30),e%=30,h+=n(f/12),f%=12,g.days=e,g.months=f,g.years=h},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return n(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*z(this._months/12)},humanize:function(a){var b=eb(this,!a,this.localeData());return a&&(b=this.localeData().pastFuture(+this,b)),this.localeData().postformat(b)},add:function(a,b){var c=rb.duration(a,b);return this._milliseconds+=c._milliseconds,this._days+=c._days,this._months+=c._months,this._bubble(),this},subtract:function(a,b){var c=rb.duration(a,b);return this._milliseconds-=c._milliseconds,this._days-=c._days,this._months-=c._months,this._bubble(),this},get:function(a){return a=w(a),this[a.toLowerCase()+"s"]()},as:function(a){var b,c;if(a=w(a),b=this._days+this._milliseconds/864e5,"month"===a||"year"===a)return c=this._months+12*nb(b),"month"===a?c:c/12;switch(b+=ob(this._months/12),a){case"week":return b/7;case"day":return b;case"hour":return 24*b;case"minute":return 24*b*60;case"second":return 24*b*60*60;case"millisecond":return 24*b*60*60*1e3;default:throw new Error("Unknown unit "+a)}},lang:rb.fn.lang,locale:rb.fn.locale,toIsoString:e("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var a=Math.abs(this.years()),b=Math.abs(this.months()),c=Math.abs(this.days()),d=Math.abs(this.hours()),e=Math.abs(this.minutes()),f=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(a?a+"Y":"")+(b?b+"M":"")+(c?c+"D":"")+(d||e||f?"T":"")+(d?d+"H":"")+(e?e+"M":"")+(f?f+"S":""):"P0D"},localeData:function(){return this._locale}});for(tb in fc)fc.hasOwnProperty(tb)&&pb(tb.toLowerCase());rb.duration.fn.asMilliseconds=function(){return this.as("ms")},rb.duration.fn.asSeconds=function(){return this.as("s")},rb.duration.fn.asMinutes=function(){return this.as("m")},rb.duration.fn.asHours=function(){return this.as("h")},rb.duration.fn.asDays=function(){return this.as("d")},rb.duration.fn.asWeeks=function(){return this.as("weeks")},rb.duration.fn.asMonths=function(){return this.as("M")},rb.duration.fn.asYears=function(){return this.as("y")},rb.locale("en",{ordinal:function(a){var b=a%10,c=1===z(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),Gb?module.exports=rb:"function"==typeof define&&define.amd?(define("moment",function(a,b,c){return c.config&&c.config()&&c.config().noGlobal===!0&&(vb.moment=sb),rb}),qb(!0)):qb()}).call(this); \ No newline at end of file diff --git a/ajax/libs/moment.js/2.8.0/tests.js b/ajax/libs/moment.js/2.8.0/tests.js new file mode 100644 index 000000000..c9687672d --- /dev/null +++ b/ajax/libs/moment.js/2.8.0/tests.js @@ -0,0 +1,32929 @@ +(function () { + var global = this, + require = function() { return global.moment; }, + exports = global.NPM_TESTS = {}; + +var moment = require("../../moment"); + +exports.add = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "add short reverse args" : function (test) { + test.expect(16); + + var a = moment(), b, c, d; + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + test.equal(a.add({ms: 50}).milliseconds(), 550, 'Add milliseconds'); + test.equal(a.add({s: 1}).seconds(), 9, 'Add seconds'); + test.equal(a.add({m: 1}).minutes(), 8, 'Add minutes'); + test.equal(a.add({h: 1}).hours(), 7, 'Add hours'); + test.equal(a.add({d: 1}).date(), 13, 'Add date'); + test.equal(a.add({w: 1}).date(), 20, 'Add week'); + test.equal(a.add({M: 1}).month(), 10, 'Add month'); + test.equal(a.add({y: 1}).year(), 2012, 'Add year'); + test.equal(a.add({Q: 1}).month(), 1, 'Add quarter'); + + b = moment([2010, 0, 31]).add({M: 1}); + c = moment([2010, 1, 28]).subtract({M: 1}); + d = moment([2010, 1, 28]).subtract({Q: 1}); + + test.equal(b.month(), 1, 'add month, jan 31st to feb 28th'); + test.equal(b.date(), 28, 'add month, jan 31st to feb 28th'); + test.equal(c.month(), 0, 'subtract month, feb 28th to jan 28th'); + test.equal(c.date(), 28, 'subtract month, feb 28th to jan 28th'); + test.equal(d.month(), 10, 'subtract quarter, feb 28th 2010 to nov 28th 2009'); + test.equal(d.date(), 28, 'subtract quarter, feb 28th 2010 to nov 28th 2009'); + test.equal(d.year(), 2009, 'subtract quarter, feb 28th 2010 to nov 28th 2009'); + test.done(); + }, + + "add long reverse args" : function (test) { + test.expect(9); + + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + test.equal(a.add({milliseconds: 50}).milliseconds(), 550, 'Add milliseconds'); + test.equal(a.add({seconds: 1}).seconds(), 9, 'Add seconds'); + test.equal(a.add({minutes: 1}).minutes(), 8, 'Add minutes'); + test.equal(a.add({hours: 1}).hours(), 7, 'Add hours'); + test.equal(a.add({days: 1}).date(), 13, 'Add date'); + test.equal(a.add({weeks: 1}).date(), 20, 'Add week'); + test.equal(a.add({months: 1}).month(), 10, 'Add month'); + test.equal(a.add({years: 1}).year(), 2012, 'Add year'); + test.equal(a.add({quarters: 1}).month(), 1, 'Add quarter'); + test.done(); + }, + + "add long singular reverse args" : function (test) { + test.expect(9); + + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + test.equal(a.add({millisecond: 50}).milliseconds(), 550, 'Add milliseconds'); + test.equal(a.add({second: 1}).seconds(), 9, 'Add seconds'); + test.equal(a.add({minute: 1}).minutes(), 8, 'Add minutes'); + test.equal(a.add({hour: 1}).hours(), 7, 'Add hours'); + test.equal(a.add({day: 1}).date(), 13, 'Add date'); + test.equal(a.add({week: 1}).date(), 20, 'Add week'); + test.equal(a.add({month: 1}).month(), 10, 'Add month'); + test.equal(a.add({year: 1}).year(), 2012, 'Add year'); + test.equal(a.add({quarter: 1}).month(), 1, 'Add quarter'); + test.done(); + }, + + "add string long reverse args" : function (test) { + test.expect(10); + + var a = moment(), b; + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + b = a.clone(); + + test.equal(a.add('millisecond', 50).milliseconds(), 550, 'Add milliseconds'); + test.equal(a.add('second', 1).seconds(), 9, 'Add seconds'); + test.equal(a.add('minute', 1).minutes(), 8, 'Add minutes'); + test.equal(a.add('hour', 1).hours(), 7, 'Add hours'); + test.equal(a.add('day', 1).date(), 13, 'Add date'); + test.equal(a.add('week', 1).date(), 20, 'Add week'); + test.equal(a.add('month', 1).month(), 10, 'Add month'); + test.equal(a.add('year', 1).year(), 2012, 'Add year'); + test.equal(b.add('day', '01').date(), 13, 'Add date'); + test.equal(a.add('quarter', 1).month(), 1, 'Add quarter'); + test.done(); + }, + + "add string long singular reverse args" : function (test) { + test.expect(10); + + var a = moment(), b; + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + b = a.clone(); + + test.equal(a.add('milliseconds', 50).milliseconds(), 550, 'Add milliseconds'); + test.equal(a.add('seconds', 1).seconds(), 9, 'Add seconds'); + test.equal(a.add('minutes', 1).minutes(), 8, 'Add minutes'); + test.equal(a.add('hours', 1).hours(), 7, 'Add hours'); + test.equal(a.add('days', 1).date(), 13, 'Add date'); + test.equal(a.add('weeks', 1).date(), 20, 'Add week'); + test.equal(a.add('months', 1).month(), 10, 'Add month'); + test.equal(a.add('years', 1).year(), 2012, 'Add year'); + test.equal(b.add('days', '01').date(), 13, 'Add date'); + test.equal(a.add('quarters', 1).month(), 1, 'Add quarter'); + test.done(); + }, + + "add string short reverse args" : function (test) { + test.expect(9); + + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + test.equal(a.add('ms', 50).milliseconds(), 550, 'Add milliseconds'); + test.equal(a.add('s', 1).seconds(), 9, 'Add seconds'); + test.equal(a.add('m', 1).minutes(), 8, 'Add minutes'); + test.equal(a.add('h', 1).hours(), 7, 'Add hours'); + test.equal(a.add('d', 1).date(), 13, 'Add date'); + test.equal(a.add('w', 1).date(), 20, 'Add week'); + test.equal(a.add('M', 1).month(), 10, 'Add month'); + test.equal(a.add('y', 1).year(), 2012, 'Add year'); + test.equal(a.add('Q', 1).month(), 1, 'Add quarter'); + test.done(); + }, + + "add string long" : function (test) { + test.expect(9); + + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + test.equal(a.add(50, 'millisecond').milliseconds(), 550, 'Add milliseconds'); + test.equal(a.add(1, 'second').seconds(), 9, 'Add seconds'); + test.equal(a.add(1, 'minute').minutes(), 8, 'Add minutes'); + test.equal(a.add(1, 'hour').hours(), 7, 'Add hours'); + test.equal(a.add(1, 'day').date(), 13, 'Add date'); + test.equal(a.add(1, 'week').date(), 20, 'Add week'); + test.equal(a.add(1, 'month').month(), 10, 'Add month'); + test.equal(a.add(1, 'year').year(), 2012, 'Add year'); + test.equal(a.add(1, 'quarter').month(), 1, 'Add quarter'); + test.done(); + }, + + "add string long singular" : function (test) { + test.expect(9); + + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + test.equal(a.add(50, 'milliseconds').milliseconds(), 550, 'Add milliseconds'); + test.equal(a.add(1, 'seconds').seconds(), 9, 'Add seconds'); + test.equal(a.add(1, 'minutes').minutes(), 8, 'Add minutes'); + test.equal(a.add(1, 'hours').hours(), 7, 'Add hours'); + test.equal(a.add(1, 'days').date(), 13, 'Add date'); + test.equal(a.add(1, 'weeks').date(), 20, 'Add week'); + test.equal(a.add(1, 'months').month(), 10, 'Add month'); + test.equal(a.add(1, 'years').year(), 2012, 'Add year'); + test.equal(a.add(1, 'quarters').month(), 1, 'Add quarter'); + test.done(); + }, + + "add string short" : function (test) { + test.expect(9); + + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + test.equal(a.add(50, 'ms').milliseconds(), 550, 'Add milliseconds'); + test.equal(a.add(1, 's').seconds(), 9, 'Add seconds'); + test.equal(a.add(1, 'm').minutes(), 8, 'Add minutes'); + test.equal(a.add(1, 'h').hours(), 7, 'Add hours'); + test.equal(a.add(1, 'd').date(), 13, 'Add date'); + test.equal(a.add(1, 'w').date(), 20, 'Add week'); + test.equal(a.add(1, 'M').month(), 10, 'Add month'); + test.equal(a.add(1, 'y').year(), 2012, 'Add year'); + test.equal(a.add(1, 'Q').month(), 1, 'Add quarter'); + test.done(); + }, + + "add strings string short args" : function (test) { + test.expect(9); + + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + test.equal(a.add('ms', '50').milliseconds(), 550, 'Add milliseconds'); + test.equal(a.add('s', '1').seconds(), 9, 'Add seconds'); + test.equal(a.add('m', '1').minutes(), 8, 'Add minutes'); + test.equal(a.add('h', '1').hours(), 7, 'Add hours'); + test.equal(a.add('d', '1').date(), 13, 'Add date'); + test.equal(a.add('w', '1').date(), 20, 'Add week'); + test.equal(a.add('M', '1').month(), 10, 'Add month'); + test.equal(a.add('y', '1').year(), 2012, 'Add year'); + test.equal(a.add('Q', '1').month(), 1, 'Add quarter'); + test.done(); + }, + + "subtract strings string short args" : function (test) { + test.expect(9); + + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + test.equal(a.subtract('ms', '50').milliseconds(), 450, 'Subtract milliseconds'); + test.equal(a.subtract('s', '1').seconds(), 7, 'Subtract seconds'); + test.equal(a.subtract('m', '1').minutes(), 6, 'Subtract minutes'); + test.equal(a.subtract('h', '1').hours(), 5, 'Subtract hours'); + test.equal(a.subtract('d', '1').date(), 11, 'Subtract date'); + test.equal(a.subtract('w', '1').date(), 4, 'Subtract week'); + test.equal(a.subtract('M', '1').month(), 8, 'Subtract month'); + test.equal(a.subtract('y', '1').year(), 2010, 'Subtract year'); + test.equal(a.subtract('Q', '1').month(), 5, 'Subtract quarter'); + test.done(); + }, + + "add strings string short" : function (test) { + test.expect(9); + + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + test.equal(a.add('50', 'ms').milliseconds(), 550, 'Add milliseconds'); + test.equal(a.add('1', 's').seconds(), 9, 'Add seconds'); + test.equal(a.add('1', 'm').minutes(), 8, 'Add minutes'); + test.equal(a.add('1', 'h').hours(), 7, 'Add hours'); + test.equal(a.add('1', 'd').date(), 13, 'Add date'); + test.equal(a.add('1', 'w').date(), 20, 'Add week'); + test.equal(a.add('1', 'M').month(), 10, 'Add month'); + test.equal(a.add('1', 'y').year(), 2012, 'Add year'); + test.equal(a.add('1', 'Q').month(), 1, 'Add quarter'); + test.done(); + }, + + "subtract strings string short" : function (test) { + test.expect(9); + + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(500); + + test.equal(a.subtract('50', 'ms').milliseconds(), 450, 'Subtract milliseconds'); + test.equal(a.subtract('1', 's').seconds(), 7, 'Subtract seconds'); + test.equal(a.subtract('1', 'm').minutes(), 6, 'Subtract minutes'); + test.equal(a.subtract('1', 'h').hours(), 5, 'Subtract hours'); + test.equal(a.subtract('1', 'd').date(), 11, 'Subtract date'); + test.equal(a.subtract('1', 'w').date(), 4, 'Subtract week'); + test.equal(a.subtract('1', 'M').month(), 8, 'Subtract month'); + test.equal(a.subtract('1', 'y').year(), 2010, 'Subtract year'); + test.equal(a.subtract('1', 'Q').month(), 5, 'Subtract quarter'); + test.done(); + }, + + "add across DST" : function (test) { + // Detect Safari bug and bail. Hours on 13th March 2011 are shifted + // with 1 ahead. + if (new Date(2011, 2, 13, 5, 0, 0).getHours() !== 5) { + test.done(); + return; + } + + var a = moment(new Date(2011, 2, 12, 5, 0, 0)), + b = moment(new Date(2011, 2, 12, 5, 0, 0)), + c = moment(new Date(2011, 2, 12, 5, 0, 0)), + d = moment(new Date(2011, 2, 12, 5, 0, 0)), + e = moment(new Date(2011, 2, 12, 5, 0, 0)); + a.add(1, 'days'); + b.add(24, 'hours'); + c.add(1, 'months'); + e.add(1, 'quarter'); + test.equal(a.hours(), 5, 'adding days over DST difference should result in the same hour'); + if (b.isDST() && !d.isDST()) { + test.equal(b.hours(), 6, 'adding hours over DST difference should result in a different hour'); + } else if (!b.isDST() && d.isDST()) { + test.equal(b.hours(), 4, 'adding hours over DST difference should result in a different hour'); + } else { + test.equal(b.hours(), 5, 'adding hours over DST difference should result in a same hour if the timezone does not have daylight savings time'); + } + test.equal(c.hours(), 5, 'adding months over DST difference should result in the same hour'); + test.equal(e.hours(), 5, 'adding quarters over DST difference should result in the same hour'); + test.done(); + } +}; + +var moment = require("../../moment"), + + getVerifier = function (test) { + return function (input, format, expected, description, asymetrical) { + var m = moment(input, format); + test.equal(m.format('YYYY MM DD'), expected, 'compare: ' + description); + + //test round trip + if (!asymetrical) { + test.equal(m.format(format), input, 'round trip: ' + description); + } + }; + }; + +exports.create = { + setUp : function (done) { + moment.locale('en'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "array" : function (test) { + test.expect(8); + test.ok(moment([2010]).toDate() instanceof Date, "[2010]"); + test.ok(moment([2010, 1]).toDate() instanceof Date, "[2010, 1]"); + test.ok(moment([2010, 1, 12]).toDate() instanceof Date, "[2010, 1, 12]"); + test.ok(moment([2010, 1, 12, 1]).toDate() instanceof Date, "[2010, 1, 12, 1]"); + test.ok(moment([2010, 1, 12, 1, 1]).toDate() instanceof Date, "[2010, 1, 12, 1, 1]"); + test.ok(moment([2010, 1, 12, 1, 1, 1]).toDate() instanceof Date, "[2010, 1, 12, 1, 1, 1]"); + test.ok(moment([2010, 1, 12, 1, 1, 1, 1]).toDate() instanceof Date, "[2010, 1, 12, 1, 1, 1, 1]"); + test.equal(+moment(new Date(2010, 1, 14, 15, 25, 50, 125)), +moment([2010, 1, 14, 15, 25, 50, 125]), "constructing with array === constructing with new Date()"); + test.done(); + }, + + "array copying": function (test) { + var importantArray = [2009, 11]; + test.expect(1); + moment(importantArray); + test.deepEqual(importantArray, [2009, 11], "initializer should not mutate the original array"); + test.done(); + }, + + "object" : function (test) { + test.expect(10); + test.ok(moment({year: 2010}).toDate() instanceof Date, "{year: 2010}"); + test.ok(moment({year: 2010, month: 1}).toDate() instanceof Date, "{year: 2010, month: 1}"); + test.ok(moment({year: 2010, month: 1, day: 12}).toDate() instanceof Date, "{year: 2010, month: 1, day: 12}"); + test.ok(moment({year: 2010, month: 1, day: 12, hours: 1}).toDate() instanceof Date, "{year: 2010, month: 1, day: 12, hours: 1}"); + test.ok(moment({year: 2010, month: 1, day: 12, hours: 1, minutes: 1}).toDate() instanceof Date, "{year: 2010, month: 1, hours: 12, minutes: 1, seconds: 1}"); + test.ok(moment({year: 2010, month: 1, day: 12, hours: 1, minutes: 1, seconds: 1}).toDate() instanceof Date, "{year: 2010, month: 1, day: 12, hours: 1, minutes: 1, seconds: 1}"); + test.ok(moment({year: 2010, month: 1, day: 12, hours: 1, minutes: 1, seconds: 1, milliseconds: 1}).toDate() instanceof Date, "{year: 2010, month: 1, day: 12, hours: 1, minutes: 1, seconds: 1, milliseconds: 1}"); + test.equal(+moment(new Date(2010, 1, 14, 15, 25, 50, 125)), +moment({years: 2010, months: 1, days: 14, hours: 15, minutes: 25, seconds: 50, milliseconds: 125}), "constructing with object (long plural) === constructing with new Date()"); + test.equal(+moment(new Date(2010, 1, 14, 15, 25, 50, 125)), +moment({year: 2010, month: 1, day: 14, hour: 15, minute: 25, second: 50, millisecond: 125}), "constructing with object (long) === constructing with new Date()"); + test.equal(+moment(new Date(2010, 1, 14, 15, 25, 50, 125)), +moment({y: 2010, M: 1, d: 14, h: 15, m: 25, s: 50, ms: 125}), "constructing with object (short) === constructing with new Date()"); + test.done(); + }, + + "multi format array copying": function (test) { + var importantArray = ['MM/DD/YYYY', 'YYYY-MM-DD', 'MM-DD-YYYY']; + test.expect(1); + moment('1999-02-13', importantArray); + test.deepEqual(importantArray, ['MM/DD/YYYY', 'YYYY-MM-DD', 'MM-DD-YYYY'], "initializer should not mutate the original array"); + test.done(); + }, + + "number" : function (test) { + test.expect(3); + test.ok(moment(1000).toDate() instanceof Date, "1000"); + test.ok((moment(1000).valueOf() === 1000), "testing valueOf"); + test.ok((moment.utc(1000).valueOf() === 1000), "testing valueOf"); + test.done(); + }, + + "unix" : function (test) { + test.expect(8); + test.equal(moment.unix(1).valueOf(), 1000, "1 unix timestamp == 1000 Date.valueOf"); + test.equal(moment(1000).unix(), 1, "1000 Date.valueOf == 1 unix timestamp"); + test.equal(moment.unix(1000).valueOf(), 1000000, "1000 unix timestamp == 1000000 Date.valueOf"); + test.equal(moment(1500).unix(), 1, "1500 Date.valueOf == 1 unix timestamp"); + test.equal(moment(1900).unix(), 1, "1900 Date.valueOf == 1 unix timestamp"); + test.equal(moment(2100).unix(), 2, "2100 Date.valueOf == 2 unix timestamp"); + test.equal(moment(1333129333524).unix(), 1333129333, "1333129333524 Date.valueOf == 1333129333 unix timestamp"); + test.equal(moment(1333129333524000).unix(), 1333129333524, "1333129333524000 Date.valueOf == 1333129333524 unix timestamp"); + test.done(); + }, + + "date" : function (test) { + test.expect(1); + test.ok(moment(new Date()).toDate() instanceof Date, "new Date()"); + test.done(); + }, + + "date mutation" : function (test) { + test.expect(1); + var a = new Date(); + test.ok(moment(a).toDate() !== a, "the date moment uses should not be the date passed in"); + test.done(); + }, + + "moment" : function (test) { + test.expect(2); + test.ok(moment(moment()).toDate() instanceof Date, "moment(moment())"); + test.ok(moment(moment(moment())).toDate() instanceof Date, "moment(moment(moment()))"); + test.done(); + }, + + "cloning moment should only copy own properties" : function (test) { + test.ok(!moment().clone().hasOwnProperty('month'), "Should not clone prototype methods"); + test.done(); + }, + + "cloning moment works with weird clones" : function (test) { + var extend = function (a, b) { + var i; + for (i in b) { + a[i] = b[i]; + } + return a; + }, + now = moment(), + nowu = moment.utc(); + + test.expect(2); + test.equal(+extend({}, now).clone(), +now, "cloning extend-ed now is now"); + test.equal(+extend({}, nowu).clone(), +nowu, "cloning extend-ed utc now is utc now"); + test.done(); + }, + + "cloning respects moment.momentProperties" : function (test) { + var m = moment(); + + test.equal(m.clone()._special, undefined, "cloning ignores extra properties"); + m._special = "bacon"; + moment.momentProperties.push("_special"); + test.equal(m.clone()._special, "bacon", "cloning respects momentProperties"); + moment.momentProperties.pop(); + + test.done(); + }, + + "undefined" : function (test) { + test.expect(1); + test.ok(moment().toDate() instanceof Date, "undefined"); + test.done(); + }, + + "string without format - json" : function (test) { + test.expect(5); + test.equal(moment("Date(1325132654000)").valueOf(), 1325132654000, "Date(1325132654000)"); + test.equal(moment("Date(-1325132654000)").valueOf(), -1325132654000, "Date(-1325132654000)"); + test.equal(moment("/Date(1325132654000)/").valueOf(), 1325132654000, "/Date(1325132654000)/"); + test.equal(moment("/Date(1325132654000+0700)/").valueOf(), 1325132654000, "/Date(1325132654000+0700)/"); + test.equal(moment("/Date(1325132654000-0700)/").valueOf(), 1325132654000, "/Date(1325132654000-0700)/"); + test.done(); + }, + + "string with format dropped am/pm bug" : function (test) { + moment.locale('en'); + + test.equal(moment('05/1/2012 12:25:00', 'MM/DD/YYYY h:m:s a').format('MM/DD/YYYY'), '05/01/2012', 'should not break if am/pm is left off from the parsing tokens'); + test.equal(moment('05/1/2012 12:25:00 am', 'MM/DD/YYYY h:m:s a').format('MM/DD/YYYY'), '05/01/2012', 'should not break if am/pm is left off from the parsing tokens'); + test.equal(moment('05/1/2012 12:25:00 pm', 'MM/DD/YYYY h:m:s a').format('MM/DD/YYYY'), '05/01/2012', 'should not break if am/pm is left off from the parsing tokens'); + + test.ok(moment('05/1/2012 12:25:00', 'MM/DD/YYYY h:m:s a').isValid()); + test.ok(moment('05/1/2012 12:25:00 am', 'MM/DD/YYYY h:m:s a').isValid()); + test.ok(moment('05/1/2012 12:25:00 pm', 'MM/DD/YYYY h:m:s a').isValid()); + + test.done(); + }, + + "empty string with formats" : function (test) { + test.expect(8); + + test.equal(moment('', 'MM').format('YYYY-MM-DD HH:mm:ss'), 'Invalid date'); + test.equal(moment(' ', 'MM').format('YYYY-MM-DD HH:mm:ss'), 'Invalid date'); + test.equal(moment(' ', 'DD').format('YYYY-MM-DD HH:mm:ss'), 'Invalid date'); + test.equal(moment(' ', ['MM', "DD"]).format('YYYY-MM-DD HH:mm:ss'), 'Invalid date'); + + test.ok(!moment('', 'MM').isValid()); + test.ok(!moment(' ', 'MM').isValid()); + test.ok(!moment(' ', 'DD').isValid()); + test.ok(!moment(' ', ['MM', "DD"]).isValid()); + + test.done(); + }, + + "defaulting to current date" : function (test) { + test.expect(4); + + var now = moment(); + test.equal(moment('12:13:14', 'hh:mm:ss').format('YYYY-MM-DD hh:mm:ss'), + now.clone().hour(12).minute(13).second(14).format('YYYY-MM-DD hh:mm:ss'), + 'given only time default to current date'); + test.equal(moment('05', 'DD').format('YYYY-MM-DD'), + now.clone().date(5).format('YYYY-MM-DD'), + 'given day of month default to current month, year'); + test.equal(moment('05', 'MM').format('YYYY-MM-DD'), + now.clone().month(4).date(1).format('YYYY-MM-DD'), + 'given month default to current year'); + test.equal(moment('1996', 'YYYY').format('YYYY-MM-DD'), + now.clone().year(1996).month(0).date(1).format('YYYY-MM-DD'), + 'given year do not default'); + test.done(); + }, + + "matching am/pm" : function (test) { + test.expect(13); + + test.equal(moment('2012-09-03T03:00PM', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for PM'); + test.equal(moment('2012-09-03T03:00P.M.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for P.M.'); + test.equal(moment('2012-09-03T03:00P', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for P'); + test.equal(moment('2012-09-03T03:00pm', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for pm'); + test.equal(moment('2012-09-03T03:00p.m.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for p.m.'); + test.equal(moment('2012-09-03T03:00p', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for p'); + + test.equal(moment('2012-09-03T03:00AM', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for AM'); + test.equal(moment('2012-09-03T03:00A.M.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for A.M.'); + test.equal(moment('2012-09-03T03:00A', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for A'); + test.equal(moment('2012-09-03T03:00am', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for am'); + test.equal(moment('2012-09-03T03:00a.m.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for a.m.'); + test.equal(moment('2012-09-03T03:00a', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for a'); + + test.equal(moment('5:00p.m.March 4 2012', 'h:mmAMMMM D YYYY').format('YYYY-MM-DDThh:mmA'), '2012-03-04T05:00PM', 'am/pm should parse correctly before month names'); + + test.done(); + }, + + "string with format" : function (test) { + moment.locale('en'); + var a = [ + ['YYYY-Q', '2014-4'], + ['MM-DD-YYYY', '12-02-1999'], + ['DD-MM-YYYY', '12-02-1999'], + ['DD/MM/YYYY', '12/02/1999'], + ['DD_MM_YYYY', '12_02_1999'], + ['DD:MM:YYYY', '12:02:1999'], + ['D-M-YY', '2-2-99'], + ['YY', '99'], + ['DDD-YYYY', '300-1999'], + ['DD-MM-YYYY h:m:s', '12-02-1999 2:45:10'], + ['DD-MM-YYYY h:m:s a', '12-02-1999 2:45:10 am'], + ['DD-MM-YYYY h:m:s a', '12-02-1999 2:45:10 pm'], + ['h:mm a', '12:00 pm'], + ['h:mm a', '12:30 pm'], + ['h:mm a', '12:00 am'], + ['h:mm a', '12:30 am'], + ['HH:mm', '12:00'], + ['YYYY-MM-DDTHH:mm:ss', '2011-11-11T11:11:11'], + ['MM-DD-YYYY [M]', '12-02-1999 M'], + ['ddd MMM DD HH:mm:ss YYYY', 'Tue Apr 07 22:52:51 2009'], + ['HH:mm:ss', '12:00:00'], + ['HH:mm:ss', '12:30:00'], + ['HH:mm:ss', '00:00:00'], + ['HH:mm:ss S', '00:30:00 1'], + ['HH:mm:ss SS', '00:30:00 12'], + ['HH:mm:ss SSS', '00:30:00 123'], + ['HH:mm:ss S', '00:30:00 7'], + ['HH:mm:ss SS', '00:30:00 78'], + ['HH:mm:ss SSS', '00:30:00 789'], + ['X', '1234567890'], + ['LT', '12:30 AM'], + ['L', '09/02/1999'], + ['l', '9/2/1999'], + ['LL', 'September 2, 1999'], + ['ll', 'Sep 2, 1999'], + ['LLL', 'September 2, 1999 12:30 AM'], + ['lll', 'Sep 2, 1999 12:30 AM'], + ['LLLL', 'Thursday, September 2, 1999 12:30 AM'], + ['llll', 'Thu, Sep 2, 1999 12:30 AM'] + ], + m, + i; + + test.expect(2 * a.length); + for (i = 0; i < a.length; i++) { + m = moment(a[i][1], a[i][0]); + test.ok(m.isValid()); + test.equal(m.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "unix timestamp format" : function (test) { + var formats = ['X', 'X.S', 'X.SS', 'X.SSS'], i, format; + + test.expect(formats.length * 4); + for (i = 0; i < formats.length; i++) { + format = formats[i]; + test.equal(moment('1234567890', format).valueOf(), 1234567890 * 1000, format + " matches timestamp without milliseconds"); + test.equal(moment('1234567890.1', format).valueOf(), 1234567890 * 1000 + 100, format + " matches timestamp with deciseconds"); + test.equal(moment('1234567890.12', format).valueOf(), 1234567890 * 1000 + 120, format + " matches timestamp with centiseconds"); + test.equal(moment('1234567890.123', format).valueOf(), 1234567890 * 1000 + 123, format + " matches timestamp with milliseconds"); + } + + test.done(); + }, + + "milliseconds format" : function (test) { + test.expect(5); + test.equal(moment('1', 'S').get('ms'), 100, 'deciseconds'); + // test.equal(moment('10', 'S', true).isValid(), false, 'deciseconds with two digits'); + // test.equal(moment('1', 'SS', true).isValid(), false, 'centiseconds with one digits'); + test.equal(moment('12', 'SS').get('ms'), 120, 'centiseconds'); + // test.equal(moment('123', 'SS', true).isValid(), false, 'centiseconds with three digits'); + test.equal(moment('123', 'SSS').get('ms'), 123, 'milliseconds'); + test.equal(moment('1234', 'SSSS').get('ms'), 123, 'milliseconds with SSSS'); + test.equal(moment('123456789101112', 'SSSS').get('ms'), 123, 'milliseconds with SSSS'); + test.done(); + }, + + "string with format no separators" : function (test) { + moment.locale('en'); + var a = [ + ['MMDDYYYY', '12021999'], + ['DDMMYYYY', '12021999'], + ['YYYYMMDD', '19991202'], + ['DDMMMYYYY', '10Sep2001'] + ], i; + + test.expect(a.length); + + for (i = 0; i < a.length; i++) { + test.equal(moment(a[i][1], a[i][0]).format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + + test.done(); + }, + + "string with format (timezone)" : function (test) { + test.expect(8); + test.equal(moment('5 -0700', 'H ZZ').toDate().getUTCHours(), 12, 'parse hours "5 -0700" ---> "H ZZ"'); + test.equal(moment('5 -07:00', 'H Z').toDate().getUTCHours(), 12, 'parse hours "5 -07:00" ---> "H Z"'); + test.equal(moment('5 -0730', 'H ZZ').toDate().getUTCMinutes(), 30, 'parse hours "5 -0730" ---> "H ZZ"'); + test.equal(moment('5 -07:30', 'H Z').toDate().getUTCMinutes(), 30, 'parse hours "5 -07:0" ---> "H Z"'); + test.equal(moment('5 +0100', 'H ZZ').toDate().getUTCHours(), 4, 'parse hours "5 +0100" ---> "H ZZ"'); + test.equal(moment('5 +01:00', 'H Z').toDate().getUTCHours(), 4, 'parse hours "5 +01:00" ---> "H Z"'); + test.equal(moment('5 +0130', 'H ZZ').toDate().getUTCMinutes(), 30, 'parse hours "5 +0130" ---> "H ZZ"'); + test.equal(moment('5 +01:30', 'H Z').toDate().getUTCMinutes(), 30, 'parse hours "5 +01:30" ---> "H Z"'); + test.done(); + }, + + "string with format (timezone offset)" : function (test) { + var a, b, c, d, e, f; + test.expect(4); + a = new Date(Date.UTC(2011, 0, 1, 1)); + b = moment('2011 1 1 0 -01:00', 'YYYY MM DD HH Z'); + test.equal(a.getHours(), b.hours(), 'date created with utc == parsed string with timezone offset'); + test.equal(+a, +b, 'date created with utc == parsed string with timezone offset'); + c = moment('2011 2 1 10 -05:00', 'YYYY MM DD HH Z'); + d = moment('2011 2 1 8 -07:00', 'YYYY MM DD HH Z'); + test.equal(c.hours(), d.hours(), '10 am central time == 8 am pacific time'); + e = moment.utc('Fri, 20 Jul 2012 17:15:00', 'ddd, DD MMM YYYY HH:mm:ss'); + f = moment.utc('Fri, 20 Jul 2012 10:15:00 -0700', 'ddd, DD MMM YYYY HH:mm:ss ZZ'); + test.equal(e.hours(), f.hours(), 'parse timezone offset in utc'); + test.done(); + }, + + "string with timezone around start of year" : function (test) { + test.equal(moment('2000-01-01T00:00:00.000+01:00').toISOString(), "1999-12-31T23:00:00.000Z", "+1:00 around 2000"); + test.equal(moment('2000-01-01T00:00:00.000-01:00').toISOString(), "2000-01-01T01:00:00.000Z", "-1:00 around 2000"); + test.equal(moment('1970-01-01T00:00:00.000+01:00').toISOString(), "1969-12-31T23:00:00.000Z", "+1:00 around 1970"); + test.equal(moment('1970-01-01T00:00:00.000-01:00').toISOString(), "1970-01-01T01:00:00.000Z", "-1:00 around 1970"); + test.equal(moment('1200-01-01T00:00:00.000+01:00').toISOString(), "1199-12-31T23:00:00.000Z", "+1:00 around 1200"); + test.equal(moment('1200-01-01T00:00:00.000-01:00').toISOString(), "1200-01-01T01:00:00.000Z", "-1:00 around 1200"); + test.done(); + }, + + "string with array of formats" : function (test) { + test.equal(moment('11-02-1999', ['MM-DD-YYYY', 'DD-MM-YYYY']).format('MM DD YYYY'), '11 02 1999', 'switching month and day'); + test.equal(moment('02-11-1999', ['MM/DD/YYYY', 'YYYY MM DD', 'MM-DD-YYYY']).format('MM DD YYYY'), '02 11 1999', 'year last'); + test.equal(moment('1999-02-11', ['MM/DD/YYYY', 'YYYY MM DD', 'MM-DD-YYYY']).format('MM DD YYYY'), '02 11 1999', 'year first'); + + test.equal(moment('02-11-1999', ['MM/DD/YYYY', 'YYYY MM DD']).format('MM DD YYYY'), '02 11 1999', 'year last'); + test.equal(moment('1999-02-11', ['MM/DD/YYYY', 'YYYY MM DD']).format('MM DD YYYY'), '02 11 1999', 'year first'); + test.equal(moment('02-11-1999', ['YYYY MM DD', 'MM/DD/YYYY']).format('MM DD YYYY'), '02 11 1999', 'year last'); + test.equal(moment('1999-02-11', ['YYYY MM DD', 'MM/DD/YYYY']).format('MM DD YYYY'), '02 11 1999', 'year first'); + + test.equal(moment('13-11-1999', ['MM/DD/YYYY', 'DD/MM/YYYY']).format('MM DD YYYY'), '11 13 1999', 'second must be month'); + test.equal(moment('11-13-1999', ['MM/DD/YYYY', 'DD/MM/YYYY']).format('MM DD YYYY'), '11 13 1999', 'first must be month'); + test.equal(moment('01-02-2000', ['MM/DD/YYYY', 'DD/MM/YYYY']).format('MM DD YYYY'), '01 02 2000', 'either can be a month, month first format'); + test.equal(moment('02-01-2000', ['DD/MM/YYYY', 'MM/DD/YYYY']).format('MM DD YYYY'), '01 02 2000', 'either can be a month, day first format'); + + test.equal(moment('11-02-10', ['MM/DD/YY', 'YY MM DD', 'DD-MM-YY']).format('MM DD YYYY'), '02 11 2010', 'all unparsed substrings have influence on format penalty'); + test.equal(moment('11-02-10', ['MM-DD-YY HH:mm', 'YY MM DD']).format('MM DD YYYY'), '02 10 2011', 'prefer formats without extra tokens'); + test.equal(moment('11-02-10 junk', ['MM-DD-YY', 'YY.MM.DD junk']).format('MM DD YYYY'), '02 10 2011', 'prefer formats that dont result in extra characters'); + test.equal(moment('11-22-10', ['YY-MM-DD', 'YY-DD-MM']).format('MM DD YYYY'), '10 22 2011', 'prefer valid results'); + + test.equal(moment('gibberish', ['YY-MM-DD', 'YY-DD-MM']).format('MM DD YYYY'), 'Invalid date', 'doest throw for invalid strings'); + test.equal(moment('gibberish', []).format('MM DD YYYY'), 'Invalid date', 'doest throw for an empty array'); + + //https://github.com/moment/moment/issues/1143 + test.equal(moment( + "System Administrator and Database Assistant (7/1/2011), System Administrator and Database Assistant (7/1/2011), Database Coordinator (7/1/2011), Vice President (7/1/2011), System Administrator and Database Assistant (5/31/2012), Database Coordinator (7/1/2012), System Administrator and Database Assistant (7/1/2013)", + ["MM/DD/YYYY", "MM-DD-YYYY", "YYYY-MM-DD", "YYYY-MM-DDTHH:mm:ssZ"]) + .format('YYYY-MM-DD'), '2011-07-01', 'Works for long strings'); + + test.equal(moment('11-02-10', ['MM.DD.YY', 'DD-MM-YY']).format('MM DD YYYY'), '02 11 2010', 'escape RegExp special characters on comparing'); + + test.equal(moment('13-10-98', ['DD MM YY', 'DD MM YYYY'])._f, 'DD MM YY', 'use two digit year'); + test.equal(moment('13-10-1998', ['DD MM YY', 'DD MM YYYY'])._f, 'DD MM YYYY', 'use four digit year'); + + test.equal(moment('01', ["MM", "DD"])._f, "MM", "Should use first valid format"); + + test.done(); + }, + + "string with array of formats + ISO": function (test) { + test.equal(moment('1994', [moment.ISO_8601, 'MM', 'HH:mm', 'YYYY']).year(), 1994, 'iso: test parse YYYY'); + test.equal(moment('17:15', [moment.ISO_8601, 'MM', 'HH:mm', 'YYYY']).hour(), 17, 'iso: test parse HH:mm (1)'); + test.equal(moment('17:15', [moment.ISO_8601, 'MM', 'HH:mm', 'YYYY']).minutes(), 15, 'iso: test parse HH:mm (2)'); + test.equal(moment('06', [moment.ISO_8601, 'MM', 'HH:mm', 'YYYY']).month(), 6 - 1, 'iso: test parse MM'); + test.equal(moment('2012-06-01', [moment.ISO_8601, 'MM', 'HH:mm', 'YYYY']).parsingFlags().iso, true, 'iso: test parse iso'); + test.equal(moment('2014-05-05', [moment.ISO_8601, 'YYYY-MM-DD']).parsingFlags().iso, true, 'iso: edge case array precedence iso'); + test.equal(moment('2014-05-05', ['YYYY-MM-DD', moment.ISO_8601]).parsingFlags().iso, false, 'iso: edge case array precedence not iso'); + test.done(); + }, + + "string with format - years" : function (test) { + test.expect(4); + test.equal(moment('67', 'YY').format('YYYY'), '2067', '67 > 2067'); + test.equal(moment('68', 'YY').format('YYYY'), '2068', '68 > 2068'); + test.equal(moment('69', 'YY').format('YYYY'), '1969', '69 > 1969'); + test.equal(moment('70', 'YY').format('YYYY'), '1970', '70 > 1970'); + test.done(); + }, + + "implicit cloning" : function (test) { + test.expect(2); + var momentA = moment([2011, 10, 10]), + momentB = moment(momentA); + momentA.month(5); + test.equal(momentB.month(), 10, "Calling moment() on a moment will create a clone"); + test.equal(momentA.month(), 5, "Calling moment() on a moment will create a clone"); + test.done(); + }, + + "explicit cloning" : function (test) { + test.expect(2); + var momentA = moment([2011, 10, 10]), + momentB = momentA.clone(); + momentA.month(5); + test.equal(momentB.month(), 10, "Calling moment() on a moment will create a clone"); + test.equal(momentA.month(), 5, "Calling moment() on a moment will create a clone"); + test.done(); + }, + + "cloning carrying over utc mode" : function (test) { + test.expect(8); + + test.equal(moment().local().clone()._isUTC, false, "An explicit cloned local moment should have _isUTC == false"); + test.equal(moment().utc().clone()._isUTC, true, "An cloned utc moment should have _isUTC == true"); + test.equal(moment().clone()._isUTC, false, "An explicit cloned local moment should have _isUTC == false"); + test.equal(moment.utc().clone()._isUTC, true, "An explicit cloned utc moment should have _isUTC == true"); + test.equal(moment(moment().local())._isUTC, false, "An implicit cloned local moment should have _isUTC == false"); + test.equal(moment(moment().utc())._isUTC, true, "An implicit cloned utc moment should have _isUTC == true"); + test.equal(moment(moment())._isUTC, false, "An implicit cloned local moment should have _isUTC == false"); + test.equal(moment(moment.utc())._isUTC, true, "An implicit cloned utc moment should have _isUTC == true"); + + test.done(); + }, + + "parsing iso" : function (test) { + var offset = moment([2011, 9, 8]).zone(), + pad = function (input) { + if (input < 10) { + return '0' + input; + } + return '' + input; + }, + hourOffset = (offset > 0) ? Math.floor(offset / 60) : Math.ceil(offset / 60), + minOffset = offset - (hourOffset * 60), + tz = (offset > 0) ? '-' + pad(hourOffset) + ':' + pad(minOffset) : '+' + pad(-hourOffset) + ':' + pad(-minOffset), + tz2 = tz.replace(':', ''), + tz3 = tz2.slice(0, 3), + formats = [ + ['2011-10-08', '2011-10-08T00:00:00.000' + tz], + ['2011-10-08T18', '2011-10-08T18:00:00.000' + tz], + ['2011-10-08T18:04', '2011-10-08T18:04:00.000' + tz], + ['2011-10-08T18:04:20', '2011-10-08T18:04:20.000' + tz], + ['2011-10-08T18:04' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011-10-08T18:04:20' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011-10-08T18:04' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011-10-08T18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011-10-08T18:04' + tz3, '2011-10-08T18:04:00.000' + tz], + ['2011-10-08T18:04:20' + tz3, '2011-10-08T18:04:20.000' + tz], + ['2011-10-08T18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011-10-08T18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011-10-08T18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['2011-10-08 18', '2011-10-08T18:00:00.000' + tz], + ['2011-10-08 18:04', '2011-10-08T18:04:00.000' + tz], + ['2011-10-08 18:04:20', '2011-10-08T18:04:20.000' + tz], + ['2011-10-08 18:04' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011-10-08 18:04:20' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011-10-08 18:04' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011-10-08 18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011-10-08 18:04' + tz3, '2011-10-08T18:04:00.000' + tz], + ['2011-10-08 18:04:20' + tz3, '2011-10-08T18:04:20.000' + tz], + ['2011-10-08 18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011-10-08 18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011-10-08 18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['2011-W40', '2011-10-03T00:00:00.000' + tz], + ['2011-W40-6', '2011-10-08T00:00:00.000' + tz], + ['2011-W40-6T18', '2011-10-08T18:00:00.000' + tz], + ['2011-W40-6T18:04', '2011-10-08T18:04:00.000' + tz], + ['2011-W40-6T18:04:20', '2011-10-08T18:04:20.000' + tz], + ['2011-W40-6T18:04' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011-W40-6T18:04:20' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011-W40-6T18:04' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011-W40-6T18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011-W40-6T18:04' + tz3, '2011-10-08T18:04:00.000' + tz], + ['2011-W40-6T18:04:20' + tz3, '2011-10-08T18:04:20.000' + tz], + ['2011-W40-6T18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011-W40-6T18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011-W40-6T18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['2011-W40-6 18', '2011-10-08T18:00:00.000' + tz], + ['2011-W40-6 18:04', '2011-10-08T18:04:00.000' + tz], + ['2011-W40-6 18:04:20', '2011-10-08T18:04:20.000' + tz], + ['2011-W40-6 18:04' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011-W40-6 18:04:20' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011-W40-6 18:04' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011-W40-6 18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011-W40-6 18:04' + tz3, '2011-10-08T18:04:00.000' + tz], + ['2011-W40-6 18:04:20' + tz3, '2011-10-08T18:04:20.000' + tz], + ['2011-W40-6 18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011-W40-6 18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011-W40-6 18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['2011-281', '2011-10-08T00:00:00.000' + tz], + ['2011-281T18', '2011-10-08T18:00:00.000' + tz], + ['2011-281T18:04', '2011-10-08T18:04:00.000' + tz], + ['2011-281T18:04:20', '2011-10-08T18:04:20.000' + tz], + ['2011-281T18:04' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011-281T18:04:20' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011-281T18:04' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011-281T18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011-281T18:04' + tz3, '2011-10-08T18:04:00.000' + tz], + ['2011-281T18:04:20' + tz3, '2011-10-08T18:04:20.000' + tz], + ['2011-281T18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011-281T18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011-281T18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz], + ['2011-281 18', '2011-10-08T18:00:00.000' + tz], + ['2011-281 18:04', '2011-10-08T18:04:00.000' + tz], + ['2011-281 18:04:20', '2011-10-08T18:04:20.000' + tz], + ['2011-281 18:04' + tz, '2011-10-08T18:04:00.000' + tz], + ['2011-281 18:04:20' + tz, '2011-10-08T18:04:20.000' + tz], + ['2011-281 18:04' + tz2, '2011-10-08T18:04:00.000' + tz], + ['2011-281 18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz], + ['2011-281 18:04' + tz3, '2011-10-08T18:04:00.000' + tz], + ['2011-281 18:04:20' + tz3, '2011-10-08T18:04:20.000' + tz], + ['2011-281 18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz], + ['2011-281 18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz], + ['2011-281 18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz] + ], i; + test.expect(formats.length); + for (i = 0; i < formats.length; i++) { + test.equal(moment(formats[i][0]).format('YYYY-MM-DDTHH:mm:ss.SSSZ'), formats[i][1], "moment should be able to parse ISO " + formats[i][0]); + } + test.done(); + }, + + "parsing iso week year/week/weekday" : function (test) { + test.equal(moment.utc("2007-W01").format(), "2007-01-01T00:00:00+00:00", "2008 week 1 (1st Jan Mon)"); + test.equal(moment.utc("2008-W01").format(), "2007-12-31T00:00:00+00:00", "2008 week 1 (1st Jan Tue)"); + test.equal(moment.utc("2003-W01").format(), "2002-12-30T00:00:00+00:00", "2008 week 1 (1st Jan Wed)"); + test.equal(moment.utc("2009-W01").format(), "2008-12-29T00:00:00+00:00", "2009 week 1 (1st Jan Thu)"); + test.equal(moment.utc("2010-W01").format(), "2010-01-04T00:00:00+00:00", "2010 week 1 (1st Jan Fri)"); + test.equal(moment.utc("2011-W01").format(), "2011-01-03T00:00:00+00:00", "2011 week 1 (1st Jan Sat)"); + test.equal(moment.utc("2012-W01").format(), "2012-01-02T00:00:00+00:00", "2012 week 1 (1st Jan Sun)"); + test.done(); + }, + + "parsing week year/week/weekday (dow 1, doy 4)" : function (test) { + moment.locale("dow:1,doy:4", {week: {dow: 1, doy: 4}}); + + test.equal(moment.utc("2007-01", "gggg-ww").format(), "2007-01-01T00:00:00+00:00", "2007 week 1 (1st Jan Mon)"); + test.equal(moment.utc("2008-01", "gggg-ww").format(), "2007-12-31T00:00:00+00:00", "2008 week 1 (1st Jan Tue)"); + test.equal(moment.utc("2003-01", "gggg-ww").format(), "2002-12-30T00:00:00+00:00", "2003 week 1 (1st Jan Wed)"); + test.equal(moment.utc("2009-01", "gggg-ww").format(), "2008-12-29T00:00:00+00:00", "2009 week 1 (1st Jan Thu)"); + test.equal(moment.utc("2010-01", "gggg-ww").format(), "2010-01-04T00:00:00+00:00", "2010 week 1 (1st Jan Fri)"); + test.equal(moment.utc("2011-01", "gggg-ww").format(), "2011-01-03T00:00:00+00:00", "2011 week 1 (1st Jan Sat)"); + test.equal(moment.utc("2012-01", "gggg-ww").format(), "2012-01-02T00:00:00+00:00", "2012 week 1 (1st Jan Sun)"); + + moment.defineLocale("dow:1,doy:4", null); + test.done(); + }, + + "parsing week year/week/weekday (dow 1, doy 7)" : function (test) { + moment.locale("dow:1,doy:7", {week: {dow: 1, doy: 7}}); + + test.equal(moment.utc("2007-01", "gggg-ww").format(), "2007-01-01T00:00:00+00:00", "2007 week 1 (1st Jan Mon)"); + test.equal(moment.utc("2008-01", "gggg-ww").format(), "2007-12-31T00:00:00+00:00", "2008 week 1 (1st Jan Tue)"); + test.equal(moment.utc("2003-01", "gggg-ww").format(), "2002-12-30T00:00:00+00:00", "2003 week 1 (1st Jan Wed)"); + test.equal(moment.utc("2009-01", "gggg-ww").format(), "2008-12-29T00:00:00+00:00", "2009 week 1 (1st Jan Thu)"); + test.equal(moment.utc("2010-01", "gggg-ww").format(), "2009-12-28T00:00:00+00:00", "2010 week 1 (1st Jan Fri)"); + test.equal(moment.utc("2011-01", "gggg-ww").format(), "2010-12-27T00:00:00+00:00", "2011 week 1 (1st Jan Sat)"); + test.equal(moment.utc("2012-01", "gggg-ww").format(), "2011-12-26T00:00:00+00:00", "2012 week 1 (1st Jan Sun)"); + moment.defineLocale("dow:1,doy:7", null); + test.done(); + }, + + "parsing week year/week/weekday (dow 0, doy 6)" : function (test) { + moment.locale("dow:0,doy:6", {week: {dow: 0, doy: 6}}); + + test.equal(moment.utc("2007-01", "gggg-ww").format(), "2006-12-31T00:00:00+00:00", "2007 week 1 (1st Jan Mon)"); + test.equal(moment.utc("2008-01", "gggg-ww").format(), "2007-12-30T00:00:00+00:00", "2008 week 1 (1st Jan Tue)"); + test.equal(moment.utc("2003-01", "gggg-ww").format(), "2002-12-29T00:00:00+00:00", "2003 week 1 (1st Jan Wed)"); + test.equal(moment.utc("2009-01", "gggg-ww").format(), "2008-12-28T00:00:00+00:00", "2009 week 1 (1st Jan Thu)"); + test.equal(moment.utc("2010-01", "gggg-ww").format(), "2009-12-27T00:00:00+00:00", "2010 week 1 (1st Jan Fri)"); + test.equal(moment.utc("2011-01", "gggg-ww").format(), "2010-12-26T00:00:00+00:00", "2011 week 1 (1st Jan Sat)"); + test.equal(moment.utc("2012-01", "gggg-ww").format(), "2012-01-01T00:00:00+00:00", "2012 week 1 (1st Jan Sun)"); + moment.defineLocale("dow:0,doy:6", null); + test.done(); + }, + + "parsing week year/week/weekday (dow 6, doy 12)" : function (test) { + moment.locale("dow:6,doy:12", {week: {dow: 6, doy: 12}}); + + test.equal(moment.utc("2007-01", "gggg-ww").format(), "2006-12-30T00:00:00+00:00", "2007 week 1 (1st Jan Mon)"); + test.equal(moment.utc("2008-01", "gggg-ww").format(), "2007-12-29T00:00:00+00:00", "2008 week 1 (1st Jan Tue)"); + test.equal(moment.utc("2003-01", "gggg-ww").format(), "2002-12-28T00:00:00+00:00", "2003 week 1 (1st Jan Wed)"); + test.equal(moment.utc("2009-01", "gggg-ww").format(), "2008-12-27T00:00:00+00:00", "2009 week 1 (1st Jan Thu)"); + test.equal(moment.utc("2010-01", "gggg-ww").format(), "2009-12-26T00:00:00+00:00", "2010 week 1 (1st Jan Fri)"); + test.equal(moment.utc("2011-01", "gggg-ww").format(), "2011-01-01T00:00:00+00:00", "2011 week 1 (1st Jan Sat)"); + test.equal(moment.utc("2012-01", "gggg-ww").format(), "2011-12-31T00:00:00+00:00", "2012 week 1 (1st Jan Sun)"); + test.done(); + }, + + "parsing ISO with Z" : function (test) { + var i, mom, formats = [ + ['2011-10-08T18:04', '2011-10-08T18:04:00.000'], + ['2011-10-08T18:04:20', '2011-10-08T18:04:20.000'], + ['2011-10-08T18:04:20.1', '2011-10-08T18:04:20.100'], + ['2011-10-08T18:04:20.11', '2011-10-08T18:04:20.110'], + ['2011-10-08T18:04:20.111', '2011-10-08T18:04:20.111'], + ['2011-W40-6T18', '2011-10-08T18:00:00.000'], + ['2011-W40-6T18:04', '2011-10-08T18:04:00.000'], + ['2011-W40-6T18:04:20', '2011-10-08T18:04:20.000'], + ['2011-W40-6T18:04:20.1', '2011-10-08T18:04:20.100'], + ['2011-W40-6T18:04:20.11', '2011-10-08T18:04:20.110'], + ['2011-W40-6T18:04:20.111', '2011-10-08T18:04:20.111'], + ['2011-281T18', '2011-10-08T18:00:00.000'], + ['2011-281T18:04', '2011-10-08T18:04:00.000'], + ['2011-281T18:04:20', '2011-10-08T18:04:20.000'], + ['2011-281T18:04:20', '2011-10-08T18:04:20.000'], + ['2011-281T18:04:20.1', '2011-10-08T18:04:20.100'], + ['2011-281T18:04:20.11', '2011-10-08T18:04:20.110'], + ['2011-281T18:04:20.111', '2011-10-08T18:04:20.111'] + ]; + + for (i = 0; i < formats.length; i++) { + mom = moment(formats[i][0] + 'Z').utc(); + test.equal(mom.format('YYYY-MM-DDTHH:mm:ss.SSS'), formats[i][1], "moment should be able to parse ISO in UTC " + formats[i][0] + 'Z'); + + mom = moment(formats[i][0] + ' Z').utc(); + test.equal(mom.format('YYYY-MM-DDTHH:mm:ss.SSS'), formats[i][1], "moment should be able to parse ISO in UTC " + formats[i][0] + ' Z'); + } + test.done(); + }, + + "parsing iso with T" : function (test) { + test.expect(8); + + test.equal(moment('2011-10-08T18')._f, "YYYY-MM-DDTHH", "should include 'T' in the format"); + test.equal(moment('2011-10-08T18:20')._f, "YYYY-MM-DDTHH:mm", "should include 'T' in the format"); + test.equal(moment('2011-10-08T18:20:13')._f, "YYYY-MM-DDTHH:mm:ss", "should include 'T' in the format"); + test.equal(moment('2011-10-08T18:20:13.321')._f, "YYYY-MM-DDTHH:mm:ss.SSSS", "should include 'T' in the format"); + + test.equal(moment('2011-10-08 18')._f, "YYYY-MM-DD HH", "should not include 'T' in the format"); + test.equal(moment('2011-10-08 18:20')._f, "YYYY-MM-DD HH:mm", "should not include 'T' in the format"); + test.equal(moment('2011-10-08 18:20:13')._f, "YYYY-MM-DD HH:mm:ss", "should not include 'T' in the format"); + test.equal(moment('2011-10-08 18:20:13.321')._f, "YYYY-MM-DD HH:mm:ss.SSSS", "should not include 'T' in the format"); + + test.done(); + }, + + "parsing iso Z timezone" : function (test) { + var i, + formats = [ + ['2011-10-08T18:04Z', '2011-10-08T18:04:00.000+00:00'], + ['2011-10-08T18:04:20Z', '2011-10-08T18:04:20.000+00:00'], + ['2011-10-08T18:04:20.111Z', '2011-10-08T18:04:20.111+00:00'] + ]; + test.expect(formats.length); + for (i = 0; i < formats.length; i++) { + test.equal(moment.utc(formats[i][0]).format('YYYY-MM-DDTHH:mm:ss.SSSZ'), formats[i][1], "moment should be able to parse ISO " + formats[i][0]); + } + test.done(); + }, + + "parsing iso Z timezone into local" : function (test) { + test.expect(1); + + var m = moment('2011-10-08T18:04:20.111Z'); + + test.equal(m.utc().format('YYYY-MM-DDTHH:mm:ss.SSS'), '2011-10-08T18:04:20.111', "moment should be able to parse ISO 2011-10-08T18:04:20.111Z"); + + test.done(); + }, + + "parsing iso with more subsecond precision digits" : function (test) { + test.equal(moment.utc("2013-07-31T22:00:00.0000000Z").format(), + "2013-07-31T22:00:00+00:00", "more than 3 subsecond digits"); + test.done(); + }, + + "null or empty" : function (test) { + test.expect(8); + test.equal(moment('').isValid(), false, "moment('') is not valid"); + test.equal(moment(null).isValid(), false, "moment(null) is not valid"); + test.equal(moment(null, 'YYYY-MM-DD').isValid(), false, "moment('', 'format') is not valid"); + test.equal(moment('', 'YYYY-MM-DD').isValid(), false, "moment('', 'format') is not valid"); + test.equal(moment.utc('').isValid(), false, "moment.utc('') is not valid"); + test.equal(moment.utc(null).isValid(), false, "moment.utc(null) is not valid"); + test.equal(moment.utc(null, 'YYYY-MM-DD').isValid(), false, "moment.utc(null) is not valid"); + test.equal(moment.utc('', 'YYYY-MM-DD').isValid(), false, "moment.utc('', 'YYYY-MM-DD') is not valid"); + test.done(); + }, + + "first century" : function (test) { + test.expect(9); + test.equal(moment([0, 0, 1]).format("YYYY-MM-DD"), "0000-01-01", "Year AD 0"); + test.equal(moment([99, 0, 1]).format("YYYY-MM-DD"), "0099-01-01", "Year AD 99"); + test.equal(moment([999, 0, 1]).format("YYYY-MM-DD"), "0999-01-01", "Year AD 999"); + test.equal(moment('0 1 1', 'YYYY MM DD').format("YYYY-MM-DD"), "0000-01-01", "Year AD 0"); + test.equal(moment('99 1 1', 'YYYY MM DD').format("YYYY-MM-DD"), "0099-01-01", "Year AD 99"); + test.equal(moment('999 1 1', 'YYYY MM DD').format("YYYY-MM-DD"), "0999-01-01", "Year AD 999"); + test.equal(moment('0 1 1', 'YYYYY MM DD').format("YYYYY-MM-DD"), "00000-01-01", "Year AD 0"); + test.equal(moment('99 1 1', 'YYYYY MM DD').format("YYYYY-MM-DD"), "00099-01-01", "Year AD 99"); + test.equal(moment('999 1 1', 'YYYYY MM DD').format("YYYYY-MM-DD"), "00999-01-01", "Year AD 999"); + test.done(); + }, + + "six digit years" : function (test) { + test.expect(8); + test.equal(moment([-270000, 0, 1]).format("YYYYY-MM-DD"), "-270000-01-01", "format BC 270,001"); + test.equal(moment([270000, 0, 1]).format("YYYYY-MM-DD"), "270000-01-01", "format AD 270,000"); + test.equal(moment("-270000-01-01", "YYYYY-MM-DD").toDate().getFullYear(), -270000, "parse BC 270,001"); + test.equal(moment("270000-01-01", "YYYYY-MM-DD").toDate().getFullYear(), 270000, "parse AD 270,000"); + test.equal(moment("+270000-01-01", "YYYYY-MM-DD").toDate().getFullYear(), 270000, "parse AD +270,000"); + test.equal(moment.utc("-270000-01-01", "YYYYY-MM-DD").toDate().getUTCFullYear(), -270000, "parse utc BC 270,001"); + test.equal(moment.utc("270000-01-01", "YYYYY-MM-DD").toDate().getUTCFullYear(), 270000, "parse utc AD 270,000"); + test.equal(moment.utc("+270000-01-01", "YYYYY-MM-DD").toDate().getUTCFullYear(), 270000, "parse utc AD +270,000"); + test.done(); + }, + + "negative four digit years" : function (test) { + test.expect(2); + test.equal(moment("-1000-01-01", "YYYYY-MM-DD").toDate().getFullYear(), -1000, "parse BC 1,001"); + test.equal(moment.utc("-1000-01-01", "YYYYY-MM-DD").toDate().getUTCFullYear(), -1000, "parse utc BC 1,001"); + test.done(); + }, + + "strict parsing" : function (test) { + test.equal(moment("2014-", "YYYY-Q", true).isValid(), false, "fail missing quarter"); + + test.equal(moment("2012-05", "YYYY-MM", true).format("YYYY-MM"), "2012-05", "parse correct string"); + test.equal(moment(" 2012-05", "YYYY-MM", true).isValid(), false, "fail on extra whitespace"); + test.equal(moment("foo 2012-05", "[foo] YYYY-MM", true).format('YYYY-MM'), "2012-05", "handle fixed text"); + test.equal(moment("2012 05", "YYYY-MM", true).isValid(), false, "fail on different separator"); + test.equal(moment("2012 05", "YYYY MM DD", true).isValid(), false, "fail on too many tokens"); + + test.equal(moment("05 30 2010", ["DD MM YYYY", "MM DD YYYY"], true).format("MM DD YYYY"), "05 30 2010", "array with bad date"); + test.equal(moment("05 30 2010", ["", "MM DD YYYY"], true).format("MM DD YYYY"), "05 30 2010", "array with invalid format"); + test.equal(moment("05 30 2010", [" DD MM YYYY", "MM DD YYYY"], true).format("MM DD YYYY"), "05 30 2010", "array with non-matching format"); + + test.equal(moment("2010.*...", "YYYY.*", true).isValid(), false, "invalid format with regex chars"); + test.equal(moment("2010.*", "YYYY.*", true).year(), 2010, "valid format with regex chars"); + test.equal(moment(".*2010.*", ".*YYYY.*", true).year(), 2010, "valid format with regex chars on both sides"); + + //strict tokens + test.equal(moment("-5-05-25", 'YYYY-MM-DD', true).isValid(), false, "invalid negative year"); + test.equal(moment("2-05-25", 'YYYY-MM-DD', true).isValid(), false, "invalid one-digit year"); + test.equal(moment("20-05-25", 'YYYY-MM-DD', true).isValid(), false, "invalid two-digit year"); + test.equal(moment("201-05-25", 'YYYY-MM-DD', true).isValid(), false, "invalid three-digit year"); + test.equal(moment("2010-05-25", 'YYYY-MM-DD', true).isValid(), true, "valid four-digit year"); + test.equal(moment("22010-05-25", 'YYYY-MM-DD', true).isValid(), false, "invalid five-digit year"); + + test.equal(moment("12-05-25", 'YY-MM-DD', true).isValid(), true, "valid two-digit year"); + test.equal(moment("2012-05-25", 'YY-MM-DD', true).isValid(), false, "invalid four-digit year"); + + test.equal(moment("-5-05-25", 'Y-MM-DD', true).isValid(), true, "valid negative year"); + test.equal(moment("2-05-25", 'Y-MM-DD', true).isValid(), true, "valid one-digit year"); + test.equal(moment("20-05-25", 'Y-MM-DD', true).isValid(), true, "valid two-digit year"); + test.equal(moment("201-05-25", 'Y-MM-DD', true).isValid(), true, "valid three-digit year"); + + test.equal(moment("2012-5-25", 'YYYY-M-DD', true).isValid(), true, "valid one-digit month"); + test.equal(moment("2012-5-25", 'YYYY-MM-DD', true).isValid(), false, "invalid one-digit month"); + test.equal(moment("2012-05-25", 'YYYY-M-DD', true).isValid(), true, "valid one-digit month"); + test.equal(moment("2012-05-25", 'YYYY-MM-DD', true).isValid(), true, "valid one-digit month"); + + test.equal(moment("2012-05-2", 'YYYY-MM-D', true).isValid(), true, "valid one-digit day"); + test.equal(moment("2012-05-2", 'YYYY-MM-DD', true).isValid(), false, "invalid one-digit day"); + test.equal(moment("2012-05-02", 'YYYY-MM-D', true).isValid(), true, "valid two-digit day"); + test.equal(moment("2012-05-02", 'YYYY-MM-DD', true).isValid(), true, "valid two-digit day"); + + test.equal(moment("+002012-05-25", 'YYYYY-MM-DD', true).isValid(), true, "valid six-digit year"); + test.equal(moment("+2012-05-25", 'YYYYY-MM-DD', true).isValid(), false, "invalid four-digit year"); + + //thse are kinda pointless, but they should work as expected + test.equal(moment("1", 'S', true).isValid(), true, "valid one-digit milisecond"); + test.equal(moment("12", 'S', true).isValid(), false, "invalid two-digit milisecond"); + test.equal(moment("123", 'S', true).isValid(), false, "invalid three-digit milisecond"); + + test.equal(moment("1", 'SS', true).isValid(), false, "invalid one-digit milisecond"); + test.equal(moment("12", 'SS', true).isValid(), true, "valid two-digit milisecond"); + test.equal(moment("123", 'SS', true).isValid(), false, "invalid three-digit milisecond"); + + test.equal(moment("1", 'SSS', true).isValid(), false, "invalid one-digit milisecond"); + test.equal(moment("12", 'SSS', true).isValid(), false, "invalid two-digit milisecond"); + test.equal(moment("123", 'SSS', true).isValid(), true, "valid three-digit milisecond"); + + test.done(); + }, + + "parsing into a locale" : function (test) { + test.expect(2); + + moment.defineLocale('parselocale', { + months : "one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve".split('_'), + monthsShort : "one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve".split("_") + }); + + moment.locale('en'); + + test.equal(moment('2012 seven', 'YYYY MMM', 'parselocale').month(), 6, "should be able to parse in a specific locale"); + + moment.locale('parselocale'); + + test.equal(moment('2012 july', 'YYYY MMM', 'en').month(), 6, "should be able to parse in a specific locale"); + + moment.defineLocale('parselocale', null); + test.done(); + }, + + "parsing week and weekday information" : function (test) { + var ver = getVerifier(test); + + // year + ver('12', 'gg', "2012 01 01", 'week-year two digits'); + ver('2012', 'gggg', "2012 01 01", 'week-year four digits'); + + ver('99', 'gg', "1998 12 27", 'week-year two digits previous year'); + ver('1999', 'gggg', "1998 12 27", 'week-year four digits previous year'); + + ver('99', 'GG', "1999 01 04", 'iso week-year two digits'); + ver('1999', 'GGGG', "1999 01 04", 'iso week-year four digits'); + + ver('13', 'GG', "2012 12 31", 'iso week-year two digits previous year'); + ver('2013', 'GGGG', "2012 12 31", 'iso week-year four digits previous year'); + + // year + week + ver('1999 37', 'gggg w', "1999 09 05", 'week'); + ver('1999 37', 'gggg ww', "1999 09 05", 'week double'); + ver('1999 37', 'GGGG W', "1999 09 13", 'iso week'); + ver('1999 37', 'GGGG WW', "1999 09 13", 'iso week double'); + + ver('1999 37 4', 'GGGG WW E', "1999 09 16", 'iso day'); + ver('1999 37 04', 'GGGG WW E', "1999 09 16", 'iso day wide', true); + + ver('1999 37 4', 'gggg ww e', "1999 09 09", 'day'); + ver('1999 37 04', 'gggg ww e', "1999 09 09", 'day wide', true); + + // year + week + day + ver('1999 37 4', 'gggg ww d', "1999 09 09", 'd'); + ver('1999 37 Th', 'gggg ww dd', "1999 09 09", 'dd'); + ver('1999 37 Thu', 'gggg ww ddd', "1999 09 09", 'ddd'); + ver('1999 37 Thursday', 'gggg ww dddd', "1999 09 09", 'dddd'); + + // lower-order only + test.equal(moment('22', 'ww').week(), 22, "week sets the week by itself"); + test.equal(moment('22', 'ww').weekYear(), moment().weekYear(), "week keeps this year"); + test.equal(moment('2012 22', 'YYYY ww').weekYear(), 2012, "week keeps parsed year"); + + test.equal(moment('22', 'WW').isoWeek(), 22, "iso week sets the week by itself"); + test.equal(moment('2012 22', 'YYYY WW').weekYear(), 2012, "iso week keeps parsed year"); + test.equal(moment('22', 'WW').weekYear(), moment().weekYear(), "iso week keeps this year"); + + // order + ver('6 2013 2', 'e gggg w', "2013 01 12", "order doesn't matter"); + ver('6 2013 2', 'E GGGG W', "2013 01 12", "iso order doesn't matter"); + + //can parse other stuff too + test.equal(moment('1999-W37-4 3:30', 'GGGG-[W]WW-E HH:mm').format('YYYY MM DD HH:mm'), '1999 09 16 03:30', "parsing weeks and hours"); + + // In safari, all years before 1300 are shifted back with one day. + // http://stackoverflow.com/questions/20768975/safari-subtracts-1-day-from-dates-before-1300 + if (new Date("1300-01-01").getUTCFullYear() === 1300) { + // Years less than 100 + ver('0098-06', 'GGGG-WW', "0098 02 03", "small years work", true); + } + + test.done(); + }, + + 'parsing localized weekdays' : function (test) { + var ver = getVerifier(test); + try { + moment.locale('fr'); //french uses doy = 4, dow = 1 + ver('1999 37 4', 'GGGG WW E', "1999 09 16", 'iso ignores locale'); + ver('1999 37 7', 'GGGG WW E', "1999 09 19", 'iso ignores locale'); + + ver('1999 37 0', 'gggg ww e', "1999 09 13", 'localized e uses local doy and dow: 0 = monday'); + ver('1999 37 4', 'gggg ww e', "1999 09 17", 'localized e uses local doy and dow: 4 = friday'); + + ver('1999 37 1', 'gggg ww d', "1999 09 13", 'localized d uses 0-indexed days: 1 = monday'); + ver('1999 37 Lu', 'gggg ww dd', "1999 09 13", 'localized d uses 0-indexed days: Mo'); + ver('1999 37 lun.', 'gggg ww ddd', "1999 09 13", 'localized d uses 0-indexed days: Mon'); + ver('1999 37 lundi', 'gggg ww dddd', "1999 09 13", 'localized d uses 0-indexed days: Monday'); + ver('1999 37 4', 'gggg ww d', "1999 09 16", 'localized d uses 0-indexed days: 4'); + + //sunday goes at the end of the week + ver('1999 37 0', 'gggg ww d', "1999 09 19", 'localized d uses 0-indexed days: 0 = sund'); + ver('1999 37 Di', 'gggg ww dd', "1999 09 19", 'localized d uses 0-indexed days: 0 = sund'); + } + finally { + moment.locale('en'); + test.done(); + } + }, + + 'parsing with customized two-digit year' : function (test) { + var original = moment.parseTwoDigitYear; + try { + test.equal(moment('68', 'YY').year(), 2068); + test.equal(moment('69', 'YY').year(), 1969); + moment.parseTwoDigitYear = function (input) { + return +input + (+input > 30 ? 1900 : 2000); + }; + test.equal(moment('68', 'YY').year(), 1968); + test.equal(moment('67', 'YY').year(), 1967); + test.equal(moment('31', 'YY').year(), 1931); + test.equal(moment('30', 'YY').year(), 2030); + } + finally { + moment.parseTwoDigitYear = original; + test.done(); + } + } +}; + +var moment = require("../../moment"); + +exports.daysInMonth = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "days in month" : function (test) { + test.expect(24); + var months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], i; + for (i = 0; i < 12; i++) { + test.equal(moment([2012, i]).daysInMonth(), + months[i], + moment([2012, i]).format('L') + " should have " + months[i] + " days. (beginning of month " + i + ')'); + } + for (i = 0; i < 12; i++) { + test.equal(moment([2012, i, months[i]]).daysInMonth(), + months[i], + moment([2012, i, months[i]]).format('L') + " should have " + months[i] + " days. (end of month " + i + ')'); + } + test.done(); + }, + + "days in month leap years" : function (test) { + test.expect(4); + test.equal(moment([2010, 1]).daysInMonth(), 28, "Feb 2010 should have 28 days"); + test.equal(moment([2100, 1]).daysInMonth(), 28, "Feb 2100 should have 28 days"); + test.equal(moment([2008, 1]).daysInMonth(), 29, "Feb 2008 should have 29 days"); + test.equal(moment([2000, 1]).daysInMonth(), 29, "Feb 2000 should have 29 days"); + test.done(); + } +}; + +var moment = require("../../moment"); + +function equal(test, a, b, message) { + test.ok(Math.abs(a - b) < 0.00000001, "(" + a + " === " + b + ") " + message); +} + +function dstForYear(year) { + var start = moment([year]), + end = moment([year + 1]), + current = start.clone(), + last; + + while (current < end) { + last = current.clone(); + current.add(24, 'hour'); + if (last.zone() !== current.zone()) { + end = current.clone(); + current = last.clone(); + break; + } + } + + while (current < end) { + last = current.clone(); + current.add(1, 'hour'); + if (last.zone() !== current.zone()) { + return { + moment : last, + diff : (current.zone() - last.zone()) / 60 + }; + } + } +} + +exports.diff = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "diff" : function (test) { + test.expect(5); + + test.equal(moment(1000).diff(0), 1000, "1 second - 0 = 1000"); + test.equal(moment(1000).diff(500), 500, "1 second - 0.5 seconds = 500"); + test.equal(moment(0).diff(1000), -1000, "0 - 1 second = -1000"); + test.equal(moment(new Date(1000)).diff(1000), 0, "1 second - 1 second = 0"); + var oneHourDate = new Date(), + nowDate = new Date(+oneHourDate); + oneHourDate.setHours(oneHourDate.getHours() + 1); + test.equal(moment(oneHourDate).diff(nowDate), 60 * 60 * 1000, "1 hour from now = 3600000"); + test.done(); + }, + + "diff key after" : function (test) { + test.expect(10); + + test.equal(moment([2010]).diff([2011], 'years'), -1, "year diff"); + test.equal(moment([2010]).diff([2010, 2], 'months'), -2, "month diff"); + test.equal(moment([2010]).diff([2010, 0, 7], 'weeks'), 0, "week diff"); + test.equal(moment([2010]).diff([2010, 0, 8], 'weeks'), -1, "week diff"); + test.equal(moment([2010]).diff([2010, 0, 21], 'weeks'), -2, "week diff"); + test.equal(moment([2010]).diff([2010, 0, 22], 'weeks'), -3, "week diff"); + test.equal(moment([2010]).diff([2010, 0, 4], 'days'), -3, "day diff"); + test.equal(moment([2010]).diff([2010, 0, 1, 4], 'hours'), -4, "hour diff"); + test.equal(moment([2010]).diff([2010, 0, 1, 0, 5], 'minutes'), -5, "minute diff"); + test.equal(moment([2010]).diff([2010, 0, 1, 0, 0, 6], 'seconds'), -6, "second diff"); + test.done(); + }, + + "diff key before" : function (test) { + test.expect(10); + + test.equal(moment([2011]).diff([2010], 'years'), 1, "year diff"); + test.equal(moment([2010, 2]).diff([2010], 'months'), 2, "month diff"); + test.equal(moment([2010, 0, 4]).diff([2010], 'days'), 3, "day diff"); + test.equal(moment([2010, 0, 7]).diff([2010], 'weeks'), 0, "week diff"); + test.equal(moment([2010, 0, 8]).diff([2010], 'weeks'), 1, "week diff"); + test.equal(moment([2010, 0, 21]).diff([2010], 'weeks'), 2, "week diff"); + test.equal(moment([2010, 0, 22]).diff([2010], 'weeks'), 3, "week diff"); + test.equal(moment([2010, 0, 1, 4]).diff([2010], 'hours'), 4, "hour diff"); + test.equal(moment([2010, 0, 1, 0, 5]).diff([2010], 'minutes'), 5, "minute diff"); + test.equal(moment([2010, 0, 1, 0, 0, 6]).diff([2010], 'seconds'), 6, "second diff"); + test.done(); + }, + + "diff key before singular" : function (test) { + test.expect(10); + + test.equal(moment([2011]).diff([2010], 'year'), 1, "year diff singular"); + test.equal(moment([2010, 2]).diff([2010], 'month'), 2, "month diff singular"); + test.equal(moment([2010, 0, 4]).diff([2010], 'day'), 3, "day diff singular"); + test.equal(moment([2010, 0, 7]).diff([2010], 'week'), 0, "week diff singular"); + test.equal(moment([2010, 0, 8]).diff([2010], 'week'), 1, "week diff singular"); + test.equal(moment([2010, 0, 21]).diff([2010], 'week'), 2, "week diff singular"); + test.equal(moment([2010, 0, 22]).diff([2010], 'week'), 3, "week diff singular"); + test.equal(moment([2010, 0, 1, 4]).diff([2010], 'hour'), 4, "hour diff singular"); + test.equal(moment([2010, 0, 1, 0, 5]).diff([2010], 'minute'), 5, "minute diff singular"); + test.equal(moment([2010, 0, 1, 0, 0, 6]).diff([2010], 'second'), 6, "second diff singular"); + test.done(); + }, + + "diff key before abbreviated" : function (test) { + test.expect(10); + + test.equal(moment([2011]).diff([2010], 'y'), 1, "year diff abbreviated"); + test.equal(moment([2010, 2]).diff([2010], 'M'), 2, "month diff abbreviated"); + test.equal(moment([2010, 0, 4]).diff([2010], 'd'), 3, "day diff abbreviated"); + test.equal(moment([2010, 0, 7]).diff([2010], 'w'), 0, "week diff abbreviated"); + test.equal(moment([2010, 0, 8]).diff([2010], 'w'), 1, "week diff abbreviated"); + test.equal(moment([2010, 0, 21]).diff([2010], 'w'), 2, "week diff abbreviated"); + test.equal(moment([2010, 0, 22]).diff([2010], 'w'), 3, "week diff abbreviated"); + test.equal(moment([2010, 0, 1, 4]).diff([2010], 'h'), 4, "hour diff abbreviated"); + test.equal(moment([2010, 0, 1, 0, 5]).diff([2010], 'm'), 5, "minute diff abbreviated"); + test.equal(moment([2010, 0, 1, 0, 0, 6]).diff([2010], 's'), 6, "second diff abbreviated"); + test.done(); + }, + + "diff month" : function (test) { + test.expect(1); + + test.equal(moment([2011, 0, 31]).diff([2011, 2, 1], 'months'), -1, "month diff"); + test.done(); + }, + + "diff across DST" : function (test) { + var dst = dstForYear(2012), a, b, daysInMonth; + if (!dst) { + test.done(); + return; + } + + test.expect(16); + + a = dst.moment; + b = a.clone().utc().add(12, 'hours').local(); + daysInMonth = (a.daysInMonth() + b.daysInMonth()) / 2; + equal(test, b.diff(a, 'ms', true), 12 * 60 * 60 * 1000, "ms diff across DST"); + equal(test, b.diff(a, 's', true), 12 * 60 * 60, "second diff across DST"); + equal(test, b.diff(a, 'm', true), 12 * 60, "minute diff across DST"); + equal(test, b.diff(a, 'h', true), 12, "hour diff across DST"); + equal(test, b.diff(a, 'd', true), (12 - dst.diff) / 24, "day diff across DST"); + equal(test, b.diff(a, 'w', true), (12 - dst.diff) / 24 / 7, "week diff across DST"); + equal(test, b.diff(a, 'M', true), (12 - dst.diff) / 24 / daysInMonth, "month diff across DST"); + equal(test, b.diff(a, 'y', true), (12 - dst.diff) / 24 / daysInMonth / 12, "year diff across DST"); + + + a = dst.moment; + b = a.clone().utc().add(12 + dst.diff, 'hours').local(); + daysInMonth = (a.daysInMonth() + b.daysInMonth()) / 2; + + equal(test, b.diff(a, 'ms', true), (12 + dst.diff) * 60 * 60 * 1000, "ms diff across DST"); + equal(test, b.diff(a, 's', true), (12 + dst.diff) * 60 * 60, "second diff across DST"); + equal(test, b.diff(a, 'm', true), (12 + dst.diff) * 60, "minute diff across DST"); + equal(test, b.diff(a, 'h', true), (12 + dst.diff), "hour diff across DST"); + equal(test, b.diff(a, 'd', true), 12 / 24, "day diff across DST"); + equal(test, b.diff(a, 'w', true), 12 / 24 / 7, "week diff across DST"); + equal(test, b.diff(a, 'M', true), 12 / 24 / daysInMonth, "month diff across DST"); + equal(test, b.diff(a, 'y', true), 12 / 24 / daysInMonth / 12, "year diff across DST"); + + test.done(); + }, + + "diff overflow" : function (test) { + test.expect(4); + + test.equal(moment([2011]).diff([2010], 'months'), 12, "month diff"); + test.equal(moment([2010, 0, 2]).diff([2010], 'hours'), 24, "hour diff"); + test.equal(moment([2010, 0, 1, 2]).diff([2010], 'minutes'), 120, "minute diff"); + test.equal(moment([2010, 0, 1, 0, 4]).diff([2010], 'seconds'), 240, "second diff"); + test.done(); + }, + + "diff between utc and local" : function (test) { + if (moment([2012]).zone() === moment([2011]).zone()) { + // Russia's zone offset on 1st of Jan 2012 vs 2011 is different + test.equal(moment([2012]).utc().diff([2011], 'years'), 1, "year diff"); + } + test.equal(moment([2010, 2, 2]).utc().diff([2010, 0, 2], 'months'), 2, "month diff"); + test.equal(moment([2010, 0, 4]).utc().diff([2010], 'days'), 3, "day diff"); + test.equal(moment([2010, 0, 22]).utc().diff([2010], 'weeks'), 3, "week diff"); + test.equal(moment([2010, 0, 1, 4]).utc().diff([2010], 'hours'), 4, "hour diff"); + test.equal(moment([2010, 0, 1, 0, 5]).utc().diff([2010], 'minutes'), 5, "minute diff"); + test.equal(moment([2010, 0, 1, 0, 0, 6]).utc().diff([2010], 'seconds'), 6, "second diff"); + + test.done(); + }, + + "diff floored" : function (test) { + test.expect(7); + + test.equal(moment([2010, 0, 1, 23]).diff([2010], 'day'), 0, "23 hours = 0 days"); + test.equal(moment([2010, 0, 1, 23, 59]).diff([2010], 'day'), 0, "23:59 hours = 0 days"); + test.equal(moment([2010, 0, 1, 24]).diff([2010], 'day'), 1, "24 hours = 1 day"); + test.equal(moment([2010, 0, 2]).diff([2011, 0, 1], 'year'), 0, "year rounded down"); + test.equal(moment([2011, 0, 1]).diff([2010, 0, 2], 'year'), 0, "year rounded down"); + test.equal(moment([2010, 0, 2]).diff([2011, 0, 2], 'year'), -1, "year rounded down"); + test.equal(moment([2011, 0, 2]).diff([2010, 0, 2], 'year'), 1, "year rounded down"); + + test.done(); + }, + + "year diffs include dates" : function (test) { + test.expect(1); + + test.ok(moment([2012, 1, 19]).diff(moment([2002, 1, 20]), 'years', true) < 10, "year diff should include date of month"); + + test.done(); + }, + + "month diffs" : function (test) { + test.expect(8); + + // due to floating point math errors, these tests just need to be accurate within 0.00000001 + equal(test, moment([2012, 0, 1]).diff([2012, 1, 1], 'months', true), -1, 'Jan 1 to Feb 1 should be 1 month'); + equal(test, moment([2012, 0, 1]).diff([2012, 0, 1, 12], 'months', true), -0.5 / 31, 'Jan 1 to Jan 1 noon should be 0.5 / 31 months'); + equal(test, moment([2012, 0, 15]).diff([2012, 1, 15], 'months', true), -1, 'Jan 15 to Feb 15 should be 1 month'); + equal(test, moment([2012, 0, 28]).diff([2012, 1, 28], 'months', true), -1, 'Jan 28 to Feb 28 should be 1 month'); + equal(test, moment([2012, 0, 31]).diff([2012, 1, 29], 'months', true), -1 + (2 / 30), 'Jan 31 to Feb 29 should be 1 - (2 / 30) months'); + equal(test, moment([2012, 0, 31]).diff([2012, 2, 1], 'months', true), -2 + (30 / 31), 'Jan 31 to Mar 1 should be 2 - (30 / 31) months'); + equal(test, moment([2012, 0, 31]).diff([2012, 2, 1, 12], 'months', true), -2 + (29.5 / 31), 'Jan 31 to Mar 1 should be 2 - (29.5 / 31) months'); + equal(test, moment([2012, 0, 1]).diff([2012, 0, 31], 'months', true), -(30 / 31), 'Jan 1 to Jan 31 should be 30 / 31 months'); + + test.done(); + }, + + "year diffs" : function (test) { + test.expect(10); + + // due to floating point math errors, these tests just need to be accurate within 0.00000001 + equal(test, moment([2012, 0, 1]).diff([2013, 0, 1], 'years', true), -1, 'Jan 1 2012 to Jan 1 2013 should be 1 year'); + equal(test, moment([2012, 1, 28]).diff([2013, 1, 28], 'years', true), -1, 'Feb 28 2012 to Feb 28 2013 should be 1 year'); + equal(test, moment([2012, 2, 1]).diff([2013, 2, 1], 'years', true), -1, 'Mar 1 2012 to Mar 1 2013 should be 1 year'); + equal(test, moment([2012, 11, 1]).diff([2013, 11, 1], 'years', true), -1, 'Dec 1 2012 to Dec 1 2013 should be 1 year'); + equal(test, moment([2012, 11, 31]).diff([2013, 11, 31], 'years', true), -1, 'Dec 31 2012 to Dec 31 2013 should be 1 year'); + equal(test, moment([2012, 0, 1]).diff([2013, 6, 1], 'years', true), -1.5, 'Jan 1 2012 to Jul 1 2013 should be 1.5 years'); + equal(test, moment([2012, 0, 31]).diff([2013, 6, 31], 'years', true), -1.5, 'Jan 31 2012 to Jul 31 2013 should be 1.5 years'); + equal(test, moment([2012, 0, 1]).diff([2013, 0, 1, 12], 'years', true), -1 - (0.5 / 31) / 12, 'Jan 1 2012 to Jan 1 2013 noon should be 1+(0.5 / 31) / 12 years'); + equal(test, moment([2012, 0, 1]).diff([2013, 6, 1, 12], 'years', true), -1.5 - (0.5 / 31) / 12, 'Jan 1 2012 to Jul 1 2013 noon should be 1.5+(0.5 / 31) / 12 years'); + equal(test, moment([2012, 1, 29]).diff([2013, 1, 28], 'years', true), -1 + (1 / 28.5) / 12, 'Feb 29 2012 to Feb 28 2013 should be 1-(1 / 28.5) / 12 years'); + + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.duration = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "object instantiation" : function (test) { + var d = moment.duration({ + years: 2, + months: 3, + weeks: 2, + days: 1, + hours: 8, + minutes: 9, + seconds: 20, + milliseconds: 12 + }); + + test.expect(8); + test.equal(d.years(), 2, "years"); + test.equal(d.months(), 3, "months"); + test.equal(d.weeks(), 2, "weeks"); + test.equal(d.days(), 15, "days"); // two weeks + 1 day + test.equal(d.hours(), 8, "hours"); + test.equal(d.minutes(), 9, "minutes"); + test.equal(d.seconds(), 20, "seconds"); + test.equal(d.milliseconds(), 12, "milliseconds"); + test.done(); + }, + + "object instantiation with strings" : function (test) { + var d = moment.duration({ + years: '2', + months: '3', + weeks: '2', + days: '1', + hours: '8', + minutes: '9', + seconds: '20', + milliseconds: '12' + }); + + test.expect(8); + test.equal(d.years(), 2, "years"); + test.equal(d.months(), 3, "months"); + test.equal(d.weeks(), 2, "weeks"); + test.equal(d.days(), 15, "days"); // two weeks + 1 day + test.equal(d.hours(), 8, "hours"); + test.equal(d.minutes(), 9, "minutes"); + test.equal(d.seconds(), 20, "seconds"); + test.equal(d.milliseconds(), 12, "milliseconds"); + test.done(); + }, + + "milliseconds instantiation" : function (test) { + test.expect(1); + test.equal(moment.duration(72).milliseconds(), 72, "milliseconds"); + test.done(); + }, + + "instantiation by type" : function (test) { + test.expect(16); + test.equal(moment.duration(1, "years").years(), 1, "years"); + test.equal(moment.duration(1, "y").years(), 1, "y"); + test.equal(moment.duration(2, "months").months(), 2, "months"); + test.equal(moment.duration(2, "M").months(), 2, "M"); + test.equal(moment.duration(3, "weeks").weeks(), 3, "weeks"); + test.equal(moment.duration(3, "w").weeks(), 3, "weeks"); + test.equal(moment.duration(4, "days").days(), 4, "days"); + test.equal(moment.duration(4, "d").days(), 4, "d"); + test.equal(moment.duration(5, "hours").hours(), 5, "hours"); + test.equal(moment.duration(5, "h").hours(), 5, "h"); + test.equal(moment.duration(6, "minutes").minutes(), 6, "minutes"); + test.equal(moment.duration(6, "m").minutes(), 6, "m"); + test.equal(moment.duration(7, "seconds").seconds(), 7, "seconds"); + test.equal(moment.duration(7, "s").seconds(), 7, "s"); + test.equal(moment.duration(8, "milliseconds").milliseconds(), 8, "milliseconds"); + test.equal(moment.duration(8, "ms").milliseconds(), 8, "ms"); + test.done(); + }, + + "shortcuts" : function (test) { + test.expect(8); + test.equal(moment.duration({y: 1}).years(), 1, "years = y"); + test.equal(moment.duration({M: 2}).months(), 2, "months = M"); + test.equal(moment.duration({w: 3}).weeks(), 3, "weeks = w"); + test.equal(moment.duration({d: 4}).days(), 4, "days = d"); + test.equal(moment.duration({h: 5}).hours(), 5, "hours = h"); + test.equal(moment.duration({m: 6}).minutes(), 6, "minutes = m"); + test.equal(moment.duration({s: 7}).seconds(), 7, "seconds = s"); + test.equal(moment.duration({ms: 8}).milliseconds(), 8, "milliseconds = ms"); + test.done(); + }, + + "generic getter" : function (test) { + test.expect(24); + test.equal(moment.duration(1, "years").get("years"), 1, "years"); + test.equal(moment.duration(1, "years").get("year"), 1, "years = year"); + test.equal(moment.duration(1, "years").get("y"), 1, "years = y"); + test.equal(moment.duration(2, "months").get("months"), 2, "months"); + test.equal(moment.duration(2, "months").get("month"), 2, "months = month"); + test.equal(moment.duration(2, "months").get("M"), 2, "months = M"); + test.equal(moment.duration(3, "weeks").get("weeks"), 3, "weeks"); + test.equal(moment.duration(3, "weeks").get("week"), 3, "weeks = week"); + test.equal(moment.duration(3, "weeks").get("w"), 3, "weeks = w"); + test.equal(moment.duration(4, "days").get("days"), 4, "days"); + test.equal(moment.duration(4, "days").get("day"), 4, "days = day"); + test.equal(moment.duration(4, "days").get("d"), 4, "days = d"); + test.equal(moment.duration(5, "hours").get("hours"), 5, "hours"); + test.equal(moment.duration(5, "hours").get("hour"), 5, "hours = hour"); + test.equal(moment.duration(5, "hours").get("h"), 5, "hours = h"); + test.equal(moment.duration(6, "minutes").get("minutes"), 6, "minutes"); + test.equal(moment.duration(6, "minutes").get("minute"), 6, "minutes = minute"); + test.equal(moment.duration(6, "minutes").get("m"), 6, "minutes = m"); + test.equal(moment.duration(7, "seconds").get("seconds"), 7, "seconds"); + test.equal(moment.duration(7, "seconds").get("second"), 7, "seconds = second"); + test.equal(moment.duration(7, "seconds").get("s"), 7, "seconds = s"); + test.equal(moment.duration(8, "milliseconds").get("milliseconds"), 8, "milliseconds"); + test.equal(moment.duration(8, "milliseconds").get("millisecond"), 8, "milliseconds = millisecond"); + test.equal(moment.duration(8, "milliseconds").get("ms"), 8, "milliseconds = ms"); + test.done(); + }, + + "instantiation from another duration" : function (test) { + var simple = moment.duration(1234), + lengthy = moment.duration(60 * 60 * 24 * 360 * 1e3), + complicated = moment.duration({ + years: 2, + months: 3, + weeks: 4, + days: 1, + hours: 8, + minutes: 9, + seconds: 20, + milliseconds: 12 + }), + modified = moment.duration(1, 'day').add(moment.duration(1, 'day')); + + test.expect(4); + test.deepEqual(moment.duration(simple), simple, "simple clones are equal"); + test.deepEqual(moment.duration(lengthy), lengthy, "lengthy clones are equal"); + test.deepEqual(moment.duration(complicated), complicated, "complicated clones are equal"); + test.deepEqual(moment.duration(modified), modified, "cloning modified duration works"); + test.done(); + }, + + "instantiation from 24-hour time zero" : function (test) { + test.expect(6); + test.equal(moment.duration("00:00").years(), 0, "0 years"); + test.equal(moment.duration("00:00").days(), 0, "0 days"); + test.equal(moment.duration("00:00").hours(), 0, "0 hours"); + test.equal(moment.duration("00:00").minutes(), 0, "0 minutes"); + test.equal(moment.duration("00:00").seconds(), 0, "0 seconds"); + test.equal(moment.duration("00:00").milliseconds(), 0, "0 milliseconds"); + test.done(); + }, + + "instantiation from 24-hour time <24 hours" : function (test) { + test.expect(6); + test.equal(moment.duration("06:45").years(), 0, "0 years"); + test.equal(moment.duration("06:45").days(), 0, "0 days"); + test.equal(moment.duration("06:45").hours(), 6, "6 hours"); + test.equal(moment.duration("06:45").minutes(), 45, "45 minutes"); + test.equal(moment.duration("06:45").seconds(), 0, "0 seconds"); + test.equal(moment.duration("06:45").milliseconds(), 0, "0 milliseconds"); + test.done(); + }, + + "instantiation from 24-hour time >24 hours" : function (test) { + test.expect(6); + test.equal(moment.duration("26:45").years(), 0, "0 years"); + test.equal(moment.duration("26:45").days(), 1, "0 days"); + test.equal(moment.duration("26:45").hours(), 2, "2 hours"); + test.equal(moment.duration("26:45").minutes(), 45, "45 minutes"); + test.equal(moment.duration("26:45").seconds(), 0, "0 seconds"); + test.equal(moment.duration("26:45").milliseconds(), 0, "0 milliseconds"); + test.done(); + }, + + "instatiation from serialized C# TimeSpan zero" : function (test) { + test.expect(6); + test.equal(moment.duration("00:00:00").years(), 0, "0 years"); + test.equal(moment.duration("00:00:00").days(), 0, "0 days"); + test.equal(moment.duration("00:00:00").hours(), 0, "0 hours"); + test.equal(moment.duration("00:00:00").minutes(), 0, "0 minutes"); + test.equal(moment.duration("00:00:00").seconds(), 0, "0 seconds"); + test.equal(moment.duration("00:00:00").milliseconds(), 0, "0 milliseconds"); + test.done(); + }, + + "instatiation from serialized C# TimeSpan with days" : function (test) { + test.expect(6); + test.equal(moment.duration("1.02:03:04.9999999").years(), 0, "0 years"); + test.equal(moment.duration("1.02:03:04.9999999").days(), 1, "1 day"); + test.equal(moment.duration("1.02:03:04.9999999").hours(), 2, "2 hours"); + test.equal(moment.duration("1.02:03:04.9999999").minutes(), 3, "3 minutes"); + test.equal(moment.duration("1.02:03:04.9999999").seconds(), 4, "4 seconds"); + test.equal(moment.duration("1.02:03:04.9999999").milliseconds(), 999, "999 milliseconds"); + test.done(); + }, + + "instatiation from serialized C# TimeSpan without days" : function (test) { + test.expect(10); + test.equal(moment.duration("01:02:03.9999999").years(), 0, "0 years"); + test.equal(moment.duration("01:02:03.9999999").days(), 0, "0 days"); + test.equal(moment.duration("01:02:03.9999999").hours(), 1, "1 hour"); + test.equal(moment.duration("01:02:03.9999999").minutes(), 2, "2 minutes"); + test.equal(moment.duration("01:02:03.9999999").seconds(), 3, "3 seconds"); + test.equal(moment.duration("01:02:03.9999999").milliseconds(), 999, "999 milliseconds"); + + test.equal(moment.duration("23:59:59.9999999").days(), 0, "0 days"); + test.equal(moment.duration("23:59:59.9999999").hours(), 23, "23 hours"); + + test.equal(moment.duration("500:59:59.9999999").days(), 20, "500 hours overflows to 20 days"); + test.equal(moment.duration("500:59:59.9999999").hours(), 20, "500 hours overflows to 20 hours"); + test.done(); + }, + + "instatiation from serialized C# TimeSpan without days or milliseconds" : function (test) { + test.expect(6); + test.equal(moment.duration("01:02:03").years(), 0, "0 years"); + test.equal(moment.duration("01:02:03").days(), 0, "0 days"); + test.equal(moment.duration("01:02:03").hours(), 1, "1 hour"); + test.equal(moment.duration("01:02:03").minutes(), 2, "2 minutes"); + test.equal(moment.duration("01:02:03").seconds(), 3, "3 seconds"); + test.equal(moment.duration("01:02:03").milliseconds(), 0, "0 milliseconds"); + test.done(); + }, + + "instatiation from serialized C# TimeSpan without milliseconds" : function (test) { + test.expect(6); + test.equal(moment.duration("1.02:03:04").years(), 0, "0 years"); + test.equal(moment.duration("1.02:03:04").days(), 1, "1 day"); + test.equal(moment.duration("1.02:03:04").hours(), 2, "2 hours"); + test.equal(moment.duration("1.02:03:04").minutes(), 3, "3 minutes"); + test.equal(moment.duration("1.02:03:04").seconds(), 4, "4 seconds"); + test.equal(moment.duration("1.02:03:04").milliseconds(), 0, "0 milliseconds"); + test.done(); + }, + + "instatiation from serialized C# TimeSpan maxValue" : function (test) { + var d = moment.duration("10675199.02:48:05.4775807"); + + test.equal(d.years(), 29227, "29227 years"); + test.equal(d.months(), 8, "8 months"); + test.equal(d.days(), 17, "17 day"); // this should be 13 + + test.equal(d.hours(), 2, "2 hours"); + test.equal(d.minutes(), 48, "48 minutes"); + test.equal(d.seconds(), 5, "5 seconds"); + test.equal(d.milliseconds(), 477, "477 milliseconds"); + test.done(); + }, + + "instatiation from serialized C# TimeSpan minValue" : function (test) { + var d = moment.duration("-10675199.02:48:05.4775808"); + + test.equal(d.years(), -29227, "29653 years"); + test.equal(d.months(), -8, "8 day"); + test.equal(d.days(), -17, "17 day"); // this should be 13 + + test.equal(d.hours(), -2, "2 hours"); + test.equal(d.minutes(), -48, "48 minutes"); + test.equal(d.seconds(), -5, "5 seconds"); + test.equal(d.milliseconds(), -477, "477 milliseconds"); + test.done(); + }, + + "instantiation from ISO 8601 duration" : function (test) { + test.expect(7); + test.equal(moment.duration("P1Y2M3DT4H5M6S").asSeconds(), moment.duration({y: 1, M: 2, d: 3, h: 4, m: 5, s: 6}).asSeconds(), "all fields"); + test.equal(moment.duration("P1M").asSeconds(), moment.duration({M: 1}).asSeconds(), "single month field"); + test.equal(moment.duration("PT1M").asSeconds(), moment.duration({m: 1}).asSeconds(), "single minute field"); + test.equal(moment.duration("P1MT2H").asSeconds(), moment.duration({M: 1, h: 2}).asSeconds(), "random fields missing"); + test.equal(moment.duration("-P60D").asSeconds(), moment.duration({d: -60}).asSeconds(), "negative days"); + test.equal(moment.duration("PT0.5S").asSeconds(), moment.duration({s: 0.5}).asSeconds(), "fractional seconds"); + test.equal(moment.duration("PT0,5S").asSeconds(), moment.duration({s: 0.5}).asSeconds(), "fractional seconds (comma)"); + test.done(); + }, + + "serialization to ISO 8601 duration strings" : function (test) { + test.expect(6); + test.equal(moment.duration({y: 1, M: 2, d: 3, h: 4, m: 5, s: 6}).toISOString(), "P1Y2M3DT4H5M6S", "all fields"); + test.equal(moment.duration({M: -1}).toISOString(), "-P1M", "one month ago"); + test.equal(moment.duration({m: -1}).toISOString(), "-PT1M", "one minute ago"); + test.equal(moment.duration({s: -0.5}).toISOString(), "-PT0.5S", "one half second ago"); + test.equal(moment.duration({y: -0.5, M: 1}).toISOString(), "-P5M", "a month after half a year ago"); + test.equal(moment.duration({}).toISOString(), "P0D", "zero duration"); + test.done(); + }, + + "toIsoString deprecation" : function (test) { + test.equal(moment.duration({}).toIsoString(), moment.duration({}).toISOString(), "toIsoString delegates to toISOString"); + test.done(); + }, + + "`isodate` (python) test cases" : function (test) { + test.expect(24); + test.equal(moment.duration("P18Y9M4DT11H9M8S").asSeconds(), moment.duration({y: 18, M: 9, d: 4, h: 11, m: 9, s: 8}).asSeconds(), "python isodate 1"); + test.equal(moment.duration("P2W").asSeconds(), moment.duration({w: 2}).asSeconds(), "python isodate 2"); + test.equal(moment.duration("P3Y6M4DT12H30M5S").asSeconds(), moment.duration({y: 3, M: 6, d: 4, h: 12, m: 30, s: 5}).asSeconds(), "python isodate 3"); + test.equal(moment.duration("P23DT23H").asSeconds(), moment.duration({d: 23, h: 23}).asSeconds(), "python isodate 4"); + test.equal(moment.duration("P4Y").asSeconds(), moment.duration({y: 4}).asSeconds(), "python isodate 5"); + test.equal(moment.duration("P1M").asSeconds(), moment.duration({M: 1}).asSeconds(), "python isodate 6"); + test.equal(moment.duration("PT1M").asSeconds(), moment.duration({m: 1}).asSeconds(), "python isodate 7"); + test.equal(moment.duration("P0.5Y").asSeconds(), moment.duration({y: 0.5}).asSeconds(), "python isodate 8"); + test.equal(moment.duration("PT36H").asSeconds(), moment.duration({h: 36}).asSeconds(), "python isodate 9"); + test.equal(moment.duration("P1DT12H").asSeconds(), moment.duration({d: 1, h: 12}).asSeconds(), "python isodate 10"); + test.equal(moment.duration("-P2W").asSeconds(), moment.duration({w: -2}).asSeconds(), "python isodate 11"); + test.equal(moment.duration("-P2.2W").asSeconds(), moment.duration({w: -2.2}).asSeconds(), "python isodate 12"); + test.equal(moment.duration("P1DT2H3M4S").asSeconds(), moment.duration({d: 1, h: 2, m: 3, s: 4}).asSeconds(), "python isodate 13"); + test.equal(moment.duration("P1DT2H3M").asSeconds(), moment.duration({d: 1, h: 2, m: 3}).asSeconds(), "python isodate 14"); + test.equal(moment.duration("P1DT2H").asSeconds(), moment.duration({d: 1, h: 2}).asSeconds(), "python isodate 15"); + test.equal(moment.duration("PT2H").asSeconds(), moment.duration({h: 2}).asSeconds(), "python isodate 16"); + test.equal(moment.duration("PT2.3H").asSeconds(), moment.duration({h: 2.3}).asSeconds(), "python isodate 17"); + test.equal(moment.duration("PT2H3M4S").asSeconds(), moment.duration({h: 2, m: 3, s: 4}).asSeconds(), "python isodate 18"); + test.equal(moment.duration("PT3M4S").asSeconds(), moment.duration({m: 3, s: 4}).asSeconds(), "python isodate 19"); + test.equal(moment.duration("PT22S").asSeconds(), moment.duration({s: 22}).asSeconds(), "python isodate 20"); + test.equal(moment.duration("PT22.22S").asSeconds(), moment.duration({s: 22.22}).asSeconds(), "python isodate 21"); + test.equal(moment.duration("-P2Y").asSeconds(), moment.duration({y: -2}).asSeconds(), "python isodate 22"); + test.equal(moment.duration("-P3Y6M4DT12H30M5S").asSeconds(), moment.duration({y: -3, M: -6, d: -4, h: -12, m: -30, s: -5}).asSeconds(), "python isodate 23"); + test.equal(moment.duration("-P1DT2H3M4S").asSeconds(), moment.duration({d: -1, h: -2, m: -3, s: -4}).asSeconds(), "python isodate 24"); + test.done(); + }, + + "ISO 8601 misuse cases" : function (test) { + test.expect(8); + test.equal(moment.duration("P").asSeconds(), 0, "lonely P"); + test.equal(moment.duration("PT").asSeconds(), 0, "just P and T"); + test.equal(moment.duration("P1H").asSeconds(), 0, "missing T"); + test.equal(moment.duration("P1D1Y").asSeconds(), 0, "out of order"); + test.equal(moment.duration("PT.5S").asSeconds(), 0.5, "accept no leading zero for decimal"); + test.equal(moment.duration("PT1,S").asSeconds(), 1, "accept trailing decimal separator"); + test.equal(moment.duration("PT1M0,,5S").asSeconds(), 60, "extra decimal separators are ignored as 0"); + test.equal(moment.duration("P-1DS").asSeconds(), 0, "wrong position of negative"); + test.done(); + }, + + "humanize" : function (test) { + test.expect(32); + moment.locale('en'); + test.equal(moment.duration({seconds: 44}).humanize(), "a few seconds", "44 seconds = a few seconds"); + test.equal(moment.duration({seconds: 45}).humanize(), "a minute", "45 seconds = a minute"); + test.equal(moment.duration({seconds: 89}).humanize(), "a minute", "89 seconds = a minute"); + test.equal(moment.duration({seconds: 90}).humanize(), "2 minutes", "90 seconds = 2 minutes"); + test.equal(moment.duration({minutes: 44}).humanize(), "44 minutes", "44 minutes = 44 minutes"); + test.equal(moment.duration({minutes: 45}).humanize(), "an hour", "45 minutes = an hour"); + test.equal(moment.duration({minutes: 89}).humanize(), "an hour", "89 minutes = an hour"); + test.equal(moment.duration({minutes: 90}).humanize(), "2 hours", "90 minutes = 2 hours"); + test.equal(moment.duration({hours: 5}).humanize(), "5 hours", "5 hours = 5 hours"); + test.equal(moment.duration({hours: 21}).humanize(), "21 hours", "21 hours = 21 hours"); + test.equal(moment.duration({hours: 22}).humanize(), "a day", "22 hours = a day"); + test.equal(moment.duration({hours: 35}).humanize(), "a day", "35 hours = a day"); + test.equal(moment.duration({hours: 36}).humanize(), "2 days", "36 hours = 2 days"); + test.equal(moment.duration({days: 1}).humanize(), "a day", "1 day = a day"); + test.equal(moment.duration({days: 5}).humanize(), "5 days", "5 days = 5 days"); + test.equal(moment.duration({weeks: 1}).humanize(), "7 days", "1 week = 7 days"); + test.equal(moment.duration({days: 25}).humanize(), "25 days", "25 days = 25 days"); + test.equal(moment.duration({days: 26}).humanize(), "a month", "26 days = a month"); + test.equal(moment.duration({days: 30}).humanize(), "a month", "30 days = a month"); + test.equal(moment.duration({days: 45}).humanize(), "a month", "45 days = a month"); + test.equal(moment.duration({days: 46}).humanize(), "2 months", "46 days = 2 months"); + test.equal(moment.duration({days: 74}).humanize(), "2 months", "74 days = 2 months"); + test.equal(moment.duration({days: 77}).humanize(), "3 months", "77 days = 3 months"); + test.equal(moment.duration({months: 1}).humanize(), "a month", "1 month = a month"); + test.equal(moment.duration({months: 5}).humanize(), "5 months", "5 months = 5 months"); + test.equal(moment.duration({days: 344}).humanize(), "a year", "344 days = a year"); + test.equal(moment.duration({days: 345}).humanize(), "a year", "345 days = a year"); + test.equal(moment.duration({days: 547}).humanize(), "a year", "547 days = a year"); + test.equal(moment.duration({days: 548}).humanize(), "2 years", "548 days = 2 years"); + test.equal(moment.duration({years: 1}).humanize(), "a year", "1 year = a year"); + test.equal(moment.duration({years: 5}).humanize(), "5 years", "5 years = 5 years"); + test.equal(moment.duration(7200000).humanize(), "2 hours", "7200000 = 2 minutes"); + test.done(); + }, + + "humanize duration with suffix" : function (test) { + test.expect(2); + moment.locale('en'); + test.equal(moment.duration({seconds: 44}).humanize(true), "in a few seconds", "44 seconds = a few seconds"); + test.equal(moment.duration({seconds: -44}).humanize(true), "a few seconds ago", "44 seconds = a few seconds"); + test.done(); + }, + + "bubble value up" : function (test) { + test.expect(5); + test.equal(moment.duration({milliseconds: 61001}).milliseconds(), 1, "61001 milliseconds has 1 millisecond left over"); + test.equal(moment.duration({milliseconds: 61001}).seconds(), 1, "61001 milliseconds has 1 second left over"); + test.equal(moment.duration({milliseconds: 61001}).minutes(), 1, "61001 milliseconds has 1 minute left over"); + + test.equal(moment.duration({minutes: 350}).minutes(), 50, "350 minutes has 50 minutes left over"); + test.equal(moment.duration({minutes: 350}).hours(), 5, "350 minutes has 5 hours left over"); + test.done(); + }, + + "clipping" : function (test) { + test.expect(18); + test.equal(moment.duration({months: 11}).months(), 11, "11 months is 11 months"); + test.equal(moment.duration({months: 11}).years(), 0, "11 months makes no year"); + test.equal(moment.duration({months: 12}).months(), 0, "12 months is 0 months left over"); + test.equal(moment.duration({months: 12}).years(), 1, "12 months makes 1 year"); + test.equal(moment.duration({months: 13}).months(), 1, "13 months is 1 month left over"); + test.equal(moment.duration({months: 13}).years(), 1, "13 months makes 1 year"); + + test.equal(moment.duration({days: 29}).days(), 29, "29 days is 29 days"); + test.equal(moment.duration({days: 29}).months(), 0, "29 days makes no month"); + test.equal(moment.duration({days: 30}).days(), 0, "30 days is 0 days left over"); + test.equal(moment.duration({days: 30}).months(), 1, "30 days is a month"); + test.equal(moment.duration({days: 31}).days(), 1, "31 days is 1 day left over"); + test.equal(moment.duration({days: 31}).months(), 1, "31 days is a month"); + + test.equal(moment.duration({hours: 23}).hours(), 23, "23 hours is 23 hours"); + test.equal(moment.duration({hours: 23}).days(), 0, "23 hours makes no day"); + test.equal(moment.duration({hours: 24}).hours(), 0, "24 hours is 0 hours left over"); + test.equal(moment.duration({hours: 24}).days(), 1, "24 hours makes 1 day"); + test.equal(moment.duration({hours: 25}).hours(), 1, "25 hours is 1 hour left over"); + test.equal(moment.duration({hours: 25}).days(), 1, "25 hours makes 1 day"); + test.done(); + }, + + "effective equivalency" : function (test) { + test.expect(7); + test.deepEqual(moment.duration({seconds: 1})._data, moment.duration({milliseconds: 1000})._data, "1 second is the same as 1000 milliseconds"); + test.deepEqual(moment.duration({seconds: 60})._data, moment.duration({minutes: 1})._data, "1 minute is the same as 60 seconds"); + test.deepEqual(moment.duration({minutes: 60})._data, moment.duration({hours: 1})._data, "1 hour is the same as 60 minutes"); + test.deepEqual(moment.duration({hours: 24})._data, moment.duration({days: 1})._data, "1 day is the same as 24 hours"); + test.deepEqual(moment.duration({days: 7})._data, moment.duration({weeks: 1})._data, "1 week is the same as 7 days"); + test.deepEqual(moment.duration({days: 30})._data, moment.duration({months: 1})._data, "1 month is the same as 30 days"); + test.deepEqual(moment.duration({months: 12})._data, moment.duration({years: 1})._data, "1 years is the same as 12 months"); + test.done(); + }, + + "asGetters" : function (test) { + var d = moment.duration({ + years: 2, + months: 3, + weeks: 2, + days: 1, + hours: 8, + minutes: 9, + seconds: 20, + milliseconds: 12 + }); + + test.expect(8); + // These are of course very fragile. Their existence merely hints that + // changing the way 'as' works changes the output. + test.equal(d.asYears().toFixed(2), "2.29", "years"); + test.equal(d.asMonths().toFixed(2), "27.50", "months"); + test.equal(d.asWeeks().toFixed(2), "119.59", "weeks"); + test.equal(d.asDays().toFixed(2), "837.14", "days"); + test.equal(d.asHours().toFixed(2), "20091.25", "hours"); + test.equal(d.asMinutes().toFixed(2), "1205475.03", "minutes"); + test.equal(d.asSeconds().toFixed(2), "72328502.01", "seconds"); + test.equal(d.asMilliseconds(), 72328502012, "milliseconds"); + test.done(); + }, + + "generic as getter" : function (test) { + var d = moment.duration({ + years: 2, + months: 3, + weeks: 2, + days: 1, + hours: 8, + minutes: 9, + seconds: 20, + milliseconds: 12 + }); + + // These are of course very fragile. Their existence merely hints that + // changing the way 'as' works changes the output. + test.expect(24); + test.equal(d.as("years").toFixed(2), "2.29", "years"); + test.equal(d.as("year").toFixed(2), "2.29", "years = year"); + test.equal(d.as("y").toFixed(2), "2.29", "years = y"); + test.equal(d.as("months").toFixed(2), "27.50", "months"); + test.equal(d.as("month").toFixed(2), "27.50", "months = month"); + test.equal(d.as("M").toFixed(2), "27.50", "months = M"); + test.equal(d.as("weeks").toFixed(2), "119.59", "weeks"); + test.equal(d.as("week").toFixed(2), "119.59", "weeks = week"); + test.equal(d.as("w").toFixed(2), "119.59", "weeks = w"); + test.equal(d.as("days").toFixed(2), "837.14", "days"); + test.equal(d.as("day").toFixed(2), "837.14", "days = day"); + test.equal(d.as("d").toFixed(2), "837.14", "days = d"); + test.equal(d.as("hours").toFixed(2), "20091.25", "hours"); + test.equal(d.as("hour").toFixed(2), "20091.25", "hours = hour"); + test.equal(d.as("h").toFixed(2), "20091.25", "hours = h"); + test.equal(d.as("minutes").toFixed(2), "1205475.03", "minutes"); + test.equal(d.as("minute").toFixed(2), "1205475.03", "minutes = minute"); + test.equal(d.as("m").toFixed(2), "1205475.03", "minutes = m"); + test.equal(d.as("seconds").toFixed(2), "72328502.01", "seconds"); + test.equal(d.as("second").toFixed(2), "72328502.01", "seconds = second"); + test.equal(d.as("s").toFixed(2), "72328502.01", "seconds = s"); + test.equal(d.as("milliseconds"), 72328502012, "milliseconds"); + test.equal(d.as("millisecond"), 72328502012, "milliseconds = millisecond"); + test.equal(d.as("ms"), 72328502012, "milliseconds = ms"); + test.done(); + }, + + "isDuration" : function (test) { + test.expect(3); + test.ok(moment.isDuration(moment.duration(12345678)), "correctly says true"); + test.ok(!moment.isDuration(moment()), "moment object is not a duration"); + test.ok(!moment.isDuration({milliseconds: 1}), "plain object is not a duration"); + test.done(); + }, + + "add" : function (test) { + test.expect(4); + + var d = moment.duration({months: 4, weeks: 3, days: 2}); + // for some reason, d._data._months does not get updated; use d._months instead. + test.equal(d.add(1, 'month')._months, 5, 'Add months'); + test.equal(d.add(5, 'days')._days, 28, 'Add days'); + test.equal(d.add(10000)._milliseconds, 10000, 'Add milliseconds'); + test.equal(d.add({h: 23, m: 59})._milliseconds, 23 * 60 * 60 * 1000 + 59 * 60 * 1000 + 10000, 'Add hour:minute'); + + test.done(); + }, + + "add and bubble" : function (test) { + test.expect(4); + + test.equal(moment.duration(1, 'second').add(1000, 'milliseconds').seconds(), 2, 'Adding milliseconds should bubble up to seconds'); + test.equal(moment.duration(1, 'minute').add(60, 'second').minutes(), 2, 'Adding seconds should bubble up to minutes'); + test.equal(moment.duration(1, 'hour').add(60, 'minutes').hours(), 2, 'Adding minutes should bubble up to hours'); + test.equal(moment.duration(1, 'day').add(24, 'hours').days(), 2, 'Adding hours should bubble up to days'); + + test.done(); + }, + + "subtract and bubble" : function (test) { + test.expect(4); + + test.equal(moment.duration(2, 'second').subtract(1000, 'milliseconds').seconds(), 1, 'Subtracting milliseconds should bubble up to seconds'); + test.equal(moment.duration(2, 'minute').subtract(60, 'second').minutes(), 1, 'Subtracting seconds should bubble up to minutes'); + test.equal(moment.duration(2, 'hour').subtract(60, 'minutes').hours(), 1, 'Subtracting minutes should bubble up to hours'); + test.equal(moment.duration(2, 'day').subtract(24, 'hours').days(), 1, 'Subtracting hours should bubble up to days'); + + test.done(); + }, + + "subtract" : function (test) { + test.expect(4); + + var d = moment.duration({months: 2, weeks: 2, days: 0, hours: 5}); + // for some reason, d._data._months does not get updated; use d._months instead. + test.equal(d.subtract(1, 'months')._months, 1, 'Subtract months'); + test.equal(d.subtract(14, 'days')._days, 0, 'Subtract days'); + test.equal(d.subtract(10000)._milliseconds, 5 * 60 * 60 * 1000 - 10000, 'Subtract milliseconds'); + test.equal(d.subtract({h: 1, m: 59})._milliseconds, 3 * 60 * 60 * 1000 + 1 * 60 * 1000 - 10000, 'Subtract hour:minute'); + + test.done(); + } + +}; + +var moment = require("../../moment"); + +exports.durationFromMoments = { + setUp: function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "pure year diff" : function (test) { + var m1 = moment("2012-01-01T00:00:00.000Z"), + m2 = moment("2013-01-01T00:00:00.000Z"); + + test.equal(moment.duration({from: m1, to: m2}).as("years"), 1, "year moment difference"); + test.equal(moment.duration({from: m2, to: m1}).as("years"), -1, "negative year moment difference"); + test.done(); + }, + + "month and day diff" : function (test) { + var m1 = moment("2012-01-15T00:00:00.000Z"), + m2 = moment("2012-02-17T00:00:00.000Z"), + d = moment.duration({from: m1, to: m2}); + + test.equal(d.get("days"), 2); + test.equal(d.get("months"), 1); + test.done(); + }, + + "day diff, separate months" : function (test) { + var m1 = moment("2012-01-15T00:00:00.000Z"), + m2 = moment("2012-02-13T00:00:00.000Z"), + d = moment.duration({from: m1, to: m2}); + + test.equal(d.as("days"), 29); + test.done(); + }, + + "hour diff" : function (test) { + var m1 = moment("2012-01-15T17:00:00.000Z"), + m2 = moment("2012-01-16T03:00:00.000Z"), + d = moment.duration({from: m1, to: m2}); + + test.equal(d.as("hours"), 10); + test.done(); + }, + + "minute diff" : function (test) { + var m1 = moment("2012-01-15T17:45:00.000Z"), + m2 = moment("2012-01-16T03:15:00.000Z"), + d = moment.duration({from: m1, to: m2}); + + test.equal(d.as("hours"), 9.5); + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.format = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "format YY" : function (test) { + test.expect(1); + + var b = moment(new Date(2009, 1, 14, 15, 25, 50, 125)); + test.equal(b.format('YY'), '09', 'YY ---> 09'); + test.done(); + }, + + "format escape brackets" : function (test) { + test.expect(10); + + moment.locale('en'); + + var b = moment(new Date(2009, 1, 14, 15, 25, 50, 125)); + test.equal(b.format('[day]'), 'day', 'Single bracket'); + test.equal(b.format('[day] YY [YY]'), 'day 09 YY', 'Double bracket'); + test.equal(b.format('[YY'), '[09', 'Un-ended bracket'); + test.equal(b.format('[[YY]]'), '[YY]', 'Double nested brackets'); + test.equal(b.format('[[]'), '[', 'Escape open bracket'); + test.equal(b.format('[Last]'), 'Last', 'localized tokens'); + test.equal(b.format('[L] L'), 'L 02/14/2009', 'localized tokens with escaped localized tokens'); + test.equal(b.format('[L LL LLL LLLL aLa]'), 'L LL LLL LLLL aLa', 'localized tokens with escaped localized tokens'); + test.equal(b.format('[LLL] LLL'), 'LLL February 14, 2009 3:25 PM', 'localized tokens with escaped localized tokens (recursion)'); + test.equal(b.format('YYYY[\n]DD[\n]'), '2009\n14\n', 'Newlines'); + test.done(); + }, + + "handle negative years" : function (test) { + test.expect(10); + + moment.locale('en'); + test.equal(moment.utc().year(-1).format('YY'), '-01', 'YY with negative year'); + test.equal(moment.utc().year(-1).format('YYYY'), '-0001', 'YYYY with negative year'); + test.equal(moment.utc().year(-12).format('YY'), '-12', 'YY with negative year'); + test.equal(moment.utc().year(-12).format('YYYY'), '-0012', 'YYYY with negative year'); + test.equal(moment.utc().year(-123).format('YY'), '-23', 'YY with negative year'); + test.equal(moment.utc().year(-123).format('YYYY'), '-0123', 'YYYY with negative year'); + test.equal(moment.utc().year(-1234).format('YY'), '-34', 'YY with negative year'); + test.equal(moment.utc().year(-1234).format('YYYY'), '-1234', 'YYYY with negative year'); + test.equal(moment.utc().year(-12345).format('YY'), '-45', 'YY with negative year'); + test.equal(moment.utc().year(-12345).format('YYYY'), '-12345', 'YYYY with negative year'); + + test.done(); + }, + + "format milliseconds" : function (test) { + test.expect(6); + var b = moment(new Date(2009, 1, 14, 15, 25, 50, 123)); + test.equal(b.format('S'), '1', 'Deciseconds'); + test.equal(b.format('SS'), '12', 'Centiseconds'); + test.equal(b.format('SSS'), '123', 'Milliseconds'); + b.milliseconds(789); + test.equal(b.format('S'), '7', 'Deciseconds'); + test.equal(b.format('SS'), '78', 'Centiseconds'); + test.equal(b.format('SSS'), '789', 'Milliseconds'); + test.done(); + }, + + "format timezone" : function (test) { + test.expect(2); + + var b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + explanation = 'moment().format("z") = ' + b.format('z') + ' It should be something like "PST"'; + if (moment().zone() === -60) { + explanation += "For UTC+1 this is a known issue, see https://github.com/timrwood/moment/issues/162"; + } + test.ok(b.format('Z').match(/^[\+\-]\d\d:\d\d$/), b.format('Z') + ' should be something like "+07:30"'); + test.ok(b.format('ZZ').match(/^[\+\-]\d{4}$/), b.format('ZZ') + ' should be something like "+0700"'); + test.done(); + }, + + "format multiple with zone" : function (test) { + test.expect(1); + + var b = moment('2012-10-08 -1200', ['YYYY-MM-DD HH:mm ZZ', 'YYYY-MM-DD ZZ', 'YYYY-MM-DD']); + test.equals(b.format('YYYY-MM'), '2012-10', 'Parsing multiple formats should not crash with different sized formats'); + test.done(); + }, + + "isDST" : function (test) { + test.expect(2); + + var janOffset = new Date(2011, 0, 1).getTimezoneOffset(), + julOffset = new Date(2011, 6, 1).getTimezoneOffset(), + janIsDst = janOffset < julOffset, + julIsDst = julOffset < janOffset, + jan1 = moment([2011]), + jul1 = moment([2011, 6]); + + if (janIsDst && julIsDst) { + test.ok(0, 'January and July cannot both be in DST'); + test.ok(0, 'January and July cannot both be in DST'); + } else if (janIsDst) { + test.ok(jan1.isDST(), 'January 1 is DST'); + test.ok(!jul1.isDST(), 'July 1 is not DST'); + } else if (julIsDst) { + test.ok(!jan1.isDST(), 'January 1 is not DST'); + test.ok(jul1.isDST(), 'July 1 is DST'); + } else { + test.ok(!jan1.isDST(), 'January 1 is not DST'); + test.ok(!jul1.isDST(), 'July 1 is not DST'); + } + test.done(); + }, + + "unix timestamp" : function (test) { + test.expect(5); + + var m = moment('1234567890.123', 'X'); + test.equals(m.format('X'), '1234567890', 'unix timestamp without milliseconds'); + test.equals(m.format('X.S'), '1234567890.1', 'unix timestamp with deciseconds'); + test.equals(m.format('X.SS'), '1234567890.12', 'unix timestamp with centiseconds'); + test.equals(m.format('X.SSS'), '1234567890.123', 'unix timestamp with milliseconds'); + + m = moment(1234567890.123, 'X'); + test.equals(m.format('X'), '1234567890', 'unix timestamp as integer'); + + test.done(); + }, + + "zone" : function (test) { + test.expect(3); + + if (moment().zone() > 0) { + test.ok(moment().format('ZZ').indexOf('-') > -1, 'When the zone() offset is greater than 0, the ISO offset should be less than zero'); + } + if (moment().zone() < 0) { + test.ok(moment().format('ZZ').indexOf('+') > -1, 'When the zone() offset is less than 0, the ISO offset should be greater than zero'); + } + if (moment().zone() === 0) { + test.ok(moment().format('ZZ').indexOf('+') > -1, 'When the zone() offset is equal to 0, the ISO offset should be positive zero'); + } + if (moment().zone() === 0) { + test.equal(moment().zone(), 0, 'moment.fn.zone should be a multiple of 15 (was ' + moment().zone() + ')'); + } else { + test.equal(moment().zone() % 15, 0, 'moment.fn.zone should be a multiple of 15 (was ' + moment().zone() + ')'); + } + test.equal(moment().zone(), new Date().getTimezoneOffset(), 'zone should equal getTimezoneOffset'); + test.done(); + }, + + "default format" : function (test) { + test.expect(1); + var isoRegex = /\d{4}.\d\d.\d\dT\d\d.\d\d.\d\d[\+\-]\d\d:\d\d/; + test.ok(isoRegex.exec(moment().format()), "default format (" + moment().format() + ") should match ISO"); + test.done(); + }, + + "escaping quotes" : function (test) { + test.expect(4); + moment.locale('en'); + var date = moment([2012, 0]); + test.equal(date.format('MMM \'YY'), "Jan '12", "Should be able to format with single parenthesis"); + test.equal(date.format('MMM "YY'), 'Jan "12', "Should be able to format with double parenthesis"); + test.equal(date.format("MMM 'YY"), "Jan '12", "Should be able to format with single parenthesis"); + test.equal(date.format("MMM \"YY"), 'Jan "12', "Should be able to format with double parenthesis"); + test.done(); + }, + + "toJSON" : function (test) { + var supportsJson = typeof JSON !== "undefined" && JSON.stringify && JSON.stringify.call, + date = moment("2012-10-09T21:30:40.678+0100"); + + test.expect(supportsJson ? 2 : 1); + + test.equal(date.toJSON(), "2012-10-09T20:30:40.678Z", "should output ISO8601 on moment.fn.toJSON"); + + if (supportsJson) { + test.equal(JSON.stringify({ + date : date + }), '{"date":"2012-10-09T20:30:40.678Z"}', "should output ISO8601 on JSON.stringify"); + } + + test.done(); + }, + + "toISOString" : function (test) { + test.expect(4); + var date = moment.utc("2012-10-09T20:30:40.678"); + + test.equal(date.toISOString(), "2012-10-09T20:30:40.678Z", "should output ISO8601 on moment.fn.toISOString"); + + // big years + date = moment.utc("+020123-10-09T20:30:40.678"); + test.equal(date.toISOString(), "+020123-10-09T20:30:40.678Z", "ISO8601 format on big positive year"); + // negative years + date = moment.utc("-000001-10-09T20:30:40.678"); + test.equal(date.toISOString(), "-000001-10-09T20:30:40.678Z", "ISO8601 format on negative year"); + // big negative years + date = moment.utc("-020123-10-09T20:30:40.678"); + test.equal(date.toISOString(), "-020123-10-09T20:30:40.678Z", "ISO8601 format on big negative year"); + + test.done(); + }, + + "long years" : function (test) { + test.expect(6); + test.equal(moment.utc().year(2).format('YYYYYY'), '+000002', 'small year with YYYYYY'); + test.equal(moment.utc().year(2012).format('YYYYYY'), '+002012', 'regular year with YYYYYY'); + test.equal(moment.utc().year(20123).format('YYYYYY'), '+020123', 'big year with YYYYYY'); + + test.equal(moment.utc().year(-1).format('YYYYYY'), '-000001', 'small negative year with YYYYYY'); + test.equal(moment.utc().year(-2012).format('YYYYYY'), '-002012', 'negative year with YYYYYY'); + test.equal(moment.utc().year(-20123).format('YYYYYY'), '-020123', 'big negative year with YYYYYY'); + + test.done(); + }, + + "iso week formats" : function (test) { + // http://en.wikipedia.org/wiki/ISO_week_date + var cases = { + "2005-01-02": "2004-53", + "2005-12-31": "2005-52", + "2007-01-01": "2007-01", + "2007-12-30": "2007-52", + "2007-12-31": "2008-01", + "2008-01-01": "2008-01", + "2008-12-28": "2008-52", + "2008-12-29": "2009-01", + "2008-12-30": "2009-01", + "2008-12-31": "2009-01", + "2009-01-01": "2009-01", + "2009-12-31": "2009-53", + "2010-01-01": "2009-53", + "2010-01-02": "2009-53", + "2010-01-03": "2009-53", + "404-12-31": "0404-53", + "405-12-31": "0405-52" + }, i, isoWeek, formatted2, formatted1; + + for (i in cases) { + isoWeek = cases[i].split('-').pop(); + formatted2 = moment(i, 'YYYY-MM-DD').format('WW'); + test.equal(isoWeek, formatted2, i + ": WW should be " + isoWeek + ", but " + formatted2); + isoWeek = isoWeek.replace(/^0+/, ''); + formatted1 = moment(i, 'YYYY-MM-DD').format('W'); + test.equal(isoWeek, formatted1, i + ": W should be " + isoWeek + ", but " + formatted1); + } + + test.done(); + }, + + "iso week year formats" : function (test) { + // http://en.wikipedia.org/wiki/ISO_week_date + var cases = { + "2005-01-02": "2004-53", + "2005-12-31": "2005-52", + "2007-01-01": "2007-01", + "2007-12-30": "2007-52", + "2007-12-31": "2008-01", + "2008-01-01": "2008-01", + "2008-12-28": "2008-52", + "2008-12-29": "2009-01", + "2008-12-30": "2009-01", + "2008-12-31": "2009-01", + "2009-01-01": "2009-01", + "2009-12-31": "2009-53", + "2010-01-01": "2009-53", + "2010-01-02": "2009-53", + "2010-01-03": "2009-53", + "404-12-31": "0404-53", + "405-12-31": "0405-52" + }, i, isoWeekYear, formatted5, formatted4, formatted2; + + for (i in cases) { + isoWeekYear = cases[i].split('-')[0]; + formatted5 = moment(i, 'YYYY-MM-DD').format('GGGGG'); + test.equal('0' + isoWeekYear, formatted5, i + ": GGGGG should be " + isoWeekYear + ", but " + formatted5); + formatted4 = moment(i, 'YYYY-MM-DD').format('GGGG'); + test.equal(isoWeekYear, formatted4, i + ": GGGG should be " + isoWeekYear + ", but " + formatted4); + formatted2 = moment(i, 'YYYY-MM-DD').format('GG'); + test.equal(isoWeekYear.slice(2, 4), formatted2, i + ": GG should be " + isoWeekYear + ", but " + formatted2); + } + + test.done(); + }, + + "week year formats" : function (test) { + // http://en.wikipedia.org/wiki/ISO_week_date + var cases = { + "2005-01-02": "2004-53", + "2005-12-31": "2005-52", + "2007-01-01": "2007-01", + "2007-12-30": "2007-52", + "2007-12-31": "2008-01", + "2008-01-01": "2008-01", + "2008-12-28": "2008-52", + "2008-12-29": "2009-01", + "2008-12-30": "2009-01", + "2008-12-31": "2009-01", + "2009-01-01": "2009-01", + "2009-12-31": "2009-53", + "2010-01-01": "2009-53", + "2010-01-02": "2009-53", + "2010-01-03": "2009-53", + "404-12-31": "0404-53", + "405-12-31": "0405-52" + }, i, isoWeekYear, formatted5, formatted4, formatted2; + + moment.locale('en-gb'); // 1, 4 + for (i in cases) { + isoWeekYear = cases[i].split('-')[0]; + formatted5 = moment(i, 'YYYY-MM-DD').format('ggggg'); + test.equal('0' + isoWeekYear, formatted5, i + ": ggggg should be " + isoWeekYear + ", but " + formatted5); + formatted4 = moment(i, 'YYYY-MM-DD').format('gggg'); + test.equal(isoWeekYear, formatted4, i + ": gggg should be " + isoWeekYear + ", but " + formatted4); + formatted2 = moment(i, 'YYYY-MM-DD').format('gg'); + test.equal(isoWeekYear.slice(2, 4), formatted2, i + ": gg should be " + isoWeekYear + ", but " + formatted2); + } + + test.done(); + }, + + "iso weekday formats" : function (test) { + test.expect(7); + + test.equal(moment([1985, 1, 4]).format('E'), '1', "Feb 4 1985 is Monday -- 1st day"); + test.equal(moment([2029, 8, 18]).format('E'), '2', "Sep 18 2029 is Tuesday -- 2nd day"); + test.equal(moment([2013, 3, 24]).format('E'), '3', "Apr 24 2013 is Wednesday -- 3rd day"); + test.equal(moment([2015, 2, 5]).format('E'), '4', "Mar 5 2015 is Thursday -- 4th day"); + test.equal(moment([1970, 0, 2]).format('E'), '5', "Jan 2 1970 is Friday -- 5th day"); + test.equal(moment([2001, 4, 12]).format('E'), '6', "May 12 2001 is Saturday -- 6th day"); + test.equal(moment([2000, 0, 2]).format('E'), '7', "Jan 2 2000 is Sunday -- 7th day"); + + test.done(); + }, + + "weekday formats" : function (test) { + test.expect(7); + + moment.locale('dow: 3,doy: 5', {week: {dow: 3, doy: 5}}); + test.equal(moment([1985, 1, 6]).format('e'), '0', "Feb 6 1985 is Wednesday -- 0th day"); + test.equal(moment([2029, 8, 20]).format('e'), '1', "Sep 20 2029 is Thursday -- 1st day"); + test.equal(moment([2013, 3, 26]).format('e'), '2', "Apr 26 2013 is Friday -- 2nd day"); + test.equal(moment([2015, 2, 7]).format('e'), '3', "Mar 7 2015 is Saturday -- 3nd day"); + test.equal(moment([1970, 0, 4]).format('e'), '4', "Jan 4 1970 is Sunday -- 4th day"); + test.equal(moment([2001, 4, 14]).format('e'), '5', "May 14 2001 is Monday -- 5th day"); + test.equal(moment([2000, 0, 4]).format('e'), '6', "Jan 4 2000 is Tuesday -- 6th day"); + + test.done(); + }, + + "toString is just human readable format" : function (test) { + test.expect(1); + + var b = moment(new Date(2009, 1, 5, 15, 25, 50, 125)); + test.equal(b.toString(), b.format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ')); + test.done(); + }, + + "toJSON skips postformat" : function (test) { + test.expect(1); + + moment.locale('postformat', { + postformat: function (s) { + s.replace(/./g, 'X'); + } + }); + test.equal(moment.utc([2000, 0, 1]).toJSON(), "2000-01-01T00:00:00.000Z", "toJSON doesn't postformat"); + moment.locale('postformat', null); + test.done(); + }, + + "calendar day timezone" : function (test) { + test.expect(11); + + moment.locale('en'); + var zones = [60, -60, 90, -90, 360, -360, 720, -720], + b = moment().utc().startOf('day').subtract({m : 1}), + c = moment().local().startOf('day').subtract({m : 1}), + d = moment().local().startOf('day').subtract({d : 2}), + i, z, a; + + for (i = 0; i < zones.length; ++i) { + z = zones[i]; + a = moment().zone(z).startOf('day').subtract({m: 1}); + test.equal(moment(a).zone(z).calendar(), "Yesterday at 11:59 PM", "Yesterday at 11:59 PM, not Today, or the wrong time"); + } + + test.equal(moment(b).utc().calendar(), "Yesterday at 11:59 PM", "Yesterday at 11:59 PM, not Today, or the wrong time"); + test.equal(moment(c).local().calendar(), "Yesterday at 11:59 PM", "Yesterday at 11:59 PM, not Today, or the wrong time"); + test.equal(moment(c).local().calendar(d), "Tomorrow at 11:59 PM", "Tomorrow at 11:59 PM, not Yesterday, or the wrong time"); + + test.done(); + }, + + "invalid" : function (test) { + moment.locale('en'); + + test.equal(moment.invalid().format(), "Invalid date"); + test.equal(moment.invalid().format('YYYY-MM-DD'), "Invalid date"); + + test.done(); + }, + + "quarter formats" : function (test) { + test.expect(7); + + test.equal(moment([1985, 1, 4]).format('Q'), '1', "Feb 4 1985 is Q1"); + test.equal(moment([2029, 8, 18]).format('Q'), '3', "Sep 18 2029 is Q3"); + test.equal(moment([2013, 3, 24]).format('Q'), '2', "Apr 24 2013 is Q2"); + test.equal(moment([2015, 2, 5]).format('Q'), '1', "Mar 5 2015 is Q1"); + test.equal(moment([1970, 0, 2]).format('Q'), '1', "Jan 2 1970 is Q1"); + test.equal(moment([2001, 11, 12]).format('Q'), '4', "Dec 12 2001 is Q4"); + test.equal(moment([2000, 0, 2]).format('[Q]Q-YYYY'), 'Q1-2000', "Jan 2 2000 is Q1"); + + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.gettersSetters = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "getters" : function (test) { + test.expect(8); + + var a = moment([2011, 9, 12, 6, 7, 8, 9]); + test.equal(a.year(), 2011, 'year'); + test.equal(a.month(), 9, 'month'); + test.equal(a.date(), 12, 'date'); + test.equal(a.day(), 3, 'day'); + test.equal(a.hours(), 6, 'hour'); + test.equal(a.minutes(), 7, 'minute'); + test.equal(a.seconds(), 8, 'second'); + test.equal(a.milliseconds(), 9, 'milliseconds'); + test.done(); + }, + + "getters programmatic" : function (test) { + var a = moment([2011, 9, 12, 6, 7, 8, 9]); + test.equal(a.get('year'), 2011, 'year'); + test.equal(a.get('month'), 9, 'month'); + test.equal(a.get('date'), 12, 'date'); + test.equal(a.get('day'), 3, 'day'); + test.equal(a.get('hour'), 6, 'hour'); + test.equal(a.get('minute'), 7, 'minute'); + test.equal(a.get('second'), 8, 'second'); + test.equal(a.get('milliseconds'), 9, 'milliseconds'); + + //actual getters tested elsewhere + test.equal(a.get('weekday'), a.weekday(), 'weekday'); + test.equal(a.get('isoWeekday'), a.isoWeekday(), 'isoWeekday'); + test.equal(a.get('week'), a.week(), 'week'); + test.equal(a.get('isoWeek'), a.isoWeek(), 'isoWeek'); + test.equal(a.get('dayOfYear'), a.dayOfYear(), 'dayOfYear'); + test.done(); + }, + + "setters plural" : function (test) { + test.expect(8); + + var a = moment(); + a.years(2011); + a.months(9); + a.dates(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(9); + test.equal(a.years(), 2011, 'years'); + test.equal(a.months(), 9, 'months'); + test.equal(a.dates(), 12, 'dates'); + test.equal(a.days(), 3, 'days'); + test.equal(a.hours(), 6, 'hours'); + test.equal(a.minutes(), 7, 'minutes'); + test.equal(a.seconds(), 8, 'seconds'); + test.equal(a.milliseconds(), 9, 'milliseconds'); + test.done(); + }, + + "setters singular" : function (test) { + test.expect(8); + + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hour(6); + a.minute(7); + a.second(8); + a.millisecond(9); + test.equal(a.year(), 2011, 'year'); + test.equal(a.month(), 9, 'month'); + test.equal(a.date(), 12, 'date'); + test.equal(a.day(), 3, 'day'); + test.equal(a.hour(), 6, 'hour'); + test.equal(a.minute(), 7, 'minute'); + test.equal(a.second(), 8, 'second'); + test.equal(a.millisecond(), 9, 'milliseconds'); + test.done(); + }, + + "setters" : function (test) { + test.expect(9); + + var a = moment(); + a.year(2011); + a.month(9); + a.date(12); + a.hours(6); + a.minutes(7); + a.seconds(8); + a.milliseconds(9); + test.equal(a.year(), 2011, 'year'); + test.equal(a.month(), 9, 'month'); + test.equal(a.date(), 12, 'date'); + test.equal(a.day(), 3, 'day'); + test.equal(a.hours(), 6, 'hour'); + test.equal(a.minutes(), 7, 'minute'); + test.equal(a.seconds(), 8, 'second'); + test.equal(a.milliseconds(), 9, 'milliseconds'); + + // Test month() behavior. See https://github.com/timrwood/moment/pull/822 + a = moment('20130531', 'YYYYMMDD'); + a.month(3); + test.equal(a.month(), 3, 'month edge case'); + + test.done(); + }, + + "setter programmatic" : function (test) { + var a = moment(); + a.set('year', 2011); + a.set('month', 9); + a.set('date', 12); + a.set('hours', 6); + a.set('minutes', 7); + a.set('seconds', 8); + a.set('milliseconds', 9); + test.equal(a.year(), 2011, 'year'); + test.equal(a.month(), 9, 'month'); + test.equal(a.date(), 12, 'date'); + test.equal(a.day(), 3, 'day'); + test.equal(a.hours(), 6, 'hour'); + test.equal(a.minutes(), 7, 'minute'); + test.equal(a.seconds(), 8, 'second'); + test.equal(a.milliseconds(), 9, 'milliseconds'); + + // Test month() behavior. See https://github.com/timrwood/moment/pull/822 + a = moment('20130531', 'YYYYMMDD'); + a.month(3); + test.equal(a.month(), 3, 'month edge case'); + + test.done(); + }, + + // Disable this, until we weekYear setter is fixed. + // https://github.com/moment/moment/issues/1379 + // "setters programatic with weeks" : function (test) { + // var a = moment(); + // a.set('weekYear', 2001); + // a.set('week', 49); + // a.set('day', 4); + // test.equals(a.weekYear(), 2001); + // test.equals(a.week(), 49); + // test.equals(a.day(), 4); + + // a.set('weekday', 1); + // test.equals(a.weekday(), 1); + + // test.done(); + //}, + + // I think this suffers from the same issue as the non-iso version. + // "setters programatic with weeks ISO" : function (test) { + // var a = moment(); + // a.set('isoWeekYear', 2001); + // a.set('isoWeek', 49); + // a.set('isoWeekday', 4); + + // test.equals(a.weekYear(), 2001); + // test.equals(a.week(), 49); + // test.equals(a.day(), 4); + + // test.done(); + //}, + + "setters strings" : function (test) { + test.expect(7); + + var a = moment([2012]).locale('en'); + test.equal(a.clone().day(0).day('Wednesday').day(), 3, 'day full name'); + test.equal(a.clone().day(0).day('Wed').day(), 3, 'day short name'); + test.equal(a.clone().day(0).day('We').day(), 3, 'day minimal name'); + test.equal(a.clone().day(0).day('invalid').day(), 0, 'invalid day name'); + test.equal(a.clone().month(0).month('April').month(), 3, 'month full name'); + test.equal(a.clone().month(0).month('Apr').month(), 3, 'month short name'); + test.equal(a.clone().month(0).month('invalid').month(), 0, 'invalid month name'); + test.done(); + }, + + "setters - falsey values" : function (test) { + test.expect(1); + + var a = moment(); + // ensure minutes wasn't coincidentally 0 already + a.minutes(1); + a.minutes(0); + test.equal(a.minutes(), 0, 'falsey value'); + test.done(); + }, + + "chaining setters" : function (test) { + test.expect(7); + + var a = moment(); + a.year(2011) + .month(9) + .date(12) + .hours(6) + .minutes(7) + .seconds(8); + test.equal(a.year(), 2011, 'year'); + test.equal(a.month(), 9, 'month'); + test.equal(a.date(), 12, 'date'); + test.equal(a.day(), 3, 'day'); + test.equal(a.hours(), 6, 'hour'); + test.equal(a.minutes(), 7, 'minute'); + test.equal(a.seconds(), 8, 'second'); + test.done(); + }, + + "day setter" : function (test) { + test.expect(18); + + var a = moment([2011, 0, 15]); + test.equal(moment(a).day(0).date(), 9, 'set from saturday to sunday'); + test.equal(moment(a).day(6).date(), 15, 'set from saturday to saturday'); + test.equal(moment(a).day(3).date(), 12, 'set from saturday to wednesday'); + + a = moment([2011, 0, 9]); + test.equal(moment(a).day(0).date(), 9, 'set from sunday to sunday'); + test.equal(moment(a).day(6).date(), 15, 'set from sunday to saturday'); + test.equal(moment(a).day(3).date(), 12, 'set from sunday to wednesday'); + + a = moment([2011, 0, 12]); + test.equal(moment(a).day(0).date(), 9, 'set from wednesday to sunday'); + test.equal(moment(a).day(6).date(), 15, 'set from wednesday to saturday'); + test.equal(moment(a).day(3).date(), 12, 'set from wednesday to wednesday'); + + test.equal(moment(a).day(-7).date(), 2, 'set from wednesday to last sunday'); + test.equal(moment(a).day(-1).date(), 8, 'set from wednesday to last saturday'); + test.equal(moment(a).day(-4).date(), 5, 'set from wednesday to last wednesday'); + + test.equal(moment(a).day(7).date(), 16, 'set from wednesday to next sunday'); + test.equal(moment(a).day(13).date(), 22, 'set from wednesday to next saturday'); + test.equal(moment(a).day(10).date(), 19, 'set from wednesday to next wednesday'); + + test.equal(moment(a).day(14).date(), 23, 'set from wednesday to second next sunday'); + test.equal(moment(a).day(20).date(), 29, 'set from wednesday to second next saturday'); + test.equal(moment(a).day(17).date(), 26, 'set from wednesday to second next wednesday'); + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.invalid = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "invalid" : function (test) { + var m = moment.invalid(); + test.equals(m.isValid(), false); + test.equals(m.parsingFlags().userInvalidated, true); + test.ok(isNaN(m.valueOf())); + test.done(); + }, + + "invalid with existing flag" : function (test) { + var m = moment.invalid({invalidMonth : 'whatchamacallit'}); + test.equals(m.isValid(), false); + test.equals(m.parsingFlags().userInvalidated, false); + test.equals(m.parsingFlags().invalidMonth, 'whatchamacallit'); + test.ok(isNaN(m.valueOf())); + test.done(); + }, + + "invalid with custom flag" : function (test) { + var m = moment.invalid({tooBusyWith : 'reiculating splines'}); + test.equals(m.isValid(), false); + test.equals(m.parsingFlags().userInvalidated, false); + test.equals(m.parsingFlags().tooBusyWith, 'reiculating splines'); + test.ok(isNaN(m.valueOf())); + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.isAfter = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "is after without units" : function (test) { + test.expect(17); + + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + test.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), false, "year is later"); + test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), true, "year is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), false, "month is later"); + test.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), true, "month is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), false, "day is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), true, "day is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), false, "hour is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), true, "hour is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), false, "minute is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), true, "minute is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), false, "second is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), true, "second is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, "millisecond match"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), false, "millisecond is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), true, "millisecond is earlier"); + test.equal(m.isAfter(m), false, "moments are not after themselves"); + test.equal(+m, +mCopy, "isAfter second should not change moment"); + test.done(); + }, + + "is after year" : function (test) { + test.expect(11); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + test.equal(m.isAfter(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), false, "year match"); + test.equal(m.isAfter(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'years'), true, "plural should work"); + test.equal(m.isAfter(moment(new Date(2013, 5, 6, 7, 8, 9, 10)), 'year'), false, "year is later"); + test.equal(m.isAfter(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year'), true, "year is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), false, "exact start of year"); + test.equal(m.isAfter(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), false, "exact end of year"); + test.equal(m.isAfter(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), false, "start of next year"); + test.equal(m.isAfter(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), true, "end of previous year"); + test.equal(m.isAfter(moment(new Date(1980, 11, 31, 23, 59, 59, 999)), 'year'), true, "end of year far before"); + test.equal(m.isAfter(m, 'year'), false, "same moments are not after the same year"); + test.equal(+m, +mCopy, "isAfter year should not change moment"); + test.done(); + }, + + "is after month" : function (test) { + test.expect(13); + + var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m); + test.equal(m.isAfter(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), false, "month match"); + test.equal(m.isAfter(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'months'), true, "plural should work"); + test.equal(m.isAfter(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), false, "year is later"); + test.equal(m.isAfter(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month'), true, "year is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), false, "month is later"); + test.equal(m.isAfter(moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), true, "month is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), false, "exact start of month"); + test.equal(m.isAfter(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), false, "exact end of month"); + test.equal(m.isAfter(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), false, "start of next month"); + test.equal(m.isAfter(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), true, "end of previous month"); + test.equal(m.isAfter(moment(new Date(2010, 12, 31, 23, 59, 59, 999)), 'month'), true, "later month but earlier year"); + test.equal(m.isAfter(m, 'month'), false, "same moments are not after the same month"); + test.equal(+m, +mCopy, "isAfter month should not change moment"); + test.done(); + }, + + "is after day" : function (test) { + test.expect(15); + + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 7, 8, 9, 10)), 'day'), false, "day match"); + test.equal(m.isAfter(moment(new Date(2010, 3, 2, 7, 8, 9, 10)), 'days'), true, "plural should work"); + test.equal(m.isAfter(moment(new Date(2012, 3, 2, 7, 8, 9, 10)), 'day'), false, "year is later"); + test.equal(m.isAfter(moment(new Date(2010, 3, 2, 7, 8, 9, 10)), 'day'), true, "year is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 4, 2, 7, 8, 9, 10)), 'day'), false, "month is later"); + test.equal(m.isAfter(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), true, "month is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 3, 7, 8, 9, 10)), 'day'), false, "day is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 1, 7, 8, 9, 10)), 'day'), true, "day is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 0, 0, 0, 0)), 'day'), false, "exact start of day"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 23, 59, 59, 999)), 'day'), false, "exact end of day"); + test.equal(m.isAfter(moment(new Date(2011, 3, 3, 0, 0, 0, 0)), 'day'), false, "start of next day"); + test.equal(m.isAfter(moment(new Date(2011, 3, 1, 23, 59, 59, 999)), 'day'), true, "end of previous day"); + test.equal(m.isAfter(moment(new Date(2010, 3, 10, 0, 0, 0, 0)), 'day'), true, "later day but earlier year"); + test.equal(m.isAfter(m, 'day'), false, "same moments are not after the same day"); + test.equal(+m, +mCopy, "isAfter day should not change moment"); + test.done(); + }, + + "is after hour" : function (test) { + test.expect(16); + + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, "hour match"); + test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 8, 9, 10)), 'hours'), true, "plural should work"); + test.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 8, 9, 10)), 'hour'), false, "year is later"); + test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 8, 9, 10)), 'hour'), true, "year is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 8, 9, 10)), 'hour'), false, "month is later"); + test.equal(m.isAfter(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), true, "month is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 8, 9, 10)), 'hour'), false, "day is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 1, 3, 8, 9, 10)), 'hour'), true, "day is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 8, 9, 10)), 'hour'), false, "hour is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, "hour is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 0, 0, 0)), 'hour'), false, "exact start of hour"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 59, 59, 999)), 'hour'), false, "exact end of hour"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 0, 0, 0)), 'hour'), false, "start of next hour"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 2, 59, 59, 999)), 'hour'), true, "end of previous hour"); + test.equal(m.isAfter(m, 'hour'), false, "same moments are not after the same hour"); + test.equal(+m, +mCopy, "isAfter hour should not change moment"); + test.done(); + }, + + "is after minute" : function (test) { + test.expect(18); + + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 9, 10)), 'minute'), false, "minute match"); + test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 9, 10)), 'minutes'), true, "plural should work"); + test.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 4, 9, 10)), 'minute'), false, "year is later"); + test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 9, 10)), 'minute'), true, "year is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 9, 10)), 'minute'), false, "month is later"); + test.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), true, "month is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 9, 10)), 'minute'), false, "day is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 1, 3, 4, 9, 10)), 'minute'), true, "day is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 9, 10)), 'minute'), false, "hour is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 2, 4, 9, 10)), 'minute'), true, "hour is earler"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 9, 10)), 'minute'), false, "minute is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 9, 10)), 'minute'), true, "minute is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 0, 0)), 'minute'), false, "exact start of minute"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 59, 999)), 'minute'), false, "exact end of minute"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 0, 0)), 'minute'), false, "start of next minute"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 59, 999)), 'minute'), true, "end of previous minute"); + test.equal(m.isAfter(m, 'minute'), false, "same moments are not after the same minute"); + test.equal(+m, +mCopy, "isAfter minute should not change moment"); + test.done(); + }, + + "is after second" : function (test) { + test.expect(20); + + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'second'), false, "second match"); + test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'seconds'), true, "plural should work"); + test.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'second'), false, "year is later"); + test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'second'), true, "year is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'second'), false, "month is later"); + test.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), true, "month is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'second'), false, "day is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'second'), true, "day is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'second'), false, "hour is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'second'), true, "hour is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'second'), false, "minute is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'second'), true, "minute is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'second'), false, "second is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'second'), true, "second is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 0)), 'second'), false, "exact start of second"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 999)), 'second'), false, "exact end of second"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 0)), 'second'), false, "start of next second"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 999)), 'second'), true, "end of previous second"); + test.equal(m.isAfter(m, 'second'), false, "same moments are not after the same second"); + test.equal(+m, +mCopy, "isAfter second should not change moment"); + test.done(); + }, + + "is after millisecond" : function (test) { + test.expect(18); + + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, "millisecond match"); + test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds'), true, "plural should work"); + test.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, "year is later"); + test.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, "year is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), false, "month is later"); + test.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), true, "month is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), false, "day is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), true, "day is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), false, "hour is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), true, "hour is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), false, "minute is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), true, "minute is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), false, "second is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), true, "second is earlier"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), false, "millisecond is later"); + test.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), true, "millisecond is earlier"); + test.equal(m.isAfter(m, 'millisecond'), false, "same moments are not after the same millisecond"); + test.equal(+m, +mCopy, "isAfter millisecond should not change moment"); + test.done(); + } + +}; + +var moment = require("../../moment"); + +exports.isBefore = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "is after without units" : function (test) { + test.expect(17); + + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), true, "year is later"); + test.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), false, "year is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), true, "month is later"); + test.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), false, "month is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), true, "day is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), false, "day is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), true, "hour is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), false, "hour is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), true, "minute is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), false, "minute is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), true, "second is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), false, "second is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, "millisecond match"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), true, "millisecond is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), false, "millisecond is earlier"); + test.equal(m.isBefore(m), false, "moments are not before themselves"); + test.equal(+m, +mCopy, "isBefore second should not change moment"); + test.done(); + }, + + "is before year" : function (test) { + test.expect(11); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + test.equal(m.isBefore(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), false, "year match"); + test.equal(m.isBefore(moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'years'), true, "plural should work"); + test.equal(m.isBefore(moment(new Date(2013, 5, 6, 7, 8, 9, 10)), 'year'), true, "year is later"); + test.equal(m.isBefore(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year'), false, "year is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), false, "exact start of year"); + test.equal(m.isBefore(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), false, "exact end of year"); + test.equal(m.isBefore(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), true, "start of next year"); + test.equal(m.isBefore(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), false, "end of previous year"); + test.equal(m.isBefore(moment(new Date(1980, 11, 31, 23, 59, 59, 999)), 'year'), false, "end of year far before"); + test.equal(m.isBefore(m, 'year'), false, "same moments are not before the same year"); + test.equal(+m, +mCopy, "isBefore year should not change moment"); + test.done(); + }, + + "is before month" : function (test) { + test.expect(13); + + var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m); + test.equal(m.isBefore(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), false, "month match"); + test.equal(m.isBefore(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'months'), true, "plural should work"); + test.equal(m.isBefore(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), true, "year is later"); + test.equal(m.isBefore(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month'), false, "year is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), true, "month is later"); + test.equal(m.isBefore(moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), false, "month is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), false, "exact start of month"); + test.equal(m.isBefore(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), false, "exact end of month"); + test.equal(m.isBefore(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), true, "start of next month"); + test.equal(m.isBefore(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), false, "end of previous month"); + test.equal(m.isBefore(moment(new Date(2010, 12, 31, 23, 59, 59, 999)), 'month'), false, "later month but earlier year"); + test.equal(m.isBefore(m, 'month'), false, "same moments are not before the same month"); + test.equal(+m, +mCopy, "isBefore month should not change moment"); + test.done(); + }, + + "is before day" : function (test) { + test.expect(15); + + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 7, 8, 9, 10)), 'day'), false, "day match"); + test.equal(m.isBefore(moment(new Date(2012, 3, 2, 7, 8, 9, 10)), 'days'), true, "plural should work"); + test.equal(m.isBefore(moment(new Date(2012, 3, 2, 7, 8, 9, 10)), 'day'), true, "year is later"); + test.equal(m.isBefore(moment(new Date(2010, 3, 2, 7, 8, 9, 10)), 'day'), false, "year is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 4, 2, 7, 8, 9, 10)), 'day'), true, "month is later"); + test.equal(m.isBefore(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), false, "month is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 3, 7, 8, 9, 10)), 'day'), true, "day is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 1, 7, 8, 9, 10)), 'day'), false, "day is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 0, 0, 0, 0)), 'day'), false, "exact start of day"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 23, 59, 59, 999)), 'day'), false, "exact end of day"); + test.equal(m.isBefore(moment(new Date(2011, 3, 3, 0, 0, 0, 0)), 'day'), true, "start of next day"); + test.equal(m.isBefore(moment(new Date(2011, 3, 1, 23, 59, 59, 999)), 'day'), false, "end of previous day"); + test.equal(m.isBefore(moment(new Date(2010, 3, 10, 0, 0, 0, 0)), 'day'), false, "later day but earlier year"); + test.equal(m.isBefore(m, 'day'), false, "same moments are not before the same day"); + test.equal(+m, +mCopy, "isBefore day should not change moment"); + test.done(); + }, + + "is before hour" : function (test) { + test.expect(16); + + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, "hour match"); + test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 8, 9, 10)), 'hours'), true, "plural should work"); + test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 8, 9, 10)), 'hour'), true, "year is later"); + test.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 8, 9, 10)), 'hour'), false, "year is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 8, 9, 10)), 'hour'), true, "month is later"); + test.equal(m.isBefore(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), false, "month is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 8, 9, 10)), 'hour'), true, "day is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 1, 3, 8, 9, 10)), 'hour'), false, "day is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 8, 9, 10)), 'hour'), true, "hour is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, "hour is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 0, 0, 0)), 'hour'), false, "exact start of hour"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 59, 59, 999)), 'hour'), false, "exact end of hour"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 0, 0, 0)), 'hour'), true, "start of next hour"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 2, 59, 59, 999)), 'hour'), false, "end of previous hour"); + test.equal(m.isBefore(m, 'hour'), false, "same moments are not before the same hour"); + test.equal(+m, +mCopy, "isBefore hour should not change moment"); + test.done(); + }, + + "is before minute" : function (test) { + test.expect(18); + + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 9, 10)), 'minute'), false, "minute match"); + test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 9, 10)), 'minutes'), true, "plural should work"); + test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 9, 10)), 'minute'), true, "year is later"); + test.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 9, 10)), 'minute'), false, "year is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 9, 10)), 'minute'), true, "month is later"); + test.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), false, "month is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 9, 10)), 'minute'), true, "day is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 1, 3, 4, 9, 10)), 'minute'), false, "day is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 9, 10)), 'minute'), true, "hour is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 2, 4, 9, 10)), 'minute'), false, "hour is earler"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 9, 10)), 'minute'), true, "minute is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 9, 10)), 'minute'), false, "minute is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 0, 0)), 'minute'), false, "exact start of minute"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 59, 999)), 'minute'), false, "exact end of minute"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 0, 0)), 'minute'), true, "start of next minute"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 59, 999)), 'minute'), false, "end of previous minute"); + test.equal(m.isBefore(m, 'minute'), false, "same moments are not before the same minute"); + test.equal(+m, +mCopy, "isBefore minute should not change moment"); + test.done(); + }, + + "is before second" : function (test) { + test.expect(20); + + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'second'), false, "second match"); + test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'seconds'), true, "plural should work"); + test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'second'), true, "year is later"); + test.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'second'), false, "year is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'second'), true, "month is later"); + test.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), false, "month is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'second'), true, "day is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'second'), false, "day is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'second'), true, "hour is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'second'), false, "hour is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'second'), true, "minute is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'second'), false, "minute is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'second'), true, "second is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'second'), false, "second is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 0)), 'second'), false, "exact start of second"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 999)), 'second'), false, "exact end of second"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 0)), 'second'), true, "start of next second"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 999)), 'second'), false, "end of previous second"); + test.equal(m.isBefore(m, 'second'), false, "same moments are not before the same second"); + test.equal(+m, +mCopy, "isBefore second should not change moment"); + test.done(); + }, + + "is before millisecond" : function (test) { + test.expect(18); + + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, "millisecond match"); + test.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds'), false, "plural should work"); + test.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, "year is later"); + test.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, "year is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), true, "month is later"); + test.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), false, "month is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), true, "day is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), false, "day is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), true, "hour is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), false, "hour is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), true, "minute is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), false, "minute is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), true, "second is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), false, "second is earlier"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), true, "millisecond is later"); + test.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), false, "millisecond is earlier"); + test.equal(m.isBefore(m, 'millisecond'), false, "same moments are not before the same millisecond"); + test.equal(+m, +mCopy, "isBefore millisecond should not change moment"); + test.done(); + } +}; + +var moment = require('../../moment'); + +exports.isMoment = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "is moment object": function (test) { + test.expect(13); + + var MyObj = function () {}, + extend = function (a, b) { + var i; + for (i in b) { + a[i] = b[i]; + } + return a; + }; + MyObj.prototype.toDate = function () { + return new Date(); + }; + + test.ok(moment.isMoment(moment()), 'simple moment object'); + test.ok(moment.isMoment(moment(null)), 'invalid moment object'); + test.ok(moment.isMoment(extend({}, moment())), 'externally cloned moments are moments'); + test.ok(moment.isMoment(extend({}, moment.utc())), 'externally cloned utc moments are moments'); + + test.ok(!moment.isMoment(new MyObj()), 'myObj is not moment object'); + test.ok(!moment.isMoment(moment), 'moment function is not moment object'); + test.ok(!moment.isMoment(new Date()), 'date object is not moment object'); + test.ok(!moment.isMoment(Object), 'Object is not moment object'); + test.ok(!moment.isMoment('foo'), 'string is not moment object'); + test.ok(!moment.isMoment(1), 'number is not moment object'); + test.ok(!moment.isMoment(NaN), 'NaN is not moment object'); + test.ok(!moment.isMoment(null), 'null is not moment object'); + test.ok(!moment.isMoment(undefined), 'undefined is not moment object'); + + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.isSame = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "is same without units" : function (test) { + test.expect(17); + + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + test.equal(m.isSame(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), false, "year is later"); + test.equal(m.isSame(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), false, "year is earlier"); + test.equal(m.isSame(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), false, "month is later"); + test.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), false, "month is earlier"); + test.equal(m.isSame(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), false, "day is later"); + test.equal(m.isSame(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), false, "day is earlier"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), false, "hour is later"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), false, "hour is earlier"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), false, "minute is later"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), false, "minute is earlier"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), false, "second is later"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), false, "second is earlier"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), true, "millisecond match"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), false, "millisecond is later"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), false, "millisecond is earlier"); + test.equal(m.isSame(m), true, "moments are the same as themselves"); + test.equal(+m, +mCopy, "isSame second should not change moment"); + test.done(); + }, + + "is same year" : function (test) { + test.expect(9); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + test.equal(m.isSame(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), true, "year match"); + test.equal(m.isSame(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'years'), true, "plural should work"); + test.equal(m.isSame(moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'year'), false, "year mismatch"); + test.equal(m.isSame(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), true, "exact start of year"); + test.equal(m.isSame(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), true, "exact end of year"); + test.equal(m.isSame(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), false, "start of next year"); + test.equal(m.isSame(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), false, "end of previous year"); + test.equal(m.isSame(m, 'year'), true, "same moments are in the same year"); + test.equal(+m, +mCopy, "isSame year should not change moment"); + test.done(); + }, + + "is same month" : function (test) { + test.expect(10); + + var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m); + test.equal(m.isSame(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), true, "month match"); + test.equal(m.isSame(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'months'), true, "plural should work"); + test.equal(m.isSame(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), false, "year mismatch"); + test.equal(m.isSame(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), false, "month mismatch"); + test.equal(m.isSame(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), true, "exact start of month"); + test.equal(m.isSame(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), true, "exact end of month"); + test.equal(m.isSame(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), false, "start of next month"); + test.equal(m.isSame(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), false, "end of previous month"); + test.equal(m.isSame(m, 'month'), true, "same moments are in the same month"); + test.equal(+m, +mCopy, "isSame month should not change moment"); + test.done(); + }, + + "is same day" : function (test) { + test.expect(11); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'day'), true, "day match"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'days'), true, "plural should work"); + test.equal(m.isSame(moment(new Date(2012, 1, 2, 7, 8, 9, 10)), 'day'), false, "year mismatch"); + test.equal(m.isSame(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), false, "month mismatch"); + test.equal(m.isSame(moment(new Date(2011, 1, 3, 7, 8, 9, 10)), 'day'), false, "day mismatch"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 0, 0, 0, 0)), 'day'), true, "exact start of day"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 23, 59, 59, 999)), 'day'), true, "exact end of day"); + test.equal(m.isSame(moment(new Date(2011, 1, 3, 0, 0, 0, 0)), 'day'), false, "start of next day"); + test.equal(m.isSame(moment(new Date(2011, 1, 1, 23, 59, 59, 999)), 'day'), false, "end of previous day"); + test.equal(m.isSame(m, 'day'), true, "same moments are in the same day"); + test.equal(+m, +mCopy, "isSame day should not change moment"); + test.done(); + }, + + "is same hour" : function (test) { + test.expect(12); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), true, "hour match"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hours'), true, "plural should work"); + test.equal(m.isSame(moment(new Date(2012, 1, 2, 3, 8, 9, 10)), 'hour'), false, "year mismatch"); + test.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 8, 9, 10)), 'hour'), false, "month mismatch"); + test.equal(m.isSame(moment(new Date(2011, 1, 3, 3, 8, 9, 10)), 'hour'), false, "day mismatch"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 8, 9, 10)), 'hour'), false, "hour mismatch"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 0, 0, 0)), 'hour'), true, "exact start of hour"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 59, 59, 999)), 'hour'), true, "exact end of hour"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hour'), false, "start of next hour"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 2, 59, 59, 999)), 'hour'), false, "end of previous hour"); + test.equal(m.isSame(m, 'hour'), true, "same moments are in the same hour"); + test.equal(+m, +mCopy, "isSame hour should not change moment"); + test.done(); + }, + + "is same minute" : function (test) { + test.expect(13); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minute'), true, "minute match"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minutes'), true, "plural should work"); + test.equal(m.isSame(moment(new Date(2012, 1, 2, 3, 4, 9, 10)), 'minute'), false, "year mismatch"); + test.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), false, "month mismatch"); + test.equal(m.isSame(moment(new Date(2011, 1, 3, 3, 4, 9, 10)), 'minute'), false, "day mismatch"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 4, 9, 10)), 'minute'), false, "hour mismatch"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 5, 9, 10)), 'minute'), false, "minute mismatch"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 0, 0)), 'minute'), true, "exact start of minute"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 59, 999)), 'minute'), true, "exact end of minute"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 5, 0, 0)), 'minute'), false, "start of next minute"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 3, 59, 999)), 'minute'), false, "end of previous minute"); + test.equal(m.isSame(m, 'minute'), true, "same moments are in the same minute"); + test.equal(+m, +mCopy, "isSame minute should not change moment"); + test.done(); + }, + + "is same second" : function (test) { + test.expect(14); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'second'), true, "second match"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'seconds'), true, "plural should work"); + test.equal(m.isSame(moment(new Date(2012, 1, 2, 3, 4, 5, 10)), 'second'), false, "year mismatch"); + test.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), false, "month mismatch"); + test.equal(m.isSame(moment(new Date(2011, 1, 3, 3, 4, 5, 10)), 'second'), false, "day mismatch"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 4, 5, 10)), 'second'), false, "hour mismatch"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 5, 5, 10)), 'second'), false, "minute mismatch"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 6, 10)), 'second'), false, "second mismatch"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 0)), 'second'), true, "exact start of second"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 999)), 'second'), true, "exact end of second"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 6, 0)), 'second'), false, "start of next second"); + test.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 4, 999)), 'second'), false, "end of previous second"); + test.equal(m.isSame(m, 'second'), true, "same moments are in the same second"); + test.equal(+m, +mCopy, "isSame second should not change moment"); + test.done(); + }, + + "is same millisecond" : function (test) { + test.expect(18); + + var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, "millisecond match"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds'), true, "plural should work"); + test.equal(m.isSame(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, "year is later"); + test.equal(m.isSame(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, "year is earlier"); + test.equal(m.isSame(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), false, "month is later"); + test.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), false, "month is earlier"); + test.equal(m.isSame(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), false, "day is later"); + test.equal(m.isSame(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), false, "day is earlier"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), false, "hour is later"); + test.equal(m.isSame(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), false, "hour is earlier"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), false, "minute is later"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), false, "minute is earlier"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), false, "second is later"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), false, "second is earlier"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), false, "millisecond is later"); + test.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), false, "millisecond is earlier"); + test.equal(m.isSame(m, 'millisecond'), true, "same moments are in the same millisecond"); + test.equal(+m, +mCopy, "isSame millisecond should not change moment"); + test.done(); + }, + + "is same with zone'd moments" : function (test) { + test.expect(3); + test.ok(moment.parseZone('2013-02-01T-05:00').isSame(moment('2013-02-01'), 'year'), "zoned vs local moment"); + test.ok(moment('2013-02-01').isSame(moment('2013-02-01').zone('-05:00'), 'year'), "local vs zoned moment"); + test.ok(moment.parseZone('2013-02-01T-05:00').isSame(moment.parseZone('2013-02-01T-06:30'), 'year'), + "zoned vs (differently) zoned moment"); + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.isValid = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "array bad month" : function (test) { + test.expect(2); + test.equal(moment([2010, -1]).isValid(), false, 'month -1 invalid'); + test.equal(moment([2100, 12]).isValid(), false, 'month 12 invalid'); + + test.done(); + }, + + "array good month" : function (test) { + test.expect(12 * 2); + + for (var i = 0; i < 12; i++) { + test.equal(moment([2010, i]).isValid(), true, 'month ' + i); + test.equal(moment.utc([2010, i]).isValid(), true, 'month ' + i); + } + + test.done(); + }, + + "array bad date" : function (test) { + var tests = [ + moment([2010, 0, 0]), + moment([2100, 0, 32]), + moment.utc([2010, 0, 0]), + moment.utc([2100, 0, 32]) + ], + i, m; + + test.expect(tests.length); + + for (i in tests) { + m = tests[i]; + test.equal(m.isValid(), false); + } + + test.done(); + }, + + "array bad date leap year" : function (test) { + test.expect(8); + + test.equal(moment([2010, 1, 29]).isValid(), false, '2010 feb 29'); + test.equal(moment([2100, 1, 29]).isValid(), false, '2100 feb 29'); + test.equal(moment([2008, 1, 30]).isValid(), false, '2008 feb 30'); + test.equal(moment([2000, 1, 30]).isValid(), false, '2000 feb 30'); + + test.equal(moment.utc([2010, 1, 29]).isValid(), false, 'utc 2010 feb 29'); + test.equal(moment.utc([2100, 1, 29]).isValid(), false, 'utc 2100 feb 29'); + test.equal(moment.utc([2008, 1, 30]).isValid(), false, 'utc 2008 feb 30'); + test.equal(moment.utc([2000, 1, 30]).isValid(), false, 'utc 2000 feb 30'); + + test.done(); + }, + + "string + formats bad date" : function (test) { + test.equal(moment('2020-00-00', []).isValid(), false, 'invalid on empty array'); + test.equal(moment('2020-00-00', ['YYYY-MM-DD', 'DD-MM-YYYY']).isValid(), false, 'invalid on all in array'); + test.equal(moment('2020-00-00', ['DD-MM-YYYY', 'YYYY-MM-DD']).isValid(), false, 'invalid on all in array'); + test.equal(moment('2020-01-01', ['YYYY-MM-DD', 'DD-MM-YYYY']).isValid(), true, 'valid on first'); + test.equal(moment('2020-01-01', ['DD-MM-YYYY', 'YYYY-MM-DD']).isValid(), true, 'valid on last'); + test.equal(moment('2020-01-01', ['YYYY-MM-DD', 'YYYY-DD-MM']).isValid(), true, 'valid on both'); + test.equal(moment('2020-13-01', ['YYYY-MM-DD', 'YYYY-DD-MM']).isValid(), true, 'valid on last'); + + test.equal(moment('12-13-2012', ['DD-MM-YYYY', 'YYYY-MM-DD']).isValid(), false, 'month rollover'); + test.equal(moment('12-13-2012', ['DD-MM-YYYY', 'DD-MM-YYYY']).isValid(), false, 'month rollover'); + test.equal(moment('38-12-2012', ['DD-MM-YYYY']).isValid(), false, 'day rollover'); + + test.done(); + }, + + "string nonsensical with format" : function (test) { + test.expect(2); + + test.equal(moment('fail', "MM-DD-YYYY").isValid(), false, 'string "fail" with format "MM-DD-YYYY"'); + test.equal(moment("xx-xx-2001", 'DD-MM-YYY').isValid(), true, 'string "xx-xx-2001" with format "MM-DD-YYYY"'); + test.done(); + }, + + "string with bad month name" : function (test) { + moment.locale('en'); + + test.equal(moment('01-Nam-2012', 'DD-MMM-YYYY').isValid(), false, '"Nam" is an invalid month'); + test.equal(moment('01-Aug-2012', 'DD-MMM-YYYY').isValid(), true, '"Aug" is a valid month'); + + test.done(); + }, + + "string with spaceless format" : function (test) { + test.expect(1); + + test.equal(moment('10Sep2001', 'DDMMMYYYY').isValid(), true, "Parsing 10Sep2001 should result in a valid date"); + + test.done(); + }, + + "invalid string iso 8601" : function (test) { + var tests = [ + '2010-00-00', + '2010-01-00', + '2010-01-40', + '2010-01-01T24', + '2010-01-01T23:60', + '2010-01-01T23:59:60' + ], i; + + test.expect(tests.length * 2); + + for (i = 0; i < tests.length; i++) { + test.equal(moment(tests[i]).isValid(), false, tests[i] + ' should be invalid'); + test.equal(moment.utc(tests[i]).isValid(), false, tests[i] + ' should be invalid'); + } + test.done(); + }, + + "invalid string iso 8601 + timezone" : function (test) { + var tests = [ + '2010-00-00T+00:00', + '2010-01-00T+00:00', + '2010-01-40T+00:00', + '2010-01-40T24+00:00', + '2010-01-40T23:60+00:00', + '2010-01-40T23:59:60+00:00', + '2010-01-40T23:59:59.9999+00:00' + ], i; + + test.expect(tests.length * 2); + + for (i = 0; i < tests.length; i++) { + test.equal(moment(tests[i]).isValid(), false, tests[i] + ' should be invalid'); + test.equal(moment.utc(tests[i]).isValid(), false, tests[i] + ' should be invalid'); + } + test.done(); + }, + + "valid string iso 8601 + timezone" : function (test) { + var tests = [ + '2010-01-01', + '2010-01-30', + '2010-01-30T23+00:00', + '2010-01-30T23:59+00:00', + '2010-01-30T23:59:59+00:00', + '2010-01-30T23:59:59.999+00:00', + '2010-01-30T23:59:59.999-07:00', + '2010-01-30T00:00:00.000+07:00', + '2010-01-30T00:00:00.000+07' + ], i; + + test.expect(tests.length * 2); + + for (i = 0; i < tests.length; i++) { + test.equal(moment(tests[i]).isValid(), true, tests[i] + ' should be valid'); + test.equal(moment.utc(tests[i]).isValid(), true, tests[i] + ' should be valid'); + } + test.done(); + }, + + "invalidAt" : function (test) { + test.expect(7); + test.equal(moment([2000, 12]).invalidAt(), 1, 'month 12 is invalid: 0-11'); + test.equal(moment([2000, 1, 30]).invalidAt(), 2, '30 is not a valid february day'); + test.equal(moment([2000, 1, 29, 24]).invalidAt(), 3, '24 is invalid hour'); + test.equal(moment([2000, 1, 29, 23, 60]).invalidAt(), 4, '60 is invalid minute'); + test.equal(moment([2000, 1, 29, 23, 59, 60]).invalidAt(), 5, '60 is invalid second'); + test.equal(moment([2000, 1, 29, 23, 59, 59, 1000]).invalidAt(), 6, '1000 is invalid millisecond'); + test.equal(moment([2000, 1, 29, 23, 59, 59, 999]).invalidAt(), -1, '-1 if everything is fine'); + test.done(); + }, + + "valid Unix timestamp" : function (test) { + test.expect(21); + test.equal(moment(1371065286, "X").isValid(), true, 'number integer'); + test.equal(moment(1379066897.0, "X").isValid(), true, 'number whole 1dp'); + test.equal(moment(1379066897.7, "X").isValid(), true, 'number 1dp'); + test.equal(moment(1379066897.00, "X").isValid(), true, 'number whole 2dp'); + test.equal(moment(1379066897.07, "X").isValid(), true, 'number 2dp'); + test.equal(moment(1379066897.17, "X").isValid(), true, 'number 2dp'); + test.equal(moment(1379066897.000, "X").isValid(), true, 'number whole 3dp'); + test.equal(moment(1379066897.007, "X").isValid(), true, 'number 3dp'); + test.equal(moment(1379066897.017, "X").isValid(), true, 'number 3dp'); + test.equal(moment(1379066897.157, "X").isValid(), true, 'number 3dp'); + test.equal(moment("1371065286", "X").isValid(), true, 'string integer'); + test.equal(moment("1379066897.", "X").isValid(), true, 'string trailing .'); + test.equal(moment("1379066897.0", "X").isValid(), true, 'string whole 1dp'); + test.equal(moment("1379066897.7", "X").isValid(), true, 'string 1dp'); + test.equal(moment("1379066897.00", "X").isValid(), true, 'string whole 2dp'); + test.equal(moment("1379066897.07", "X").isValid(), true, 'string 2dp'); + test.equal(moment("1379066897.17", "X").isValid(), true, 'string 2dp'); + test.equal(moment("1379066897.000", "X").isValid(), true, 'string whole 3dp'); + test.equal(moment("1379066897.007", "X").isValid(), true, 'string 3dp'); + test.equal(moment("1379066897.017", "X").isValid(), true, 'string 3dp'); + test.equal(moment("1379066897.157", "X").isValid(), true, 'string 3dp'); + test.done(); + }, + + "invalid Unix timestamp" : function (test) { + test.expect(8); + test.equal(moment(undefined, "X").isValid(), false, 'undefined'); + test.equal(moment("undefined", "X").isValid(), false, 'string undefined'); + try { + test.equal(moment(null, "X").isValid(), false, 'null'); + } catch (e) { + test.ok(true, 'null'); + } + + test.equal(moment("null", "X").isValid(), false, 'string null'); + test.equal(moment([], "X").isValid(), false, 'array'); + test.equal(moment("{}", "X").isValid(), false, 'object'); + try { + test.equal(moment("", "X").isValid(), false, 'string empty'); + } catch (e) { + test.ok(true, 'string empty'); + } + + test.equal(moment(" ", "X").isValid(), false, 'string space'); + test.done(); + }, + + "empty" : function (test) { + test.equal(moment(null).isValid(), false, 'null'); + test.equal(moment('').isValid(), false, 'empty string'); + + test.equal(moment(null, 'YYYY').isValid(), false, 'format + null'); + test.equal(moment('', 'YYYY').isValid(), false, 'format + empty string'); + test.equal(moment(' ', 'YYYY').isValid(), false, 'format + empty when trimmed'); + test.done(); + }, + + "days of the year" : function (test) { + test.equal(moment('2010 300', 'YYYY DDDD').isValid(), true, 'day 300 of year valid'); + test.equal(moment('2010 365', 'YYYY DDDD').isValid(), true, 'day 365 of year valid'); + test.equal(moment('2010 366', 'YYYY DDDD').isValid(), false, 'day 366 of year invalid'); + test.equal(moment('2012 365', 'YYYY DDDD').isValid(), true, 'day 365 of leap year valid'); + test.equal(moment('2012 366', 'YYYY DDDD').isValid(), true, 'day 366 of leap year valid'); + test.equal(moment('2012 367', 'YYYY DDDD').isValid(), false, 'day 367 of leap year invalid'); + + test.done(); + }, + + "oddball permissiveness" : function (test) { + //https://github.com/moment/moment/issues/1128 + test.ok(moment("2010-10-3199", ["MM/DD/YYYY", "MM-DD-YYYY", "YYYY-MM-DD"]).isValid()); + + //https://github.com/moment/moment/issues/1122 + test.ok(moment("3:25", ["h:mma", "hh:mma", "H:mm", "HH:mm"]).isValid()); + + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.leapyear = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "leap year" : function (test) { + test.expect(4); + + test.equal(moment([2010, 0, 1]).isLeapYear(), false, '2010'); + test.equal(moment([2100, 0, 1]).isLeapYear(), false, '2100'); + test.equal(moment([2008, 0, 1]).isLeapYear(), true, '2008'); + test.equal(moment([2000, 0, 1]).isLeapYear(), true, '2000'); + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.listers = { + setUp : function (cb) { + moment.locale('en'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "default" : function (test) { + test.expect(5); + test.deepEqual(moment.months(), ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]); + test.deepEqual(moment.monthsShort(), ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]); + test.deepEqual(moment.weekdays(), ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]); + test.deepEqual(moment.weekdaysShort(), ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]); + test.deepEqual(moment.weekdaysMin(), ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]); + test.done(); + }, + + "index" : function (test) { + test.equal(moment.months(0), "January"); + test.equal(moment.months(2), "March"); + test.equal(moment.monthsShort(0), "Jan"); + test.equal(moment.monthsShort(2), "Mar"); + test.equal(moment.weekdays(0), "Sunday"); + test.equal(moment.weekdays(2), "Tuesday"); + test.equal(moment.weekdaysShort(0), "Sun"); + test.equal(moment.weekdaysShort(2), "Tue"); + test.equal(moment.weekdaysMin(0), "Su"); + test.equal(moment.weekdaysMin(2), "Tu"); + test.done(); + }, + + "localized" : function (test) { + var months = "one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve".split('_'), + monthsShort = "on_tw_th_fo_fi_si_se_ei_ni_te_el_tw".split("_"), + weekdays = "one_two_three_four_five_six_seven".split("_"), + weekdaysShort = "on_tw_th_fo_fi_si_se".split("_"), + weekdaysMin = "1_2_3_4_5_6_7".split("_"); + + moment.locale('numerologists', { + months : months, + monthsShort : monthsShort, + weekdays : weekdays, + weekdaysShort: weekdaysShort, + weekdaysMin: weekdaysMin + }); + + test.deepEqual(moment.months(), months); + test.deepEqual(moment.monthsShort(), monthsShort); + test.deepEqual(moment.weekdays(), weekdays); + test.deepEqual(moment.weekdaysShort(), weekdaysShort); + test.deepEqual(moment.weekdaysMin(), weekdaysMin); + + test.equal(moment.months(0), "one"); + test.equal(moment.monthsShort(0), "on"); + test.equal(moment.weekdays(0), "one"); + test.equal(moment.weekdaysShort(0), "on"); + test.equal(moment.weekdaysMin(0), "1"); + + test.equal(moment.months(2), "three"); + test.equal(moment.monthsShort(2), "th"); + test.equal(moment.weekdays(2), "three"); + test.equal(moment.weekdaysShort(2), "th"); + test.equal(moment.weekdaysMin(2), "3"); + + test.done(); + }, + + "with functions" : function (test) { + var monthsShort = "one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve".split('_'), + monthsShortWeird = "onesy_twosy_threesy_foursy_fivesy_sixsy_sevensy_eightsy_ninesy_tensy_elevensy_twelvesy".split('_'); + + moment.locale("difficult", { + + monthsShort: function (m, format) { + var arr = format.match(/-MMM-/) ? monthsShortWeird : monthsShort; + return arr[m.month()]; + } + }); + + test.expect(6); + test.deepEqual(moment.monthsShort(), monthsShort); + test.deepEqual(moment.monthsShort('MMM'), monthsShort); + test.deepEqual(moment.monthsShort('-MMM-'), monthsShortWeird); + + test.deepEqual(moment.monthsShort('MMM', 2), 'three'); + test.deepEqual(moment.monthsShort('-MMM-', 2), 'threesy'); + test.deepEqual(moment.monthsShort(2), 'three'); + + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.locale = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + moment.locale('en'); + done(); + }, + + "library getters and setters" : function (test) { + var r = moment.locale('en'); + + test.equal(r, 'en', 'locale should return en by default'); + test.equal(moment.locale(), 'en', 'locale should return en by default'); + + moment.locale('fr'); + test.equal(moment.locale(), 'fr', 'locale should return the changed locale'); + + moment.locale('en-gb'); + test.equal(moment.locale(), 'en-gb', 'locale should return the changed locale'); + + moment.locale('en'); + test.equal(moment.locale(), 'en', 'locale should reset'); + + moment.locale('does-not-exist'); + test.equal(moment.locale(), 'en', 'locale should reset'); + + moment.locale('EN'); + test.equal(moment.locale(), 'en', 'Normalize locale key case'); + + moment.locale('EN_gb'); + test.equal(moment.locale(), 'en-gb', 'Normalize locale key underscore'); + + test.done(); + }, + + "library setter array of locales" : function (test) { + test.equal(moment.locale(['non-existent', 'fr', 'also-non-existent']), 'fr', "passing an array uses the first valid locale"); + test.equal(moment.locale(['es', 'fr', 'also-non-existent']), 'es', "passing an array uses the first valid locale"); + test.done(); + }, + + "library setter locale substrings" : function (test) { + test.equal(moment.locale('fr-crap'), 'fr', "use substrings"); + test.equal(moment.locale('fr-does-not-exist'), 'fr', "uses deep substrings"); + test.equal(moment.locale('fr-CA-does-not-exist'), 'fr-ca', "uses deepest substring"); + test.done(); + }, + + "library getter locale array and substrings" : function (test) { + test.equals(moment.locale(['en-CH', 'fr']), 'en', "prefer root locale to shallower ones"); + test.equals(moment.locale(['en-gb-leeds', 'en-CA']), 'en-gb', "prefer root locale to shallower ones"); + test.equals(moment.locale(['en-fake', 'en-CA']), 'en-ca', "prefer alternatives with shared roots"); + test.equals(moment.locale(['en-fake', 'en-fake2', 'en-ca']), 'en-ca', "prefer alternatives with shared roots"); + test.equals(moment.locale(['fake-CA', 'fake-MX', 'fr']), 'fr', "always find something if possible"); + test.equals(moment.locale(['fake-CA', 'fake-MX', 'fr']), 'fr', "always find something if possible"); + test.equals(moment.locale(['fake-CA', 'fake-MX', 'fr-fake-fake-fake']), 'fr', "always find something if possible"); + test.equals(moment.locale(['en', 'en-CA']), 'en', "prefer earlier if it works"); + test.done(); + }, + + "library ensure inheritance" : function (test) { + moment.locale('made-up', { + // I put them out of order + months : "February_March_April_May_June_July_August_September_October_November_December_January".split("_") + // the rest of the properties should be inherited. + }); + + test.equal(moment([2012, 5, 6]).format('MMMM'), 'July', 'Override some of the configs'); + test.equal(moment([2012, 5, 6]).format('MMM'), 'Jun', 'But not all of them'); + + test.done(); + }, + + "library ensure inheritance LT L LL LLL LLLL" : function (test) { + var locale = 'test-inherit-lt'; + + moment.defineLocale(locale, { + longDateFormat : { + LT : "-[LT]-", + L : "-[L]-", + LL : "-[LL]-", + LLL : "-[LLL]-", + LLLL : "-[LLLL]-" + }, + calendar : { + sameDay : '[sameDay] LT', + nextDay : '[nextDay] L', + nextWeek : '[nextWeek] LL', + lastDay : '[lastDay] LLL', + lastWeek : '[lastWeek] LLLL', + sameElse : 'L' + } + }); + + moment.locale('es'); + + test.equal(moment().locale(locale).calendar(), "sameDay -LT-", "Should use instance locale in LT formatting"); + test.equal(moment().add(1, 'days').locale(locale).calendar(), "nextDay -L-", "Should use instance locale in L formatting"); + test.equal(moment().add(-1, 'days').locale(locale).calendar(), "lastDay -LLL-", "Should use instance locale in LL formatting"); + test.equal(moment().add(4, 'days').locale(locale).calendar(), "nextWeek -LL-", "Should use instance locale in LLL formatting"); + test.equal(moment().add(-4, 'days').locale(locale).calendar(), "lastWeek -LLLL-", "Should use instance locale in LLLL formatting"); + + test.done(); + }, + + "library localeData" : function (test) { + test.expect(3); + moment.locale('en'); + + var jan = moment([2000, 0]); + + test.equal(moment.localeData().months(jan), 'January', 'no arguments returns global'); + test.equal(moment.localeData('zh-cn').months(jan), '一月', 'a string returns the locale based on key'); + test.equal(moment.localeData(moment().locale('es')).months(jan), 'enero', "if you pass in a moment it uses the moment's locale"); + + test.done(); + }, + + "library deprecations" : function (test) { + moment.lang("dude", {months: ["Movember"]}); + test.equal(moment.locale(), "dude", "setting the lang sets the locale"); + test.equal(moment.lang(), moment.locale()); + test.equal(moment.langData(), moment.localeData(), "langData is localeData"); + test.done(); + }, + + "defineLocale" : function (test) { + moment.locale("en"); + moment.defineLocale("dude", {months: ["Movember"]}); + test.equal(moment().locale(), "dude", "defineLocale also sets it"); + test.equal(moment().locale("dude").locale(), "dude", "defineLocale defines a locale"); + test.done(); + }, + + "library convenience" : function (test) { + moment.locale("something", {week: {dow: 3}}); + moment.locale("something"); + test.equal(moment.locale(), "something", "locale can be used to create the locale too"); + test.done(); + }, + + "instance locale method" : function (test) { + moment.locale('en'); + + test.equal(moment([2012, 5, 6]).format('MMMM'), 'June', 'Normally default to global'); + test.equal(moment([2012, 5, 6]).locale('es').format('MMMM'), 'junio', 'Use the instance specific locale'); + test.equal(moment([2012, 5, 6]).format('MMMM'), 'June', 'Using an instance specific locale does not affect other moments'); + + test.done(); + }, + + "instance locale method with array" : function (test) { + var m = moment().locale(['non-existent', 'fr', 'also-non-existent']); + test.equal(m.locale(), 'fr', "passing an array uses the first valid locale"); + m = moment().locale(['es', 'fr', 'also-non-existent']); + test.equal(m.locale(), 'es', "passing an array uses the first valid locale"); + test.done(); + }, + + "instance getter locale substrings" : function (test) { + var m = moment(); + + m.locale('fr-crap'); + test.equal(m.locale(), 'fr', "use substrings"); + + m.locale('fr-does-not-exist'); + test.equal(m.locale(), 'fr', "uses deep substrings"); + + test.done(); + }, + + "instance locale persists with manipulation" : function (test) { + test.expect(3); + moment.locale('en'); + + test.equal(moment([2012, 5, 6]).locale('es').add({days: 1}).format('MMMM'), 'junio', 'With addition'); + test.equal(moment([2012, 5, 6]).locale('es').day(0).format('MMMM'), 'junio', 'With day getter'); + test.equal(moment([2012, 5, 6]).locale('es').endOf('day').format('MMMM'), 'junio', 'With endOf'); + + test.done(); + }, + + "instance locale persists with cloning" : function (test) { + test.expect(2); + moment.locale('en'); + + var a = moment([2012, 5, 6]).locale('es'), + b = a.clone(), + c = moment(a); + + test.equal(b.format('MMMM'), 'junio', 'using moment.fn.clone()'); + test.equal(b.format('MMMM'), 'junio', 'using moment()'); + + test.done(); + }, + + "duration locale method" : function (test) { + test.expect(3); + moment.locale('en'); + + test.equal(moment.duration({seconds: 44}).humanize(), 'a few seconds', 'Normally default to global'); + test.equal(moment.duration({seconds: 44}).locale('es').humanize(), 'unos segundos', 'Use the instance specific locale'); + test.equal(moment.duration({seconds: 44}).humanize(), 'a few seconds', 'Using an instance specific locale does not affect other durations'); + + test.done(); + }, + + "duration locale persists with cloning" : function (test) { + test.expect(1); + moment.locale('en'); + + var a = moment.duration({seconds: 44}).locale('es'), + b = moment.duration(a); + + test.equal(b.humanize(), 'unos segundos', 'using moment.duration()'); + test.done(); + }, + + "changing the global locale doesn't affect existing duration instances" : function (test) { + var mom = moment.duration(); + moment.locale('fr'); + test.equal('en', mom.locale()); + test.done(); + }, + + "duration deprecations" : function (test) { + test.equal(moment.duration().lang(), moment.duration().localeData(), "duration.lang is the same as duration.localeData"); + test.done(); + }, + + "from relative time future" : function (test) { + var start = moment([2007, 1, 28]); + + test.equal(start.from(moment([2007, 1, 28]).subtract({s: 44})), "in a few seconds", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).subtract({s: 45})), "in a minute", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).subtract({s: 89})), "in a minute", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).subtract({s: 90})), "in 2 minutes", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).subtract({m: 44})), "in 44 minutes", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).subtract({m: 45})), "in an hour", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).subtract({m: 89})), "in an hour", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).subtract({m: 90})), "in 2 hours", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).subtract({h: 5})), "in 5 hours", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).subtract({h: 21})), "in 21 hours", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).subtract({h: 22})), "in a day", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).subtract({h: 35})), "in a day", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).subtract({h: 36})), "in 2 days", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).subtract({d: 1})), "in a day", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).subtract({d: 5})), "in 5 days", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).subtract({d: 25})), "in 25 days", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).subtract({d: 26})), "in a month", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).subtract({d: 30})), "in a month", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).subtract({d: 45})), "in a month", "45 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).subtract({d: 47})), "in 2 months", "47 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).subtract({d: 74})), "in 2 months", "74 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).subtract({d: 78})), "in 3 months", "78 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).subtract({M: 1})), "in a month", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).subtract({M: 5})), "in 5 months", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).subtract({d: 315})), "in 10 months", "315 days = 10 months"); + test.equal(start.from(moment([2007, 1, 28]).subtract({d: 344})), "in a year", "344 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).subtract({d: 345})), "in a year", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).subtract({d: 548})), "in 2 years", "548 days = in 2 years"); + test.equal(start.from(moment([2007, 1, 28]).subtract({y: 1})), "in a year", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).subtract({y: 5})), "in 5 years", "5 years = 5 years"); + + test.done(); + }, + + "from relative time past" : function (test) { + var start = moment([2007, 1, 28]); + + test.equal(start.from(moment([2007, 1, 28]).add({s: 44})), "a few seconds ago", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45})), "a minute ago", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89})), "a minute ago", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90})), "2 minutes ago", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44})), "44 minutes ago", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45})), "an hour ago", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89})), "an hour ago", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90})), "2 hours ago", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5})), "5 hours ago", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21})), "21 hours ago", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22})), "a day ago", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35})), "a day ago", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36})), "2 days ago", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1})), "a day ago", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5})), "5 days ago", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25})), "25 days ago", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26})), "a month ago", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30})), "a month ago", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43})), "a month ago", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46})), "2 months ago", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74})), "2 months ago", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76})), "3 months ago", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1})), "a month ago", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5})), "5 months ago", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 315})), "10 months ago", "315 days = 10 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 344})), "a year ago", "344 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345})), "a year ago", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548})), "2 years ago", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1})), "a year ago", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5})), "5 years ago", "5 years = 5 years"); + + test.done(); + }, + + "instance locale used with from" : function (test) { + test.expect(2); + moment.locale('en'); + + var a = moment([2012, 5, 6]).locale('es'), + b = moment([2012, 5, 7]); + + test.equal(a.from(b), 'hace un día', 'preserve locale of first moment'); + test.equal(b.from(a), 'in a day', 'do not preserve locale of second moment'); + + test.done(); + }, + + "instance localeData" : function (test) { + moment.defineLocale("dude", {week: {dow: 3}}); + test.equal(moment().locale("dude").localeData()._week.dow, 3); + test.done(); + }, + + "month name callback function" : function (test) { + function fakeReplace(m, format) { + if (/test/.test(format)) { + return "test"; + } + if (m.date() === 1) { + return "date"; + } + return 'default'; + } + + moment.locale('made-up-2', { + months : fakeReplace, + monthsShort : fakeReplace, + weekdays : fakeReplace, + weekdaysShort : fakeReplace, + weekdaysMin : fakeReplace + }); + + test.equal(moment().format('[test] dd ddd dddd MMM MMMM'), 'test test test test test test', 'format month name function should be able to access the format string'); + test.equal(moment([2011, 0, 1]).format('dd ddd dddd MMM MMMM'), 'date date date date date', 'format month name function should be able to access the moment object'); + test.equal(moment([2011, 0, 2]).format('dd ddd dddd MMM MMMM'), 'default default default default default', 'format month name function should be able to access the moment object'); + + test.done(); + }, + + "changing parts of a locale config" : function (test) { + test.expect(2); + + moment.locale('partial-lang', { + months : 'a b c d e f g h i j k l'.split(' ') + }); + + test.equal(moment([2011, 0, 1]).format('MMMM'), 'a', 'should be able to set locale values when creating the localeuage'); + + moment.locale('partial-lang', { + monthsShort : 'A B C D E F G H I J K L'.split(' ') + }); + + test.equal(moment([2011, 0, 1]).format('MMMM MMM'), 'a A', 'should be able to set locale values after creating the localeuage'); + + test.done(); + }, + + "start/endOf week feature for first-day-is-monday locales" : function (test) { + test.expect(2); + + moment.locale('monday-lang', { + week : { + dow : 1 // Monday is the first day of the week + } + }); + + moment.locale('monday-lang'); + test.equal(moment([2013, 0, 1]).startOf('week').day(), 1, 'for locale monday-lang first day of the week should be monday'); + test.equal(moment([2013, 0, 1]).endOf('week').day(), 0, 'for locale monday-lang last day of the week should be sunday'); + + test.done(); + }, + + "meridiem parsing" : function (test) { + test.expect(2); + + moment.locale('meridiem-parsing', { + meridiemParse : /[bd]/i, + isPM : function (input) { + return input === 'b'; + } + }); + + moment.locale('meridiem-parsing'); + test.equal(moment('2012-01-01 3b', 'YYYY-MM-DD ha').hour(), 15, 'Custom parsing of meridiem should work'); + test.equal(moment('2012-01-01 3d', 'YYYY-MM-DD ha').hour(), 3, 'Custom parsing of meridiem should work'); + + test.done(); + }, + + "invalid date formatting" : function (test) { + moment.locale('has-invalid', { + invalidDate: 'KHAAAAAAAAAAAN!' + }); + + test.equal(moment.invalid().format(), "KHAAAAAAAAAAAN!"); + test.equal(moment.invalid().format('YYYY-MM-DD'), "KHAAAAAAAAAAAN!"); + + test.done(); + }, + + "return locale name" : function (test) { + test.expect(1); + + var registered = moment.locale('return-this', {}); + + test.equal(registered, 'return-this', 'returns the locale configured'); + + test.done(); + }, + + "changing the global locale doesn't affect existing instances" : function (test) { + var mom = moment(); + moment.locale('fr'); + test.equal('en', mom.locale()); + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.minMax = { + setUp : function (cb) { + moment.locale('en'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "min" : function (test) { + var now = moment(), + future = now.clone().add(1, 'month'), + past = now.clone().subtract(1, 'month'); + + test.equal(moment.min(now, future, past), past, "min(now, future, past)"); + test.equal(moment.min(future, now, past), past, "min(future, now, past)"); + test.equal(moment.min(future, past, now), past, "min(future, past, now)"); + test.equal(moment.min(past, future, now), past, "min(past, future, now)"); + test.equal(moment.min(now, past), past, "min(now, past)"); + test.equal(moment.min(past, now), past, "min(past, now)"); + test.equal(moment.min(now), now, "min(now, past)"); + + test.equal(moment.min([now, future, past]), past, "min([now, future, past])"); + test.equal(moment.min([now, past]), past, "min(now, past)"); + test.equal(moment.min([now]), now, "min(now)"); + + test.done(); + }, + + "max" : function (test) { + var now = moment(), + future = now.clone().add(1, 'month'), + past = now.clone().subtract(1, 'month'); + + test.equal(moment.max(now, future, past), future, "max(now, future, past)"); + test.equal(moment.max(future, now, past), future, "max(future, now, past)"); + test.equal(moment.max(future, past, now), future, "max(future, past, now)"); + test.equal(moment.max(past, future, now), future, "max(past, future, now)"); + test.equal(moment.max(now, past), now, "max(now, past)"); + test.equal(moment.max(past, now), now, "max(past, now)"); + test.equal(moment.max(now), now, "max(now, past)"); + + test.equal(moment.max([now, future, past]), future, "max([now, future, past])"); + test.equal(moment.max([now, past]), now, "max(now, past)"); + test.equal(moment.max([now]), now, "max(now)"); + + test.done(); + } + +}; + +var moment = require("../../moment"); + +exports.mutable = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "manipulation methods" : function (test) { + var m = moment(); + + test.equal(m, m.year(2011), 'year() should be mutable'); + test.equal(m, m.month(1), 'month() should be mutable'); + test.equal(m, m.hours(7), 'hours() should be mutable'); + test.equal(m, m.minutes(33), 'minutes() should be mutable'); + test.equal(m, m.seconds(44), 'seconds() should be mutable'); + test.equal(m, m.milliseconds(55), 'milliseconds() should be mutable'); + test.equal(m, m.day(2), 'day() should be mutable'); + test.equal(m, m.startOf('week'), 'startOf() should be mutable'); + test.equal(m, m.add(1, 'days'), 'add() should be mutable'); + test.equal(m, m.subtract(2, 'years'), 'subtract() should be mutable'); + test.equal(m, m.local(), 'local() should be mutable'); + test.equal(m, m.utc(), 'utc() should be mutable'); + + test.done(); + }, + + "non mutable methods" : function (test) { + var m = moment(); + test.notEqual(m, m.clone(), "clone() should not be mutable"); + + test.done(); + } +}; + +/*global require, exports */ + +var moment = require("../../moment"); + +exports.normalizeUnits = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "normalize units" : function (test) { + var fullKeys = ["year", "quarter", "month", "isoWeek", "week", "day", "hour", "minute", "second", "millisecond", "date", 'dayOfYear', 'weekday', 'isoWeekday', 'weekYear', 'isoWeekYear'], + aliases = ["y", "Q", "M", "W", "w", "d", "h", "m", "s", "ms", "D", 'DDD', 'e', 'E', 'gg', 'GG'], + length = fullKeys.length, + fullKey, + fullKeyCaps, + fullKeyPlural, + fullKeyCapsPlural, + fullKeyLower, + alias, + index; + + for (index = 0; index < length; index += 1) { + fullKey = fullKeys[index]; + fullKeyCaps = fullKey.toUpperCase(); + fullKeyLower = fullKey.toLowerCase(); + fullKeyPlural = fullKey + "s"; + fullKeyCapsPlural = fullKeyCaps + "s"; + alias = aliases[index]; + test.equal(moment.normalizeUnits(fullKey), fullKey, "Testing full key " + fullKey); + test.equal(moment.normalizeUnits(fullKeyCaps), fullKey, "Testing full key capitalised " + fullKey); + test.equal(moment.normalizeUnits(fullKeyPlural), fullKey, "Testing full key plural " + fullKey); + test.equal(moment.normalizeUnits(fullKeyCapsPlural), fullKey, "Testing full key capitalised and plural " + fullKey); + test.equal(moment.normalizeUnits(alias), fullKey, "Testing alias " + fullKey); + } + + test.done(); + } +}; + +var moment = require('../../moment'), + flags = function () { + return moment.apply(null, arguments).parsingFlags(); + }; + +exports.parsingFlags = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + + 'overflow with array' : function (test) { + //months + test.equal(flags([2010, 0]).overflow, -1, 'month 0 valid'); + test.equal(flags([2010, 1]).overflow, -1, 'month 1 valid'); + test.equal(flags([2010, -1]).overflow, 1, 'month -1 invalid'); + test.equal(flags([2100, 12]).overflow, 1, 'month 12 invalid'); + + //days + test.equal(flags([2010, 1, 16]).overflow, -1, 'date valid'); + test.equal(flags([2010, 1, -1]).overflow, 2, 'date -1 invalid'); + test.equal(flags([2010, 1, 0]).overflow, 2, 'date 0 invalid'); + test.equal(flags([2010, 1, 32]).overflow, 2, 'date 32 invalid'); + test.equal(flags([2012, 1, 29]).overflow, -1, 'date leap year valid'); + test.equal(flags([2010, 1, 29]).overflow, 2, 'date leap year invalid'); + + //hours + test.equal(flags([2010, 1, 1, 8]).overflow, -1, 'hour valid'); + test.equal(flags([2010, 1, 1, 0]).overflow, -1, 'hour 0 valid'); + test.equal(flags([2010, 1, 1, -1]).overflow, 3, 'hour -1 invalid'); + test.equal(flags([2010, 1, 1, 24]).overflow, 3, 'hour 24 invalid'); + + //minutes + test.equal(flags([2010, 1, 1, 8, 15]).overflow, -1, 'minute valid'); + test.equal(flags([2010, 1, 1, 8, 0]).overflow, -1, 'minute 0 valid'); + test.equal(flags([2010, 1, 1, 8, -1]).overflow, 4, 'minute -1 invalid'); + test.equal(flags([2010, 1, 1, 8, 60]).overflow, 4, 'minute 60 invalid'); + + //seconds + test.equal(flags([2010, 1, 1, 8, 15, 12]).overflow, -1, 'second valid'); + test.equal(flags([2010, 1, 1, 8, 15, 0]).overflow, -1, 'second 0 valid'); + test.equal(flags([2010, 1, 1, 8, 15, -1]).overflow, 5, 'second -1 invalid'); + test.equal(flags([2010, 1, 1, 8, 15, 60]).overflow, 5, 'second 60 invalid'); + + //milliseconds + test.equal(flags([2010, 1, 1, 8, 15, 12, 345]).overflow, -1, 'millisecond valid'); + test.equal(flags([2010, 1, 1, 8, 15, 12, 0]).overflow, -1, 'millisecond 0 valid'); + test.equal(flags([2010, 1, 1, 8, 15, 12, -1]).overflow, 6, 'millisecond -1 invalid'); + test.equal(flags([2010, 1, 1, 8, 15, 12, 1000]).overflow, 6, 'millisecond 1000 invalid'); + + test.done(); + }, + + 'overflow without format' : function (test) { + //months + test.equal(flags('2001-01', 'YYYY-MM').overflow, -1, 'month 1 valid'); + test.equal(flags('2001-12', 'YYYY-MM').overflow, -1, 'month 12 valid'); + test.equal(flags('2001-13', 'YYYY-MM').overflow, 1, 'month 13 invalid'); + + //days + test.equal(flags('2010-01-16', 'YYYY-MM-DD').overflow, -1, 'date 16 valid'); + test.equal(flags('2010-01-0', 'YYYY-MM-DD').overflow, 2, 'date 0 invalid'); + test.equal(flags('2010-01-32', 'YYYY-MM-DD').overflow, 2, 'date 32 invalid'); + test.equal(flags('2012-02-29', 'YYYY-MM-DD').overflow, -1, 'date leap year valid'); + test.equal(flags('2010-02-29', 'YYYY-MM-DD').overflow, 2, 'date leap year invalid'); + + //days of the year + test.equal(flags('2010 300', 'YYYY DDDD').overflow, -1, 'day 300 of year valid'); + test.equal(flags('2010 365', 'YYYY DDDD').overflow, -1, 'day 365 of year valid'); + test.equal(flags('2010 366', 'YYYY DDDD').overflow, 2, 'day 366 of year invalid'); + test.equal(flags('2012 366', 'YYYY DDDD').overflow, -1, 'day 366 of leap year valid'); + test.equal(flags('2012 367', 'YYYY DDDD').overflow, 2, 'day 367 of leap year invalid'); + + //hours + test.equal(flags('08', 'HH').overflow, -1, 'hour valid'); + test.equal(flags('00', 'HH').overflow, -1, 'hour 0 valid'); + test.equal(flags('24', 'HH').overflow, 3, 'hour 24 invalid'); + + //minutes + test.equal(flags('08:15', 'HH:mm').overflow, -1, 'minute valid'); + test.equal(flags('08:00', 'HH:mm').overflow, -1, 'minute 0 valid'); + test.equal(flags('08:60', 'HH:mm').overflow, 4, 'minute 60 invalid'); + + //seconds + test.equal(flags('08:15:12', 'HH:mm:ss').overflow, -1, 'second valid'); + test.equal(flags('08:15:00', 'HH:mm:ss').overflow, -1, 'second 0 valid'); + test.equal(flags('08:15:60', 'HH:mm:ss').overflow, 5, 'second 60 invalid'); + + //milliseconds + test.equal(flags('08:15:12:345', 'HH:mm:ss:SSSS').overflow, -1, 'millisecond valid'); + test.equal(flags('08:15:12:000', 'HH:mm:ss:SSSS').overflow, -1, 'millisecond 0 valid'); + + //this is OK because we don't match the last digit, so it's 100 ms + test.equal(flags('08:15:12:1000', 'HH:mm:ss:SSSS').overflow, -1, 'millisecond 1000 actually valid'); + + test.done(); + }, + + 'extra tokens' : function (test) { + test.deepEqual(flags('1982-05-25', 'YYYY-MM-DD').unusedTokens, [], 'nothing extra'); + test.deepEqual(flags('1982-05', 'YYYY-MM-DD').unusedTokens, ['DD'], 'extra formatting token'); + test.deepEqual(flags('1982', 'YYYY-MM-DD').unusedTokens, ['MM', 'DD'], 'multiple extra formatting tokens'); + test.deepEqual(flags('1982-05', 'YYYY-MM-').unusedTokens, [], 'extra non-formatting token'); + test.deepEqual(flags('1982-05-', 'YYYY-MM-DD').unusedTokens, ['DD'], 'non-extra non-formatting token'); + test.deepEqual(flags('1982 05 1982', 'YYYY-MM-DD').unusedTokens, [], 'different non-formatting token'); + + test.done(); + }, + + 'extra tokens strict' : function (test) { + test.deepEqual(flags('1982-05-25', 'YYYY-MM-DD', true).unusedTokens, [], 'nothing extra'); + test.deepEqual(flags('1982-05', 'YYYY-MM-DD', true).unusedTokens, ['-', 'DD'], 'extra formatting token'); + test.deepEqual(flags('1982', 'YYYY-MM-DD', true).unusedTokens, ['-', 'MM', '-', 'DD'], 'multiple extra formatting tokens'); + test.deepEqual(flags('1982-05', 'YYYY-MM-', true).unusedTokens, ['-'], 'extra non-formatting token'); + test.deepEqual(flags('1982-05-', 'YYYY-MM-DD', true).unusedTokens, ['DD'], 'non-extra non-formatting token'); + test.deepEqual(flags('1982 05 1982', 'YYYY-MM-DD', true).unusedTokens, ['-', '-'], 'different non-formatting token'); + + test.done(); + }, + + 'unused input' : function (test) { + test.deepEqual(flags('1982-05-25', 'YYYY-MM-DD').unusedInput, [], 'normal input'); + test.deepEqual(flags('1982-05-25 this is more stuff', 'YYYY-MM-DD').unusedInput, [' this is more stuff'], 'trailing nonsense'); + test.deepEqual(flags('1982-05-25 09:30', 'YYYY-MM-DD').unusedInput, [' 09:30'], ['trailing legit-looking input']); + test.deepEqual(flags('1982-05-25 some junk', 'YYYY-MM-DD [some junk]').unusedInput, [], 'junk that actually gets matched'); + test.deepEqual(flags('stuff at beginning 1982-05-25', 'YYYY-MM-DD').unusedInput, ['stuff at beginning '], 'leading junk'); + test.deepEqual(flags('junk 1982 more junk 05 yet more junk25', 'YYYY-MM-DD').unusedInput, ['junk ', ' more junk ', ' yet more junk'], 'interstitial junk'); + + test.done(); + }, + + 'unused input strict' : function (test) { + test.deepEqual(flags('1982-05-25', 'YYYY-MM-DD', true).unusedInput, [], 'normal input'); + test.deepEqual(flags('1982-05-25 this is more stuff', 'YYYY-MM-DD', true).unusedInput, [' this is more stuff'], 'trailing nonsense'); + test.deepEqual(flags('1982-05-25 09:30', 'YYYY-MM-DD', true).unusedInput, [' 09:30'], ['trailing legit-looking input']); + test.deepEqual(flags('1982-05-25 some junk', 'YYYY-MM-DD [some junk]', true).unusedInput, [], 'junk that actually gets matched'); + test.deepEqual(flags('stuff at beginning 1982-05-25', 'YYYY-MM-DD', true).unusedInput, ['stuff at beginning '], 'leading junk'); + test.deepEqual(flags('junk 1982 more junk 05 yet more junk25', 'YYYY-MM-DD', true).unusedInput, ['junk ', ' more junk ', ' yet more junk'], 'interstitial junk'); + + test.done(); + }, + + 'chars left over' : function (test) { + test.equal(flags('1982-05-25', 'YYYY-MM-DD').charsLeftOver, 0, 'normal input'); + test.equal(flags('1982-05-25 this is more stuff', 'YYYY-MM-DD').charsLeftOver, ' this is more stuff'.length, 'trailing nonsense'); + test.equal(flags('1982-05-25 09:30', 'YYYY-MM-DD').charsLeftOver, ' 09:30'.length, 'trailing legit-looking input'); + test.equal(flags('stuff at beginning 1982-05-25', 'YYYY-MM-DD').charsLeftOver, 'stuff at beginning '.length, 'leading junk'); + test.equal(flags('1982 junk 05 more junk25', 'YYYY-MM-DD').charsLeftOver, [' junk ', ' more junk'].join('').length, 'interstitial junk'); + test.equal(flags('stuff at beginning 1982 junk 05 more junk25', 'YYYY-MM-DD').charsLeftOver, ['stuff at beginning ', ' junk ', ' more junk'].join('').length, 'leading and interstitial junk'); + + test.done(); + }, + + 'empty' : function (test) { + test.equal(flags('1982-05-25', 'YYYY-MM-DD').empty, false, 'normal input'); + test.equal(flags('nothing here', 'YYYY-MM-DD').empty, true, 'pure garbage'); + test.equal(flags('junk but has the number 2000 in it', 'YYYY-MM-DD').empty, false, 'only mostly garbage'); + test.equal(flags('', 'YYYY-MM-DD').empty, true, 'empty string'); + test.equal(flags('', 'YYYY-MM-DD').empty, true, 'blank string'); + + test.done(); + }, + + 'null' : function (test) { + test.equal(flags('1982-05-25', 'YYYY-MM-DD').nullInput, false, 'normal input'); + test.equal(flags(null).nullInput, true, 'just null'); + test.equal(flags(null, 'YYYY-MM-DD').nullInput, true, 'null with format'); + + test.done(); + }, + + 'invalid month' : function (test) { + test.equal(flags('1982 May', 'YYYY MMMM').invalidMonth, null, 'normal input'); + test.equal(flags('1982 Laser', 'YYYY MMMM').invalidMonth, 'Laser', 'bad month name'); + + test.done(); + }, + + 'empty format array' : function (test) { + test.equal(flags('1982 May', ['YYYY MMM']).invalidFormat, false, 'empty format array'); + test.equal(flags('1982 May', []).invalidFormat, true, 'empty format array'); + test.done(); + } +}; + +var moment = require("../../moment"), + + symbolMap = { + '1': '!', + '2': '@', + '3': '#', + '4': '$', + '5': '%', + '6': '^', + '7': '&', + '8': '*', + '9': '(', + '0': ')' + }, + + numberMap = { + '!': '1', + '@': '2', + '#': '3', + '$': '4', + '%': '5', + '^': '6', + '&': '7', + '*': '8', + '(': '9', + ')': '0' + }, + + symbolLang = { + preparse: function (string) { + return string.replace(/[!@#$%\^&*()]/g, function (match) { + return numberMap[match]; + }); + }, + + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + } + }; + +exports.preparsePostformat = { + setUp: function (cb) { + moment.locale('symbol', symbolLang); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + + cb(); + }, + + tearDown: function (cb) { + moment.locale('en-gb'); + cb(); + }, + + "transform": function (test) { + test.expect(3); + + test.equal(moment.utc('@)!@-)*-@&', 'YYYY-MM-DD').unix(), 1346025600, "preparse string + format"); + test.equal(moment.utc('@)!@-)*-@&').unix(), 1346025600, "preparse ISO8601 string"); + test.equal(moment.unix(1346025600).utc().format('YYYY-MM-DD'), '@)!@-)*-@&', "postformat"); + + test.done(); + }, + + "transform from": function (test) { + test.expect(3); + + var start = moment([2007, 1, 28]); + + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "@ minutes", "postformat should work on moment.fn.from"); + test.equal(moment().add(6, 'd').fromNow(true), "^ days", "postformat should work on moment.fn.fromNow"); + test.equal(moment.duration(10, "h").humanize(), "!) hours", "postformat should work on moment.duration.fn.humanize"); + + test.done(); + }, + + "calendar day" : function (test) { + test.expect(6); + + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Today at @:)) AM", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Today at @:@% AM", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Today at #:)) AM", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Tomorrow at @:)) AM", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Today at !:)) AM", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Yesterday at @:)) AM", "yesterday at the same time"); + + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.quarter = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "library quarter getter" : function (test) { + test.expect(7); + + test.equal(moment([1985, 1, 4]).quarter(), 1, "Feb 4 1985 is Q1"); + test.equal(moment([2029, 8, 18]).quarter(), 3, "Sep 18 2029 is Q3"); + test.equal(moment([2013, 3, 24]).quarter(), 2, "Apr 24 2013 is Q2"); + test.equal(moment([2015, 2, 5]).quarter(), 1, "Mar 5 2015 is Q1"); + test.equal(moment([1970, 0, 2]).quarter(), 1, "Jan 2 1970 is Q1"); + test.equal(moment([2001, 11, 12]).quarter(), 4, "Dec 12 2001 is Q4"); + test.equal(moment([2000, 0, 2]).quarter(), 1, "Jan 2 2000 is Q1"); + + test.done(); + }, + + "quarter setter singular" : function (test) { + var m; + test.expect(4); + + m = moment([2014, 4, 11]); + test.equal(m.quarter(2).month(), 4, "set same quarter"); + test.equal(m.quarter(3).month(), 7, "set 3rd quarter"); + test.equal(m.quarter(1).month(), 1, "set 1st quarter"); + test.equal(m.quarter(4).month(), 10, "set 4th quarter"); + + test.done(); + }, + + "quarter setter plural" : function (test) { + var m; + test.expect(4); + + m = moment([2014, 4, 11]); + test.equal(m.quarters(2).month(), 4, "set same quarter"); + test.equal(m.quarters(3).month(), 7, "set 3rd quarter"); + test.equal(m.quarters(1).month(), 1, "set 1st quarter"); + test.equal(m.quarters(4).month(), 10, "set 4th quarter"); + + test.done(); + }, + + "quarter setter programmatic" : function (test) { + var m; + test.expect(4); + + m = moment([2014, 4, 11]); + test.equal(m.set("quarter", 2).month(), 4, "set same quarter"); + test.equal(m.set("quarter", 3).month(), 7, "set 3rd quarter"); + test.equal(m.set("quarter", 1).month(), 1, "set 1st quarter"); + test.equal(m.set("quarter", 4).month(), 10, "set 4th quarter"); + + test.done(); + }, + + "quarter setter programmatic plural" : function (test) { + var m; + test.expect(4); + + m = moment([2014, 4, 11]); + test.equal(m.set("quarters", 2).month(), 4, "set same quarter"); + test.equal(m.set("quarters", 3).month(), 7, "set 3rd quarter"); + test.equal(m.set("quarters", 1).month(), 1, "set 1st quarter"); + test.equal(m.set("quarters", 4).month(), 10, "set 4th quarter"); + + test.done(); + }, + + "quarter setter programmatic abbr" : function (test) { + var m; + test.expect(4); + + m = moment([2014, 4, 11]); + test.equal(m.set("Q", 2).month(), 4, "set same quarter"); + test.equal(m.set("Q", 3).month(), 7, "set 3rd quarter"); + test.equal(m.set("Q", 1).month(), 1, "set 1st quarter"); + test.equal(m.set("Q", 4).month(), 10, "set 4th quarter"); + + test.done(); + }, + + "quarter setter only month changes" : function (test) { + var m; + test.expect(7); + + m = moment([2014, 4, 11, 1, 2, 3, 4]).quarter(4); + test.equal(m.year(), 2014, "keep year"); + test.equal(m.month(), 10, "set month"); + test.equal(m.date(), 11, "keep date"); + test.equal(m.hour(), 1, "keep hour"); + test.equal(m.minute(), 2, "keep minutes"); + test.equal(m.second(), 3, "keep seconds"); + test.equal(m.millisecond(), 4, "keep milliseconds"); + + test.done(); + }, + + "quarter setter bubble to next year" : function (test) { + var m; + test.expect(7); + + m = moment([2014, 4, 11, 1, 2, 3, 4]).quarter(7); + test.equal(m.year(), 2015, "year bubbled"); + test.equal(m.month(), 7, "set month"); + test.equal(m.date(), 11, "keep date"); + test.equal(m.hour(), 1, "keep hour"); + test.equal(m.minute(), 2, "keep minutes"); + test.equal(m.second(), 3, "keep seconds"); + test.equal(m.millisecond(), 4, "keep milliseconds"); + + test.done(); + }, + + "quarter setter bubble to previous year" : function (test) { + var m; + test.expect(7); + + m = moment([2014, 4, 11, 1, 2, 3, 4]).quarter(-3); + test.equal(m.year(), 2013, "year bubbled"); + test.equal(m.month(), 1, "set month"); + test.equal(m.date(), 11, "keep date"); + test.equal(m.hour(), 1, "keep hour"); + test.equal(m.minute(), 2, "keep minutes"); + test.equal(m.second(), 3, "keep seconds"); + test.equal(m.millisecond(), 4, "keep milliseconds"); + + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.relativeTime = { + "default thresholds" : function (test) { + var a = moment(); + + // Seconds to minutes threshold + a.subtract(44, 'seconds'); + test.equal(a.fromNow(), "a few seconds ago", "Below default seconds to minutes threshold"); + a.subtract(1, 'seconds'); + test.equal(a.fromNow(), "a minute ago", "Above default seconds to minutes threshold"); + + // Minutes to hours threshold + a = moment(); + a.subtract(44, 'minutes'); + test.equal(a.fromNow(), "44 minutes ago", "Below default minute to hour threshold"); + a.subtract(1, 'minutes'); + test.equal(a.fromNow(), "an hour ago", "Above default minute to hour threshold"); + + // Hours to days threshold + a = moment(); + a.subtract(21, 'hours'); + test.equal(a.fromNow(), "21 hours ago", "Below default hours to day threshold"); + a.subtract(1, 'hours'); + test.equal(a.fromNow(), "a day ago", "Above default hours to day threshold"); + + // Days to month threshold + a = moment(); + a.subtract(25, 'days'); + test.equal(a.fromNow(), "25 days ago", "Below default days to month (singular) threshold"); + a.subtract(1, 'days'); + test.equal(a.fromNow(), "a month ago", "Above default days to month (singular) threshold"); + + // months to year threshold + a = moment(); + a.subtract(10, 'months'); + test.equal(a.fromNow(), "10 months ago", "Below default days to years threshold"); + a.subtract(1, 'month'); + test.equal(a.fromNow(), "a year ago", "Above default days to years threshold"); + + test.done(); + }, + + "custom thresholds" : function (test) { + // Seconds to minutes threshold + moment.relativeTimeThreshold('s', 55); + + var a = moment(); + a.subtract(54, 'seconds'); + test.equal(a.fromNow(), "a few seconds ago", "Below custom seconds to minutes threshold"); + a.subtract(1, 'seconds'); + test.equal(a.fromNow(), "a minute ago", "Above custom seconds to minutes threshold"); + + moment.relativeTimeThreshold('s', 45); + + // Minutes to hours threshold + moment.relativeTimeThreshold('m', 55); + a = moment(); + a.subtract(54, 'minutes'); + test.equal(a.fromNow(), "54 minutes ago", "Below custom minutes to hours threshold"); + a.subtract(1, 'minutes'); + test.equal(a.fromNow(), "an hour ago", "Above custom minutes to hours threshold"); + moment.relativeTimeThreshold('m', 45); + + // Hours to days threshold + moment.relativeTimeThreshold('h', 24); + a = moment(); + a.subtract(23, 'hours'); + test.equal(a.fromNow(), "23 hours ago", "Below custom hours to days threshold"); + a.subtract(1, 'hours'); + test.equal(a.fromNow(), "a day ago", "Above custom hours to days threshold"); + moment.relativeTimeThreshold('h', 22); + + // Days to month threshold + moment.relativeTimeThreshold('d', 28); + a = moment(); + a.subtract(27, 'days'); + test.equal(a.fromNow(), "27 days ago", "Below custom days to month (singular) threshold"); + a.subtract(1, 'days'); + test.equal(a.fromNow(), "a month ago", "Above custom days to month (singular) threshold"); + moment.relativeTimeThreshold('d', 26); + + // months to years threshold + moment.relativeTimeThreshold('M', 9); + a = moment(); + a.subtract(8, 'months'); + test.equal(a.fromNow(), "8 months ago", "Below custom days to years threshold"); + a.subtract(1, 'months'); + test.equal(a.fromNow(), "a year ago", "Above custom days to years threshold"); + moment.relativeTimeThreshold('M', 11); + test.done(); + }, + + "retrive threshold settings" : function (test) { + test.expect(1); + moment.relativeTimeThreshold('m', 45); + var minuteThreshold = moment.relativeTimeThreshold('m'); + + test.equal(minuteThreshold, 45, "Can retrieve minute setting"); + + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.endStartOf = { + setUp : function (done) { + moment.locale('en'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "start of year" : function (test) { + test.expect(9); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('year'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('years'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('y'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 0, "strip out the month"); + test.equal(m.date(), 1, "strip out the day"); + test.equal(m.hours(), 0, "strip out the hours"); + test.equal(m.minutes(), 0, "strip out the minutes"); + test.equal(m.seconds(), 0, "strip out the seconds"); + test.equal(m.milliseconds(), 0, "strip out the milliseconds"); + test.done(); + }, + + "end of year" : function (test) { + test.expect(9); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('year'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('years'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('y'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 11, "set the month"); + test.equal(m.date(), 31, "set the day"); + test.equal(m.hours(), 23, "set the hours"); + test.equal(m.minutes(), 59, "set the minutes"); + test.equal(m.seconds(), 59, "set the seconds"); + test.equal(m.milliseconds(), 999, "set the seconds"); + test.done(); + }, + + "start of quarter" : function (test) { + test.expect(10); + + var m = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).startOf('quarter'), + ms = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).startOf('quarters'), + ma = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).startOf('Q'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.quarter(), 2, "keep the quarter"); + test.equal(m.month(), 3, "strip out the month"); + test.equal(m.date(), 1, "strip out the day"); + test.equal(m.hours(), 0, "strip out the hours"); + test.equal(m.minutes(), 0, "strip out the minutes"); + test.equal(m.seconds(), 0, "strip out the seconds"); + test.equal(m.milliseconds(), 0, "strip out the milliseconds"); + test.done(); + }, + + "end of quarter" : function (test) { + test.expect(10); + + var m = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).endOf('quarter'), + ms = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).endOf('quarters'), + ma = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).endOf('Q'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.quarter(), 2, "keep the quarter"); + test.equal(m.month(), 5, "set the month"); + test.equal(m.date(), 30, "set the day"); + test.equal(m.hours(), 23, "set the hours"); + test.equal(m.minutes(), 59, "set the minutes"); + test.equal(m.seconds(), 59, "set the seconds"); + test.equal(m.milliseconds(), 999, "set the seconds"); + test.done(); + }, + + "start of month" : function (test) { + test.expect(9); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('month'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('months'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('M'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 1, "keep the month"); + test.equal(m.date(), 1, "strip out the day"); + test.equal(m.hours(), 0, "strip out the hours"); + test.equal(m.minutes(), 0, "strip out the minutes"); + test.equal(m.seconds(), 0, "strip out the seconds"); + test.equal(m.milliseconds(), 0, "strip out the milliseconds"); + test.done(); + }, + + "end of month" : function (test) { + test.expect(9); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('month'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('months'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('M'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 1, "keep the month"); + test.equal(m.date(), 28, "set the day"); + test.equal(m.hours(), 23, "set the hours"); + test.equal(m.minutes(), 59, "set the minutes"); + test.equal(m.seconds(), 59, "set the seconds"); + test.equal(m.milliseconds(), 999, "set the seconds"); + test.done(); + }, + + "start of week" : function (test) { + test.expect(10); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('week'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('weeks'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('w'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 0, "rolls back to January"); + test.equal(m.day(), 0, "set day of week"); + test.equal(m.date(), 30, "set correct date"); + test.equal(m.hours(), 0, "strip out the hours"); + test.equal(m.minutes(), 0, "strip out the minutes"); + test.equal(m.seconds(), 0, "strip out the seconds"); + test.equal(m.milliseconds(), 0, "strip out the milliseconds"); + test.done(); + }, + + "end of week" : function (test) { + test.expect(10); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('week'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('weeks'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('weeks'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 1, "keep the month"); + test.equal(m.day(), 6, "set the day of the week"); + test.equal(m.date(), 5, "set the day"); + test.equal(m.hours(), 23, "set the hours"); + test.equal(m.minutes(), 59, "set the minutes"); + test.equal(m.seconds(), 59, "set the seconds"); + test.equal(m.milliseconds(), 999, "set the seconds"); + test.done(); + }, + + "start of iso-week" : function (test) { + test.expect(10); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('isoWeek'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('isoWeeks'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('W'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 0, "rollback to January"); + test.equal(m.isoWeekday(), 1, "set day of iso-week"); + test.equal(m.date(), 31, "set correct date"); + test.equal(m.hours(), 0, "strip out the hours"); + test.equal(m.minutes(), 0, "strip out the minutes"); + test.equal(m.seconds(), 0, "strip out the seconds"); + test.equal(m.milliseconds(), 0, "strip out the milliseconds"); + test.done(); + }, + + "end of iso-week" : function (test) { + test.expect(10); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('isoWeek'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('isoWeeks'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('W'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 1, "keep the month"); + test.equal(m.isoWeekday(), 7, "set the day of the week"); + test.equal(m.date(), 6, "set the day"); + test.equal(m.hours(), 23, "set the hours"); + test.equal(m.minutes(), 59, "set the minutes"); + test.equal(m.seconds(), 59, "set the seconds"); + test.equal(m.milliseconds(), 999, "set the seconds"); + test.done(); + }, + + "start of day" : function (test) { + test.expect(9); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('day'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('days'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('d'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 1, "keep the month"); + test.equal(m.date(), 2, "keep the day"); + test.equal(m.hours(), 0, "strip out the hours"); + test.equal(m.minutes(), 0, "strip out the minutes"); + test.equal(m.seconds(), 0, "strip out the seconds"); + test.equal(m.milliseconds(), 0, "strip out the milliseconds"); + test.done(); + }, + + "end of day" : function (test) { + test.expect(9); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('day'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('days'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('d'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 1, "keep the month"); + test.equal(m.date(), 2, "keep the day"); + test.equal(m.hours(), 23, "set the hours"); + test.equal(m.minutes(), 59, "set the minutes"); + test.equal(m.seconds(), 59, "set the seconds"); + test.equal(m.milliseconds(), 999, "set the seconds"); + test.done(); + }, + + "start of hour" : function (test) { + test.expect(9); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('hour'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('hours'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('h'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 1, "keep the month"); + test.equal(m.date(), 2, "keep the day"); + test.equal(m.hours(), 3, "keep the hours"); + test.equal(m.minutes(), 0, "strip out the minutes"); + test.equal(m.seconds(), 0, "strip out the seconds"); + test.equal(m.milliseconds(), 0, "strip out the milliseconds"); + test.done(); + }, + + "end of hour" : function (test) { + test.expect(9); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('hour'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('hours'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('h'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 1, "keep the month"); + test.equal(m.date(), 2, "keep the day"); + test.equal(m.hours(), 3, "keep the hours"); + test.equal(m.minutes(), 59, "set the minutes"); + test.equal(m.seconds(), 59, "set the seconds"); + test.equal(m.milliseconds(), 999, "set the seconds"); + test.done(); + }, + + "start of minute" : function (test) { + test.expect(9); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('minute'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('minutes'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('m'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 1, "keep the month"); + test.equal(m.date(), 2, "keep the day"); + test.equal(m.hours(), 3, "keep the hours"); + test.equal(m.minutes(), 4, "keep the minutes"); + test.equal(m.seconds(), 0, "strip out the seconds"); + test.equal(m.milliseconds(), 0, "strip out the milliseconds"); + test.done(); + }, + + "end of minute" : function (test) { + test.expect(9); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('minute'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('minutes'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('m'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 1, "keep the month"); + test.equal(m.date(), 2, "keep the day"); + test.equal(m.hours(), 3, "keep the hours"); + test.equal(m.minutes(), 4, "keep the minutes"); + test.equal(m.seconds(), 59, "set the seconds"); + test.equal(m.milliseconds(), 999, "set the seconds"); + test.done(); + }, + + "start of second" : function (test) { + test.expect(9); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('second'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('seconds'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('s'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 1, "keep the month"); + test.equal(m.date(), 2, "keep the day"); + test.equal(m.hours(), 3, "keep the hours"); + test.equal(m.minutes(), 4, "keep the minutes"); + test.equal(m.seconds(), 5, "keep the the seconds"); + test.equal(m.milliseconds(), 0, "strip out the milliseconds"); + test.done(); + }, + + "end of second" : function (test) { + test.expect(9); + + var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('second'), + ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('seconds'), + ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('s'); + test.equal(+m, +ms, "Plural or singular should work"); + test.equal(+m, +ma, "Full or abbreviated should work"); + test.equal(m.year(), 2011, "keep the year"); + test.equal(m.month(), 1, "keep the month"); + test.equal(m.date(), 2, "keep the day"); + test.equal(m.hours(), 3, "keep the hours"); + test.equal(m.minutes(), 4, "keep the minutes"); + test.equal(m.seconds(), 5, "keep the seconds"); + test.equal(m.milliseconds(), 999, "set the seconds"); + test.done(); + }, + + "startOf across DST +1" : function (test) { + var oldUpdateOffset = moment.updateOffset, + // Based on a real story somewhere in America/Los_Angeles + dstAt = moment("2014-03-09T02:00:00-08:00").parseZone(), + m; + + moment.updateOffset = function (mom, keepTime) { + if (mom.isBefore(dstAt)) { + mom.zone(8, keepTime); + } else { + mom.zone(7, keepTime); + } + }; + + m = moment("2014-03-15T00:00:00-07:00").parseZone(); + m.startOf('M'); + test.equal(m.format(), "2014-03-01T00:00:00-08:00", + "startOf('month') across +1"); + + m = moment("2014-03-09T09:00:00-07:00").parseZone(); + m.startOf('d'); + test.equal(m.format(), "2014-03-09T00:00:00-08:00", + "startOf('day') across +1"); + + m = moment("2014-03-09T03:05:00-07:00").parseZone(); + m.startOf('h'); + test.equal(m.format(), "2014-03-09T03:00:00-07:00", + "startOf('hour') after +1"); + + m = moment("2014-03-09T01:35:00-08:00").parseZone(); + m.startOf('h'); + test.equal(m.format(), "2014-03-09T01:00:00-08:00", + "startOf('hour') before +1"); + + // There is no such time as 2:30-7 to try startOf('hour') across that + + moment.updateOffset = oldUpdateOffset; + + test.done(); + }, + + "startOf across DST -1" : function (test) { + var oldUpdateOffset = moment.updateOffset, + // Based on a real story somewhere in America/Los_Angeles + dstAt = moment("2014-11-02T02:00:00-07:00").parseZone(), + m; + + moment.updateOffset = function (mom, keepTime) { + if (mom.isBefore(dstAt)) { + mom.zone(7, keepTime); + } else { + mom.zone(8, keepTime); + } + }; + + m = moment("2014-11-15T00:00:00-08:00").parseZone(); + m.startOf('M'); + test.equal(m.format(), "2014-11-01T00:00:00-07:00", + "startOf('month') across -1"); + + m = moment("2014-11-02T09:00:00-08:00").parseZone(); + m.startOf('d'); + test.equal(m.format(), "2014-11-02T00:00:00-07:00", + "startOf('day') across -1"); + + // note that zone is -8 + m = moment("2014-11-02T01:30:00-08:00").parseZone(); + m.startOf('h'); + test.equal(m.format(), "2014-11-02T01:00:00-08:00", + "startOf('hour') after +1"); + + // note that zone is -7 + m = moment("2014-11-02T01:30:00-07:00").parseZone(); + m.startOf('h'); + test.equal(m.format(), "2014-11-02T01:00:00-07:00", + "startOf('hour') before +1"); + + moment.updateOffset = oldUpdateOffset; + + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.stringPrototype = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "string prototype overrides call" : function (test) { + test.expect(1); + + moment.locale('en'); + var prior = String.prototype.call, b; + String.prototype.call = function () { + return null; + }; + + b = moment(new Date(2011, 7, 28, 15, 25, 50, 125)); + test.equal(b.format('MMMM Do YYYY, h:mm a'), 'August 28th 2011, 3:25 pm'); + + String.prototype.call = prior; + test.done(); + } + +}; + +var moment = require("../../moment"); + +exports.utc = { + setUp : function (done) { + moment.locale('en'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + + done(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "utc and local" : function (test) { + test.expect(7); + + var m = moment(Date.UTC(2011, 1, 2, 3, 4, 5, 6)), zone, expected; + m.utc(); + // utc + test.equal(m.date(), 2, "the day should be correct for utc"); + test.equal(m.day(), 3, "the date should be correct for utc"); + test.equal(m.hours(), 3, "the hours should be correct for utc"); + + // local + m.local(); + if (m.zone() > 180) { + test.equal(m.date(), 1, "the date should be correct for local"); + test.equal(m.day(), 2, "the day should be correct for local"); + } else { + test.equal(m.date(), 2, "the date should be correct for local"); + test.equal(m.day(), 3, "the day should be correct for local"); + } + zone = Math.ceil(m.zone() / 60); + expected = (24 + 3 - zone) % 24; + test.equal(m.hours(), expected, "the hours (" + m.hours() + ") should be correct for local"); + test.equal(moment().utc().zone(), 0, "timezone in utc should always be zero"); + + test.done(); + }, + + "creating with utc and no arguments" : function (test) { + test.expect(2); + + var startOfTest = new Date().valueOf(), + momentDefaultUtcTime = moment.utc().valueOf(), + afterMomentCreationTime = new Date().valueOf(); + + test.ok(startOfTest <= momentDefaultUtcTime, "moment UTC default time should be now, not in the past"); + test.ok(momentDefaultUtcTime <= afterMomentCreationTime, "moment UTC default time should be now, not in the future"); + + test.done(); + }, + + "creating with utc and a date parameter array" : function (test) { + test.expect(6); + + var m = moment.utc([2011, 1, 2, 3, 4, 5, 6]); + test.equal(m.date(), 2, "the day should be correct for utc array"); + test.equal(m.hours(), 3, "the hours should be correct for utc array"); + + m = moment.utc("2011-02-02 3:04:05", "YYYY-MM-DD HH:mm:ss"); + test.equal(m.date(), 2, "the day should be correct for utc parsing format"); + test.equal(m.hours(), 3, "the hours should be correct for utc parsing format"); + + m = moment.utc("2011-02-02T03:04:05+00:00"); + test.equal(m.date(), 2, "the day should be correct for utc parsing iso"); + test.equal(m.hours(), 3, "the hours should be correct for utc parsing iso"); + + test.done(); + }, + + "creating with utc without timezone" : function (test) { + test.expect(4); + + var m = moment.utc("2012-01-02T08:20:00"); + test.equal(m.date(), 2, "the day should be correct for utc parse without timezone"); + test.equal(m.hours(), 8, "the hours should be correct for utc parse without timezone"); + + m = moment.utc("2012-01-02T08:20:00+09:00"); + test.equal(m.date(), 1, "the day should be correct for utc parse with timezone"); + test.equal(m.hours(), 23, "the hours should be correct for utc parse with timezone"); + + test.done(); + }, + + "cloning with utc" : function (test) { + test.expect(4); + + var m = moment.utc("2012-01-02T08:20:00"); + test.equal(moment.utc(m)._isUTC, true, "the local zone should be converted to UTC"); + test.equal(moment.utc(m.clone().utc())._isUTC, true, "the local zone should stay in UTC"); + + m.zone(120); + test.equal(moment.utc(m)._isUTC, true, "the explicit zone should stay in UTC"); + test.equal(moment.utc(m).zone(), 0, "the explicit zone should have an offset of 0"); + + test.done(); + }, + + "weekday with utc" : function (test) { + test.expect(1); + + test.equal( + moment('2013-09-15T00:00:00Z').utc().weekday(), // first minute of the day + moment('2013-09-15T23:59:00Z').utc().weekday(), // last minute of the day + "a UTC-moment's .weekday() should not be affected by the local timezone" + ); + + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.weekYear = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "iso week year": function (test) { + test.expect(19); + + // Some examples taken from http://en.wikipedia.org/wiki/ISO_week + test.equal(moment([2005, 0, 1]).isoWeekYear(), 2004); + test.equal(moment([2005, 0, 2]).isoWeekYear(), 2004); + test.equal(moment([2005, 0, 3]).isoWeekYear(), 2005); + test.equal(moment([2005, 11, 31]).isoWeekYear(), 2005); + test.equal(moment([2006, 0, 1]).isoWeekYear(), 2005); + test.equal(moment([2006, 0, 2]).isoWeekYear(), 2006); + test.equal(moment([2007, 0, 1]).isoWeekYear(), 2007); + test.equal(moment([2007, 11, 30]).isoWeekYear(), 2007); + test.equal(moment([2007, 11, 31]).isoWeekYear(), 2008); + test.equal(moment([2008, 0, 1]).isoWeekYear(), 2008); + test.equal(moment([2008, 11, 28]).isoWeekYear(), 2008); + test.equal(moment([2008, 11, 29]).isoWeekYear(), 2009); + test.equal(moment([2008, 11, 30]).isoWeekYear(), 2009); + test.equal(moment([2008, 11, 31]).isoWeekYear(), 2009); + test.equal(moment([2009, 0, 1]).isoWeekYear(), 2009); + test.equal(moment([2010, 0, 1]).isoWeekYear(), 2009); + test.equal(moment([2010, 0, 2]).isoWeekYear(), 2009); + test.equal(moment([2010, 0, 3]).isoWeekYear(), 2009); + test.equal(moment([2010, 0, 4]).isoWeekYear(), 2010); + + test.done(); + }, + + "week year": function (test) { + test.expect(31); + + // Some examples taken from http://en.wikipedia.org/wiki/ISO_week + moment.locale('dow: 1,doy: 4', {week: {dow: 1, doy: 4}}); // like iso + test.equal(moment([2005, 0, 1]).weekYear(), 2004); + test.equal(moment([2005, 0, 2]).weekYear(), 2004); + test.equal(moment([2005, 0, 3]).weekYear(), 2005); + test.equal(moment([2005, 11, 31]).weekYear(), 2005); + test.equal(moment([2006, 0, 1]).weekYear(), 2005); + test.equal(moment([2006, 0, 2]).weekYear(), 2006); + test.equal(moment([2007, 0, 1]).weekYear(), 2007); + test.equal(moment([2007, 11, 30]).weekYear(), 2007); + test.equal(moment([2007, 11, 31]).weekYear(), 2008); + test.equal(moment([2008, 0, 1]).weekYear(), 2008); + test.equal(moment([2008, 11, 28]).weekYear(), 2008); + test.equal(moment([2008, 11, 29]).weekYear(), 2009); + test.equal(moment([2008, 11, 30]).weekYear(), 2009); + test.equal(moment([2008, 11, 31]).weekYear(), 2009); + test.equal(moment([2009, 0, 1]).weekYear(), 2009); + test.equal(moment([2010, 0, 1]).weekYear(), 2009); + test.equal(moment([2010, 0, 2]).weekYear(), 2009); + test.equal(moment([2010, 0, 3]).weekYear(), 2009); + test.equal(moment([2010, 0, 4]).weekYear(), 2010); + + moment.locale('dow: 1,doy: 7', {week: {dow: 1, doy: 7}}); + test.equal(moment([2004, 11, 26]).weekYear(), 2004); + test.equal(moment([2004, 11, 27]).weekYear(), 2005); + test.equal(moment([2005, 11, 25]).weekYear(), 2005); + test.equal(moment([2005, 11, 26]).weekYear(), 2006); + test.equal(moment([2006, 11, 31]).weekYear(), 2006); + test.equal(moment([2007, 0, 1]).weekYear(), 2007); + test.equal(moment([2007, 11, 30]).weekYear(), 2007); + test.equal(moment([2007, 11, 31]).weekYear(), 2008); + test.equal(moment([2008, 11, 28]).weekYear(), 2008); + test.equal(moment([2008, 11, 29]).weekYear(), 2009); + test.equal(moment([2009, 11, 27]).weekYear(), 2009); + test.equal(moment([2009, 11, 28]).weekYear(), 2010); + + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.weekYear = { + setUp : function (done) { + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + done(); + }, + + "iso weekday": function (test) { + var i; + test.expect(7 * 7); + + for (i = 0; i < 7; ++i) { + moment.locale('dow:' + i + ',doy: 6', {week: {dow: i, doy: 6}}); + test.equal(moment([1985, 1, 4]).isoWeekday(), 1, "Feb 4 1985 is Monday -- 1st day"); + test.equal(moment([2029, 8, 18]).isoWeekday(), 2, "Sep 18 2029 is Tuesday -- 2nd day"); + test.equal(moment([2013, 3, 24]).isoWeekday(), 3, "Apr 24 2013 is Wednesday -- 3rd day"); + test.equal(moment([2015, 2, 5]).isoWeekday(), 4, "Mar 5 2015 is Thursday -- 4th day"); + test.equal(moment([1970, 0, 2]).isoWeekday(), 5, "Jan 2 1970 is Friday -- 5th day"); + test.equal(moment([2001, 4, 12]).isoWeekday(), 6, "May 12 2001 is Saturday -- 6th day"); + test.equal(moment([2000, 0, 2]).isoWeekday(), 7, "Jan 2 2000 is Sunday -- 7th day"); + } + test.done(); + }, + + "iso weekday setter" : function (test) { + test.expect(27); + + var a = moment([2011, 0, 10]); + test.equal(moment(a).isoWeekday(1).date(), 10, 'set from mon to mon'); + test.equal(moment(a).isoWeekday(4).date(), 13, 'set from mon to thu'); + test.equal(moment(a).isoWeekday(7).date(), 16, 'set from mon to sun'); + test.equal(moment(a).isoWeekday(-6).date(), 3, 'set from mon to last mon'); + test.equal(moment(a).isoWeekday(-3).date(), 6, 'set from mon to last thu'); + test.equal(moment(a).isoWeekday(0).date(), 9, 'set from mon to last sun'); + test.equal(moment(a).isoWeekday(8).date(), 17, 'set from mon to next mon'); + test.equal(moment(a).isoWeekday(11).date(), 20, 'set from mon to next thu'); + test.equal(moment(a).isoWeekday(14).date(), 23, 'set from mon to next sun'); + + a = moment([2011, 0, 13]); + test.equal(moment(a).isoWeekday(1).date(), 10, 'set from thu to mon'); + test.equal(moment(a).isoWeekday(4).date(), 13, 'set from thu to thu'); + test.equal(moment(a).isoWeekday(7).date(), 16, 'set from thu to sun'); + test.equal(moment(a).isoWeekday(-6).date(), 3, 'set from thu to last mon'); + test.equal(moment(a).isoWeekday(-3).date(), 6, 'set from thu to last thu'); + test.equal(moment(a).isoWeekday(0).date(), 9, 'set from thu to last sun'); + test.equal(moment(a).isoWeekday(8).date(), 17, 'set from thu to next mon'); + test.equal(moment(a).isoWeekday(11).date(), 20, 'set from thu to next thu'); + test.equal(moment(a).isoWeekday(14).date(), 23, 'set from thu to next sun'); + + a = moment([2011, 0, 16]); + test.equal(moment(a).isoWeekday(1).date(), 10, 'set from sun to mon'); + test.equal(moment(a).isoWeekday(4).date(), 13, 'set from sun to thu'); + test.equal(moment(a).isoWeekday(7).date(), 16, 'set from sun to sun'); + test.equal(moment(a).isoWeekday(-6).date(), 3, 'set from sun to last mon'); + test.equal(moment(a).isoWeekday(-3).date(), 6, 'set from sun to last thu'); + test.equal(moment(a).isoWeekday(0).date(), 9, 'set from sun to last sun'); + test.equal(moment(a).isoWeekday(8).date(), 17, 'set from sun to next mon'); + test.equal(moment(a).isoWeekday(11).date(), 20, 'set from sun to next thu'); + test.equal(moment(a).isoWeekday(14).date(), 23, 'set from sun to next sun'); + + test.done(); + }, + + "weekday first day of week Sunday (dow 0)": function (test) { + test.expect(7); + + moment.locale('dow: 0,doy: 6', {week: {dow: 0, doy: 6}}); + test.equal(moment([1985, 1, 3]).weekday(), 0, "Feb 3 1985 is Sunday -- 0th day"); + test.equal(moment([2029, 8, 17]).weekday(), 1, "Sep 17 2029 is Monday -- 1st day"); + test.equal(moment([2013, 3, 23]).weekday(), 2, "Apr 23 2013 is Tuesday -- 2nd day"); + test.equal(moment([2015, 2, 4]).weekday(), 3, "Mar 4 2015 is Wednesday -- 3nd day"); + test.equal(moment([1970, 0, 1]).weekday(), 4, "Jan 1 1970 is Thursday -- 4th day"); + test.equal(moment([2001, 4, 11]).weekday(), 5, "May 11 2001 is Friday -- 5th day"); + test.equal(moment([2000, 0, 1]).weekday(), 6, "Jan 1 2000 is Saturday -- 6th day"); + test.done(); + }, + + "weekday first day of week Monday (dow 1)": function (test) { + test.expect(7); + + moment.locale('dow: 1,doy: 6', {week: {dow: 1, doy: 6}}); + test.equal(moment([1985, 1, 4]).weekday(), 0, "Feb 4 1985 is Monday -- 0th day"); + test.equal(moment([2029, 8, 18]).weekday(), 1, "Sep 18 2029 is Tuesday -- 1st day"); + test.equal(moment([2013, 3, 24]).weekday(), 2, "Apr 24 2013 is Wednesday -- 2nd day"); + test.equal(moment([2015, 2, 5]).weekday(), 3, "Mar 5 2015 is Thursday -- 3nd day"); + test.equal(moment([1970, 0, 2]).weekday(), 4, "Jan 2 1970 is Friday -- 4th day"); + test.equal(moment([2001, 4, 12]).weekday(), 5, "May 12 2001 is Saturday -- 5th day"); + test.equal(moment([2000, 0, 2]).weekday(), 6, "Jan 2 2000 is Sunday -- 6th day"); + test.done(); + }, + + "weekday first day of week Tuesday (dow 2)": function (test) { + test.expect(7); + + moment.locale('dow: 2,doy: 6', {week: {dow: 2, doy: 6}}); + test.equal(moment([1985, 1, 5]).weekday(), 0, "Feb 5 1985 is Tuesday -- 0th day"); + test.equal(moment([2029, 8, 19]).weekday(), 1, "Sep 19 2029 is Wednesday -- 1st day"); + test.equal(moment([2013, 3, 25]).weekday(), 2, "Apr 25 2013 is Thursday -- 2nd day"); + test.equal(moment([2015, 2, 6]).weekday(), 3, "Mar 6 2015 is Friday -- 3nd day"); + test.equal(moment([1970, 0, 3]).weekday(), 4, "Jan 3 1970 is Staturday -- 4th day"); + test.equal(moment([2001, 4, 13]).weekday(), 5, "May 13 2001 is Sunday -- 5th day"); + test.equal(moment([2000, 0, 3]).weekday(), 6, "Jan 3 2000 is Monday -- 6th day"); + test.done(); + }, + + "weekday first day of week Wednesday (dow 3)": function (test) { + test.expect(7); + + moment.locale('dow: 3,doy: 6', {week: {dow: 3, doy: 6}}); + test.equal(moment([1985, 1, 6]).weekday(), 0, "Feb 6 1985 is Wednesday -- 0th day"); + test.equal(moment([2029, 8, 20]).weekday(), 1, "Sep 20 2029 is Thursday -- 1st day"); + test.equal(moment([2013, 3, 26]).weekday(), 2, "Apr 26 2013 is Friday -- 2nd day"); + test.equal(moment([2015, 2, 7]).weekday(), 3, "Mar 7 2015 is Saturday -- 3nd day"); + test.equal(moment([1970, 0, 4]).weekday(), 4, "Jan 4 1970 is Sunday -- 4th day"); + test.equal(moment([2001, 4, 14]).weekday(), 5, "May 14 2001 is Monday -- 5th day"); + test.equal(moment([2000, 0, 4]).weekday(), 6, "Jan 4 2000 is Tuesday -- 6th day"); + moment.locale('dow:3,doy:6', null); + test.done(); + }, + + "weekday first day of week Thursday (dow 4)": function (test) { + test.expect(7); + + moment.locale('dow: 4,doy: 6', {week: {dow: 4, doy: 6}}); + + test.equal(moment([1985, 1, 7]).weekday(), 0, "Feb 7 1985 is Thursday -- 0th day"); + test.equal(moment([2029, 8, 21]).weekday(), 1, "Sep 21 2029 is Friday -- 1st day"); + test.equal(moment([2013, 3, 27]).weekday(), 2, "Apr 27 2013 is Saturday -- 2nd day"); + test.equal(moment([2015, 2, 8]).weekday(), 3, "Mar 8 2015 is Sunday -- 3nd day"); + test.equal(moment([1970, 0, 5]).weekday(), 4, "Jan 5 1970 is Monday -- 4th day"); + test.equal(moment([2001, 4, 15]).weekday(), 5, "May 15 2001 is Tuesday -- 5th day"); + test.equal(moment([2000, 0, 5]).weekday(), 6, "Jan 5 2000 is Wednesday -- 6th day"); + test.done(); + }, + + "weekday first day of week Friday (dow 5)": function (test) { + test.expect(7); + + moment.locale('dow: 5,doy: 6', {week: {dow: 5, doy: 6}}); + test.equal(moment([1985, 1, 8]).weekday(), 0, "Feb 8 1985 is Friday -- 0th day"); + test.equal(moment([2029, 8, 22]).weekday(), 1, "Sep 22 2029 is Staturday -- 1st day"); + test.equal(moment([2013, 3, 28]).weekday(), 2, "Apr 28 2013 is Sunday -- 2nd day"); + test.equal(moment([2015, 2, 9]).weekday(), 3, "Mar 9 2015 is Monday -- 3nd day"); + test.equal(moment([1970, 0, 6]).weekday(), 4, "Jan 6 1970 is Tuesday -- 4th day"); + test.equal(moment([2001, 4, 16]).weekday(), 5, "May 16 2001 is Wednesday -- 5th day"); + test.equal(moment([2000, 0, 6]).weekday(), 6, "Jan 6 2000 is Thursday -- 6th day"); + test.done(); + }, + + "weekday first day of week Saturday (dow 6)": function (test) { + test.expect(7); + + moment.locale('dow: 6,doy: 6', {week: {dow: 6, doy: 6}}); + test.equal(moment([1985, 1, 9]).weekday(), 0, "Feb 9 1985 is Staturday -- 0th day"); + test.equal(moment([2029, 8, 23]).weekday(), 1, "Sep 23 2029 is Sunday -- 1st day"); + test.equal(moment([2013, 3, 29]).weekday(), 2, "Apr 29 2013 is Monday -- 2nd day"); + test.equal(moment([2015, 2, 10]).weekday(), 3, "Mar 10 2015 is Tuesday -- 3nd day"); + test.equal(moment([1970, 0, 7]).weekday(), 4, "Jan 7 1970 is Wednesday -- 4th day"); + test.equal(moment([2001, 4, 17]).weekday(), 5, "May 17 2001 is Thursday -- 5th day"); + test.equal(moment([2000, 0, 7]).weekday(), 6, "Jan 7 2000 is Friday -- 6th day"); + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.weeks = { + setUp : function (done) { + moment.locale('en'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + + done(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "day of year" : function (test) { + test.expect(8); + + test.equal(moment([2000, 0, 1]).dayOfYear(), 1, "Jan 1 2000 should be day 1 of the year"); + test.equal(moment([2000, 1, 28]).dayOfYear(), 59, "Feb 28 2000 should be day 59 of the year"); + test.equal(moment([2000, 1, 29]).dayOfYear(), 60, "Feb 28 2000 should be day 60 of the year"); + test.equal(moment([2000, 11, 31]).dayOfYear(), 366, "Dec 31 2000 should be day 366 of the year"); + test.equal(moment([2001, 0, 1]).dayOfYear(), 1, "Jan 1 2001 should be day 1 of the year"); + test.equal(moment([2001, 1, 28]).dayOfYear(), 59, "Feb 28 2001 should be day 59 of the year"); + test.equal(moment([2001, 2, 1]).dayOfYear(), 60, "Mar 1 2001 should be day 60 of the year"); + test.equal(moment([2001, 11, 31]).dayOfYear(), 365, "Dec 31 2001 should be day 365 of the year"); + + test.done(); + }, + + "day of year setters" : function (test) { + test.expect(8); + + test.equal(moment([2000, 0, 1]).dayOfYear(200).dayOfYear(), 200, "Setting Jan 1 2000 day of the year to 200 should work"); + test.equal(moment([2000, 1, 28]).dayOfYear(200).dayOfYear(), 200, "Setting Feb 28 2000 day of the year to 200 should work"); + test.equal(moment([2000, 1, 29]).dayOfYear(200).dayOfYear(), 200, "Setting Feb 28 2000 day of the year to 200 should work"); + test.equal(moment([2000, 11, 31]).dayOfYear(200).dayOfYear(), 200, "Setting Dec 31 2000 day of the year to 200 should work"); + test.equal(moment().dayOfYear(1).dayOfYear(), 1, "Setting day of the year to 1 should work"); + test.equal(moment().dayOfYear(59).dayOfYear(), 59, "Setting day of the year to 59 should work"); + test.equal(moment().dayOfYear(60).dayOfYear(), 60, "Setting day of the year to 60 should work"); + test.equal(moment().dayOfYear(365).dayOfYear(), 365, "Setting day of the year to 365 should work"); + + test.done(); + }, + + "iso weeks year starting sunday" : function (test) { + test.expect(5); + + test.equal(moment([2012, 0, 1]).isoWeek(), 52, "Jan 1 2012 should be iso week 52"); + test.equal(moment([2012, 0, 2]).isoWeek(), 1, "Jan 2 2012 should be iso week 1"); + test.equal(moment([2012, 0, 8]).isoWeek(), 1, "Jan 8 2012 should be iso week 1"); + test.equal(moment([2012, 0, 9]).isoWeek(), 2, "Jan 9 2012 should be iso week 2"); + test.equal(moment([2012, 0, 15]).isoWeek(), 2, "Jan 15 2012 should be iso week 2"); + + test.done(); + }, + + "iso weeks year starting monday" : function (test) { + test.expect(5); + + test.equal(moment([2007, 0, 1]).isoWeek(), 1, "Jan 1 2007 should be iso week 1"); + test.equal(moment([2007, 0, 7]).isoWeek(), 1, "Jan 7 2007 should be iso week 1"); + test.equal(moment([2007, 0, 8]).isoWeek(), 2, "Jan 8 2007 should be iso week 2"); + test.equal(moment([2007, 0, 14]).isoWeek(), 2, "Jan 14 2007 should be iso week 2"); + test.equal(moment([2007, 0, 15]).isoWeek(), 3, "Jan 15 2007 should be iso week 3"); + + test.done(); + }, + + "iso weeks year starting tuesday" : function (test) { + test.expect(6); + + test.equal(moment([2007, 11, 31]).isoWeek(), 1, "Dec 31 2007 should be iso week 1"); + test.equal(moment([2008, 0, 1]).isoWeek(), 1, "Jan 1 2008 should be iso week 1"); + test.equal(moment([2008, 0, 6]).isoWeek(), 1, "Jan 6 2008 should be iso week 1"); + test.equal(moment([2008, 0, 7]).isoWeek(), 2, "Jan 7 2008 should be iso week 2"); + test.equal(moment([2008, 0, 13]).isoWeek(), 2, "Jan 13 2008 should be iso week 2"); + test.equal(moment([2008, 0, 14]).isoWeek(), 3, "Jan 14 2008 should be iso week 3"); + + test.done(); + }, + + "iso weeks year starting wednesday" : function (test) { + test.expect(6); + + test.equal(moment([2002, 11, 30]).isoWeek(), 1, "Dec 30 2002 should be iso week 1"); + test.equal(moment([2003, 0, 1]).isoWeek(), 1, "Jan 1 2003 should be iso week 1"); + test.equal(moment([2003, 0, 5]).isoWeek(), 1, "Jan 5 2003 should be iso week 1"); + test.equal(moment([2003, 0, 6]).isoWeek(), 2, "Jan 6 2003 should be iso week 2"); + test.equal(moment([2003, 0, 12]).isoWeek(), 2, "Jan 12 2003 should be iso week 2"); + test.equal(moment([2003, 0, 13]).isoWeek(), 3, "Jan 13 2003 should be iso week 3"); + + test.done(); + }, + + "iso weeks year starting thursday" : function (test) { + test.expect(6); + + test.equal(moment([2008, 11, 29]).isoWeek(), 1, "Dec 29 2008 should be iso week 1"); + test.equal(moment([2009, 0, 1]).isoWeek(), 1, "Jan 1 2009 should be iso week 1"); + test.equal(moment([2009, 0, 4]).isoWeek(), 1, "Jan 4 2009 should be iso week 1"); + test.equal(moment([2009, 0, 5]).isoWeek(), 2, "Jan 5 2009 should be iso week 2"); + test.equal(moment([2009, 0, 11]).isoWeek(), 2, "Jan 11 2009 should be iso week 2"); + test.equal(moment([2009, 0, 13]).isoWeek(), 3, "Jan 12 2009 should be iso week 3"); + + test.done(); + }, + + "iso weeks year starting friday" : function (test) { + test.expect(6); + + test.equal(moment([2009, 11, 28]).isoWeek(), 53, "Dec 28 2009 should be iso week 53"); + test.equal(moment([2010, 0, 1]).isoWeek(), 53, "Jan 1 2010 should be iso week 53"); + test.equal(moment([2010, 0, 3]).isoWeek(), 53, "Jan 3 2010 should be iso week 53"); + test.equal(moment([2010, 0, 4]).isoWeek(), 1, "Jan 4 2010 should be iso week 1"); + test.equal(moment([2010, 0, 10]).isoWeek(), 1, "Jan 10 2010 should be iso week 1"); + test.equal(moment([2010, 0, 11]).isoWeek(), 2, "Jan 11 2010 should be iso week 2"); + + test.done(); + }, + + "iso weeks year starting saturday" : function (test) { + test.expect(6); + + test.equal(moment([2010, 11, 27]).isoWeek(), 52, "Dec 27 2010 should be iso week 52"); + test.equal(moment([2011, 0, 1]).isoWeek(), 52, "Jan 1 2011 should be iso week 52"); + test.equal(moment([2011, 0, 2]).isoWeek(), 52, "Jan 2 2011 should be iso week 52"); + test.equal(moment([2011, 0, 3]).isoWeek(), 1, "Jan 3 2011 should be iso week 1"); + test.equal(moment([2011, 0, 9]).isoWeek(), 1, "Jan 9 2011 should be iso week 1"); + test.equal(moment([2011, 0, 10]).isoWeek(), 2, "Jan 10 2011 should be iso week 2"); + + test.done(); + }, + + "iso weeks year starting sunday formatted" : function (test) { + test.expect(5); + + test.equal(moment([2012, 0, 1]).format('W WW Wo'), '52 52 52nd', "Jan 1 2012 should be iso week 52"); + test.equal(moment([2012, 0, 2]).format('W WW Wo'), '1 01 1st', "Jan 2 2012 should be iso week 1"); + test.equal(moment([2012, 0, 8]).format('W WW Wo'), '1 01 1st', "Jan 8 2012 should be iso week 1"); + test.equal(moment([2012, 0, 9]).format('W WW Wo'), '2 02 2nd', "Jan 9 2012 should be iso week 2"); + test.equal(moment([2012, 0, 15]).format('W WW Wo'), '2 02 2nd', "Jan 15 2012 should be iso week 2"); + + test.done(); + }, + + "weeks plural year starting sunday" : function (test) { + test.expect(5); + + test.equal(moment([2012, 0, 1]).weeks(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).weeks(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).weeks(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).weeks(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).weeks(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "iso weeks plural year starting sunday" : function (test) { + test.expect(5); + + test.equal(moment([2012, 0, 1]).isoWeeks(), 52, "Jan 1 2012 should be iso week 52"); + test.equal(moment([2012, 0, 2]).isoWeeks(), 1, "Jan 2 2012 should be iso week 1"); + test.equal(moment([2012, 0, 8]).isoWeeks(), 1, "Jan 8 2012 should be iso week 1"); + test.equal(moment([2012, 0, 9]).isoWeeks(), 2, "Jan 9 2012 should be iso week 2"); + test.equal(moment([2012, 0, 15]).isoWeeks(), 2, "Jan 15 2012 should be iso week 2"); + + test.done(); + }, + + "weeks setter" : function (test) { + test.expect(5); + + test.equal(moment([2012, 0, 1]).week(30).week(), 30, "Setting Jan 1 2012 to week 30 should work"); + test.equal(moment([2012, 0, 7]).week(30).week(), 30, "Setting Jan 7 2012 to week 30 should work"); + test.equal(moment([2012, 0, 8]).week(30).week(), 30, "Setting Jan 8 2012 to week 30 should work"); + test.equal(moment([2012, 0, 14]).week(30).week(), 30, "Setting Jan 14 2012 to week 30 should work"); + test.equal(moment([2012, 0, 15]).week(30).week(), 30, "Setting Jan 15 2012 to week 30 should work"); + + test.done(); + }, + + "iso weeks setter" : function (test) { + test.expect(5); + + test.equal(moment([2012, 0, 1]).isoWeeks(25).isoWeeks(), 25, "Setting Jan 1 2012 to week 25 should work"); + test.equal(moment([2012, 0, 2]).isoWeeks(24).isoWeeks(), 24, "Setting Jan 2 2012 to week 24 should work"); + test.equal(moment([2012, 0, 8]).isoWeeks(23).isoWeeks(), 23, "Setting Jan 8 2012 to week 23 should work"); + test.equal(moment([2012, 0, 9]).isoWeeks(22).isoWeeks(), 22, "Setting Jan 9 2012 to week 22 should work"); + test.equal(moment([2012, 0, 15]).isoWeeks(21).isoWeeks(), 21, "Setting Jan 15 2012 to week 21 should work"); + + test.done(); + }, + + "iso weeks setter day of year" : function (test) { + test.expect(6); + + test.equal(moment([2012, 0, 1]).isoWeek(1).dayOfYear(), 9, "Setting Jan 1 2012 to week 1 should be day of year 8"); + test.equal(moment([2012, 0, 1]).isoWeek(1).year(), 2011, "Setting Jan 1 2012 to week 1 should be year 2011"); + test.equal(moment([2012, 0, 2]).isoWeek(1).dayOfYear(), 2, "Setting Jan 2 2012 to week 1 should be day of year 2"); + test.equal(moment([2012, 0, 8]).isoWeek(1).dayOfYear(), 8, "Setting Jan 8 2012 to week 1 should be day of year 8"); + test.equal(moment([2012, 0, 9]).isoWeek(1).dayOfYear(), 2, "Setting Jan 9 2012 to week 1 should be day of year 2"); + test.equal(moment([2012, 0, 15]).isoWeek(1).dayOfYear(), 8, "Setting Jan 15 2012 to week 1 should be day of year 8"); + + test.done(); + }, + + "years with iso week 53" : function (test) { + test.expect(71); + + // Based on a table taken from http://en.wikipedia.org/wiki/ISO_week_date + // (as downloaded on 2014-01-06) listing the 71 years in a 400-year cycle + // that have 53 weeks; in this case reflecting the 2000 based cycle + test.equal(moment([2004, 11, 31]).isoWeek(), 53, "Dec 31 2004 should be iso week 53"); + test.equal(moment([2009, 11, 31]).isoWeek(), 53, "Dec 31 2009 should be iso week 53"); + test.equal(moment([2015, 11, 31]).isoWeek(), 53, "Dec 31 2015 should be iso week 53"); + test.equal(moment([2020, 11, 31]).isoWeek(), 53, "Dec 31 2020 should be iso week 53"); + test.equal(moment([2026, 11, 31]).isoWeek(), 53, "Dec 31 2026 should be iso week 53"); + test.equal(moment([2032, 11, 31]).isoWeek(), 53, "Dec 31 2032 should be iso week 53"); + test.equal(moment([2037, 11, 31]).isoWeek(), 53, "Dec 31 2037 should be iso week 53"); + test.equal(moment([2043, 11, 31]).isoWeek(), 53, "Dec 31 2043 should be iso week 53"); + test.equal(moment([2048, 11, 31]).isoWeek(), 53, "Dec 31 2048 should be iso week 53"); + test.equal(moment([2054, 11, 31]).isoWeek(), 53, "Dec 31 2054 should be iso week 53"); + test.equal(moment([2060, 11, 31]).isoWeek(), 53, "Dec 31 2060 should be iso week 53"); + test.equal(moment([2065, 11, 31]).isoWeek(), 53, "Dec 31 2065 should be iso week 53"); + test.equal(moment([2071, 11, 31]).isoWeek(), 53, "Dec 31 2071 should be iso week 53"); + test.equal(moment([2076, 11, 31]).isoWeek(), 53, "Dec 31 2076 should be iso week 53"); + test.equal(moment([2082, 11, 31]).isoWeek(), 53, "Dec 31 2082 should be iso week 53"); + test.equal(moment([2088, 11, 31]).isoWeek(), 53, "Dec 31 2088 should be iso week 53"); + test.equal(moment([2093, 11, 31]).isoWeek(), 53, "Dec 31 2093 should be iso week 53"); + test.equal(moment([2099, 11, 31]).isoWeek(), 53, "Dec 31 2099 should be iso week 53"); + test.equal(moment([2105, 11, 31]).isoWeek(), 53, "Dec 31 2105 should be iso week 53"); + test.equal(moment([2111, 11, 31]).isoWeek(), 53, "Dec 31 2111 should be iso week 53"); + test.equal(moment([2116, 11, 31]).isoWeek(), 53, "Dec 31 2116 should be iso week 53"); + test.equal(moment([2122, 11, 31]).isoWeek(), 53, "Dec 31 2122 should be iso week 53"); + test.equal(moment([2128, 11, 31]).isoWeek(), 53, "Dec 31 2128 should be iso week 53"); + test.equal(moment([2133, 11, 31]).isoWeek(), 53, "Dec 31 2133 should be iso week 53"); + test.equal(moment([2139, 11, 31]).isoWeek(), 53, "Dec 31 2139 should be iso week 53"); + test.equal(moment([2144, 11, 31]).isoWeek(), 53, "Dec 31 2144 should be iso week 53"); + test.equal(moment([2150, 11, 31]).isoWeek(), 53, "Dec 31 2150 should be iso week 53"); + test.equal(moment([2156, 11, 31]).isoWeek(), 53, "Dec 31 2156 should be iso week 53"); + test.equal(moment([2161, 11, 31]).isoWeek(), 53, "Dec 31 2161 should be iso week 53"); + test.equal(moment([2167, 11, 31]).isoWeek(), 53, "Dec 31 2167 should be iso week 53"); + test.equal(moment([2172, 11, 31]).isoWeek(), 53, "Dec 31 2172 should be iso week 53"); + test.equal(moment([2178, 11, 31]).isoWeek(), 53, "Dec 31 2178 should be iso week 53"); + test.equal(moment([2184, 11, 31]).isoWeek(), 53, "Dec 31 2184 should be iso week 53"); + test.equal(moment([2189, 11, 31]).isoWeek(), 53, "Dec 31 2189 should be iso week 53"); + test.equal(moment([2195, 11, 31]).isoWeek(), 53, "Dec 31 2195 should be iso week 53"); + test.equal(moment([2201, 11, 31]).isoWeek(), 53, "Dec 31 2201 should be iso week 53"); + test.equal(moment([2207, 11, 31]).isoWeek(), 53, "Dec 31 2207 should be iso week 53"); + test.equal(moment([2212, 11, 31]).isoWeek(), 53, "Dec 31 2212 should be iso week 53"); + test.equal(moment([2218, 11, 31]).isoWeek(), 53, "Dec 31 2218 should be iso week 53"); + test.equal(moment([2224, 11, 31]).isoWeek(), 53, "Dec 31 2224 should be iso week 53"); + test.equal(moment([2229, 11, 31]).isoWeek(), 53, "Dec 31 2229 should be iso week 53"); + test.equal(moment([2235, 11, 31]).isoWeek(), 53, "Dec 31 2235 should be iso week 53"); + test.equal(moment([2240, 11, 31]).isoWeek(), 53, "Dec 31 2240 should be iso week 53"); + test.equal(moment([2246, 11, 31]).isoWeek(), 53, "Dec 31 2246 should be iso week 53"); + test.equal(moment([2252, 11, 31]).isoWeek(), 53, "Dec 31 2252 should be iso week 53"); + test.equal(moment([2257, 11, 31]).isoWeek(), 53, "Dec 31 2257 should be iso week 53"); + test.equal(moment([2263, 11, 31]).isoWeek(), 53, "Dec 31 2263 should be iso week 53"); + test.equal(moment([2268, 11, 31]).isoWeek(), 53, "Dec 31 2268 should be iso week 53"); + test.equal(moment([2274, 11, 31]).isoWeek(), 53, "Dec 31 2274 should be iso week 53"); + test.equal(moment([2280, 11, 31]).isoWeek(), 53, "Dec 31 2280 should be iso week 53"); + test.equal(moment([2285, 11, 31]).isoWeek(), 53, "Dec 31 2285 should be iso week 53"); + test.equal(moment([2291, 11, 31]).isoWeek(), 53, "Dec 31 2291 should be iso week 53"); + test.equal(moment([2296, 11, 31]).isoWeek(), 53, "Dec 31 2296 should be iso week 53"); + test.equal(moment([2303, 11, 31]).isoWeek(), 53, "Dec 31 2303 should be iso week 53"); + test.equal(moment([2308, 11, 31]).isoWeek(), 53, "Dec 31 2308 should be iso week 53"); + test.equal(moment([2314, 11, 31]).isoWeek(), 53, "Dec 31 2314 should be iso week 53"); + test.equal(moment([2320, 11, 31]).isoWeek(), 53, "Dec 31 2320 should be iso week 53"); + test.equal(moment([2325, 11, 31]).isoWeek(), 53, "Dec 31 2325 should be iso week 53"); + test.equal(moment([2331, 11, 31]).isoWeek(), 53, "Dec 31 2331 should be iso week 53"); + test.equal(moment([2336, 11, 31]).isoWeek(), 53, "Dec 31 2336 should be iso week 53"); + test.equal(moment([2342, 11, 31]).isoWeek(), 53, "Dec 31 2342 should be iso week 53"); + test.equal(moment([2348, 11, 31]).isoWeek(), 53, "Dec 31 2348 should be iso week 53"); + test.equal(moment([2353, 11, 31]).isoWeek(), 53, "Dec 31 2353 should be iso week 53"); + test.equal(moment([2359, 11, 31]).isoWeek(), 53, "Dec 31 2359 should be iso week 53"); + test.equal(moment([2364, 11, 31]).isoWeek(), 53, "Dec 31 2364 should be iso week 53"); + test.equal(moment([2370, 11, 31]).isoWeek(), 53, "Dec 31 2370 should be iso week 53"); + test.equal(moment([2376, 11, 31]).isoWeek(), 53, "Dec 31 2376 should be iso week 53"); + test.equal(moment([2381, 11, 31]).isoWeek(), 53, "Dec 31 2381 should be iso week 53"); + test.equal(moment([2387, 11, 31]).isoWeek(), 53, "Dec 31 2387 should be iso week 53"); + test.equal(moment([2392, 11, 31]).isoWeek(), 53, "Dec 31 2392 should be iso week 53"); + test.equal(moment([2398, 11, 31]).isoWeek(), 53, "Dec 31 2398 should be iso week 53"); + + test.done(); + }, + + "count years with iso week 53" : function (test) { + test.expect(1); + + // Based on http://en.wikipedia.org/wiki/ISO_week_date (as seen on 2014-01-06) + // stating that there are 71 years in a 400-year cycle that have 53 weeks; + // in this case reflecting the 2000 based cycle + var count = 0, i; + for (i = 0; i < 400; i++) { + count += (moment([2000 + i, 11, 31]).isoWeek() === 53) ? 1 : 0; + } + test.equal(count, 71, "Should have 71 years in 400-year cycle with iso week 53"); + + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.weeksInYear = { + "isoWeeksInYear": function (test) { + test.equal(moment([2004]).isoWeeksInYear(), 53, "2004 has 53 iso weeks"); + test.equal(moment([2005]).isoWeeksInYear(), 52, "2005 has 53 iso weeks"); + test.equal(moment([2006]).isoWeeksInYear(), 52, "2006 has 53 iso weeks"); + test.equal(moment([2007]).isoWeeksInYear(), 52, "2007 has 52 iso weeks"); + test.equal(moment([2008]).isoWeeksInYear(), 52, "2008 has 53 iso weeks"); + test.equal(moment([2009]).isoWeeksInYear(), 53, "2009 has 53 iso weeks"); + test.equal(moment([2010]).isoWeeksInYear(), 52, "2010 has 52 iso weeks"); + test.equal(moment([2011]).isoWeeksInYear(), 52, "2011 has 52 iso weeks"); + test.equal(moment([2012]).isoWeeksInYear(), 52, "2012 has 52 iso weeks"); + test.equal(moment([2013]).isoWeeksInYear(), 52, "2013 has 52 iso weeks"); + test.equal(moment([2014]).isoWeeksInYear(), 52, "2014 has 52 iso weeks"); + test.equal(moment([2015]).isoWeeksInYear(), 53, "2015 has 53 iso weeks"); + + test.done(); + }, + + "weeksInYear doy/dow = 1/4": function (test) { + moment.locale('1/4', {week: {dow: 1, doy: 4}}); + + test.equal(moment([2004]).weeksInYear(), 53, "2004 has 53 weeks"); + test.equal(moment([2005]).weeksInYear(), 52, "2005 has 53 weeks"); + test.equal(moment([2006]).weeksInYear(), 52, "2006 has 53 weeks"); + test.equal(moment([2007]).weeksInYear(), 52, "2007 has 52 weeks"); + test.equal(moment([2008]).weeksInYear(), 52, "2008 has 53 weeks"); + test.equal(moment([2009]).weeksInYear(), 53, "2009 has 53 weeks"); + test.equal(moment([2010]).weeksInYear(), 52, "2010 has 52 weeks"); + test.equal(moment([2011]).weeksInYear(), 52, "2011 has 52 weeks"); + test.equal(moment([2012]).weeksInYear(), 52, "2012 has 52 weeks"); + test.equal(moment([2013]).weeksInYear(), 52, "2013 has 52 weeks"); + test.equal(moment([2014]).weeksInYear(), 52, "2014 has 52 weeks"); + test.equal(moment([2015]).weeksInYear(), 53, "2015 has 53 weeks"); + + test.done(); + }, + + "weeksInYear doy/dow = 6/12": function (test) { + moment.locale('6/12', {week: {dow: 6, doy: 12}}); + + test.equal(moment([2004]).weeksInYear(), 53, "2004 has 53 weeks"); + test.equal(moment([2005]).weeksInYear(), 52, "2005 has 53 weeks"); + test.equal(moment([2006]).weeksInYear(), 52, "2006 has 53 weeks"); + test.equal(moment([2007]).weeksInYear(), 52, "2007 has 52 weeks"); + test.equal(moment([2008]).weeksInYear(), 52, "2008 has 53 weeks"); + test.equal(moment([2009]).weeksInYear(), 52, "2009 has 53 weeks"); + test.equal(moment([2010]).weeksInYear(), 53, "2010 has 52 weeks"); + test.equal(moment([2011]).weeksInYear(), 52, "2011 has 52 weeks"); + test.equal(moment([2012]).weeksInYear(), 52, "2012 has 52 weeks"); + test.equal(moment([2013]).weeksInYear(), 52, "2013 has 52 weeks"); + test.equal(moment([2014]).weeksInYear(), 52, "2014 has 52 weeks"); + test.equal(moment([2015]).weeksInYear(), 52, "2015 has 53 weeks"); + + test.done(); + }, + + "weeksInYear doy/dow = 1/7": function (test) { + moment.locale('1/7', {week: {dow: 1, doy: 7}}); + + test.equal(moment([2004]).weeksInYear(), 52, "2004 has 53 weeks"); + test.equal(moment([2005]).weeksInYear(), 52, "2005 has 53 weeks"); + test.equal(moment([2006]).weeksInYear(), 53, "2006 has 53 weeks"); + test.equal(moment([2007]).weeksInYear(), 52, "2007 has 52 weeks"); + test.equal(moment([2008]).weeksInYear(), 52, "2008 has 53 weeks"); + test.equal(moment([2009]).weeksInYear(), 52, "2009 has 53 weeks"); + test.equal(moment([2010]).weeksInYear(), 52, "2010 has 52 weeks"); + test.equal(moment([2011]).weeksInYear(), 52, "2011 has 52 weeks"); + test.equal(moment([2012]).weeksInYear(), 53, "2012 has 52 weeks"); + test.equal(moment([2013]).weeksInYear(), 52, "2013 has 52 weeks"); + test.equal(moment([2014]).weeksInYear(), 52, "2014 has 52 weeks"); + test.equal(moment([2015]).weeksInYear(), 52, "2015 has 53 weeks"); + + test.done(); + }, + + "weeksInYear doy/dow = 0/6": function (test) { + moment.locale('0/6', {week: {dow: 0, doy: 6}}); + + test.equal(moment([2004]).weeksInYear(), 52, "2004 has 53 weeks"); + test.equal(moment([2005]).weeksInYear(), 53, "2005 has 53 weeks"); + test.equal(moment([2006]).weeksInYear(), 52, "2006 has 53 weeks"); + test.equal(moment([2007]).weeksInYear(), 52, "2007 has 52 weeks"); + test.equal(moment([2008]).weeksInYear(), 52, "2008 has 53 weeks"); + test.equal(moment([2009]).weeksInYear(), 52, "2009 has 53 weeks"); + test.equal(moment([2010]).weeksInYear(), 52, "2010 has 52 weeks"); + test.equal(moment([2011]).weeksInYear(), 53, "2011 has 52 weeks"); + test.equal(moment([2012]).weeksInYear(), 52, "2012 has 52 weeks"); + test.equal(moment([2013]).weeksInYear(), 52, "2013 has 52 weeks"); + test.equal(moment([2014]).weeksInYear(), 52, "2014 has 52 weeks"); + test.equal(moment([2015]).weeksInYear(), 52, "2015 has 53 weeks"); + + test.done(); + } +}; + +var moment = require('../../moment'); + +exports.zoneSwitching = { + setUp : function (done) { + moment.locale('en'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + + done(); + }, + + "local to utc, keepLocalTime = true" : function (test) { + var m = moment(), + fmt = "YYYY-DD-MM HH:mm:ss"; + test.equal(m.clone().utc(true).format(fmt), m.format(fmt), "local to utc failed to keep local time"); + + test.done(); + }, + + "local to utc, keepLocalTime = false" : function (test) { + var m = moment(); + test.equal(m.clone().utc().valueOf(), m.valueOf(), "local to utc failed to keep utc time (implicit)"); + test.equal(m.clone().utc(false).valueOf(), m.valueOf(), "local to utc failed to keep utc time (explicit)"); + + test.done(); + }, + + "local to zone, keepLocalTime = true" : function (test) { + var m = moment(), + fmt = "YYYY-DD-MM HH:mm:ss", + z; + + // Apparently there is -12:00 and +14:00 + // http://en.wikipedia.org/wiki/UTC+14:00 + // http://en.wikipedia.org/wiki/UTC-12:00 + for (z = -12; z <= 14; ++z) { + test.equal(m.clone().zone(z * 60, true).format(fmt), m.format(fmt), + "local to zone(" + z + ":00) failed to keep local time"); + } + + test.done(); + }, + + "local to zone, keepLocalTime = false" : function (test) { + var m = moment(), + z; + + // Apparently there is -12:00 and +14:00 + // http://en.wikipedia.org/wiki/UTC+14:00 + // http://en.wikipedia.org/wiki/UTC-12:00 + for (z = -12; z <= 14; ++z) { + test.equal(m.clone().zone(z * 60).valueOf(), m.valueOf(), + "local to zone(" + z + ":00) failed to keep utc time (implicit)"); + test.equal(m.clone().zone(z * 60, false).valueOf(), m.valueOf(), + "local to zone(" + z + ":00) failed to keep utc time (explicit)"); + } + + test.done(); + }, + + "utc to local, keepLocalTime = true" : function (test) { + var um = moment.utc(), + fmt = "YYYY-DD-MM HH:mm:ss"; + + test.equal(um.clone().local(true).format(fmt), um.format(fmt), "utc to local failed to keep local time"); + + test.done(); + }, + + "utc to local, keepLocalTime = false" : function (test) { + var um = moment.utc(); + test.equal(um.clone().local().valueOf(), um.valueOf(), "utc to local failed to keep utc time (implicit)"); + test.equal(um.clone().local(false).valueOf(), um.valueOf(), "utc to local failed to keep utc time (explicit)"); + + test.done(); + }, + + "zone to local, keepLocalTime = true" : function (test) { + var m = moment(), + fmt = "YYYY-DD-MM HH:mm:ss", + z; + + // Apparently there is -12:00 and +14:00 + // http://en.wikipedia.org/wiki/UTC+14:00 + // http://en.wikipedia.org/wiki/UTC-12:00 + for (z = -12; z <= 14; ++z) { + m.zone(z * 60); + + test.equal(m.clone().local(true).format(fmt), m.format(fmt), + "zone(" + z + ":00) to local failed to keep local time"); + } + + test.done(); + }, + + "zone to local, keepLocalTime = false" : function (test) { + var m = moment(), + z; + + // Apparently there is -12:00 and +14:00 + // http://en.wikipedia.org/wiki/UTC+14:00 + // http://en.wikipedia.org/wiki/UTC-12:00 + for (z = -12; z <= 14; ++z) { + m.zone(z * 60); + + test.equal(m.clone().local(false).valueOf(), m.valueOf(), + "zone(" + z + ":00) to local failed to keep utc time (explicit)"); + test.equal(m.clone().local().valueOf(), m.valueOf(), + "zone(" + z + ":00) to local failed to keep utc time (implicit)"); + } + + test.done(); + } +}; + +var moment = require("../../moment"); + +exports.zones = { + setUp : function (done) { + moment.locale('en'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + + done(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "set zone" : function (test) { + var zone = moment(); + + zone.zone(0); + test.equal(zone.zone(), 0, "should be able to set the zone to 0"); + + zone.zone(60); + test.equal(zone.zone(), 60, "should be able to set the zone to 60"); + + zone.zone(-60); + test.equal(zone.zone(), -60, "should be able to set the zone to -60"); + + test.done(); + }, + + "set zone shorthand" : function (test) { + var zone = moment(); + + zone.zone(1); + test.equal(zone.zone(), 60, "setting the zone to 1 should imply hours and convert to 60"); + + zone.zone(-1); + test.equal(zone.zone(), -60, "setting the zone to -1 should imply hours and convert to -60"); + + zone.zone(15); + test.equal(zone.zone(), 900, "setting the zone to 15 should imply hours and convert to 900"); + + zone.zone(-15); + test.equal(zone.zone(), -900, "setting the zone to -15 should imply hours and convert to -900"); + + zone.zone(16); + test.equal(zone.zone(), 16, "setting the zone to 16 should imply minutes"); + + zone.zone(-16); + test.equal(zone.zone(), -16, "setting the zone to -16 should imply minutes"); + + test.done(); + }, + + "set zone with string" : function (test) { + var zone = moment(); + + zone.zone("+00:00"); + test.equal(zone.zone(), 0, "set the zone with a timezone string"); + + zone.zone("2013-03-07T07:00:00-08:00"); + test.equal(zone.zone(), 480, "set the zone with a string that does not begin with the timezone"); + + zone.zone("2013-03-07T07:00:00+0100"); + test.equal(zone.zone(), -60, "set the zone with a string that uses the +0000 syntax"); + + zone.zone("03-07-2013T07:00:00-08:00"); + test.equal(zone.zone(), 480, "set the zone with a string with a non-ISO 8601 date"); + + test.done(); + }, + + "change hours when changing the zone" : function (test) { + var zone = moment.utc([2000, 0, 1, 6]); + + zone.zone(0); + test.equal(zone.hour(), 6, "UTC 6AM should be 6AM at +0000"); + + zone.zone(60); + test.equal(zone.hour(), 5, "UTC 6AM should be 5AM at -0100"); + + zone.zone(-60); + test.equal(zone.hour(), 7, "UTC 6AM should be 7AM at +0100"); + + test.done(); + }, + + "change minutes when changing the zone" : function (test) { + var zone = moment.utc([2000, 0, 1, 6, 31]); + + zone.zone(0); + test.equal(zone.format("HH:mm"), "06:31", "UTC 6:31AM should be 6:31AM at +0000"); + + zone.zone(30); + test.equal(zone.format("HH:mm"), "06:01", "UTC 6:31AM should be 6:01AM at -0030"); + + zone.zone(-30); + test.equal(zone.format("HH:mm"), "07:01", "UTC 6:31AM should be 7:01AM at +0030"); + + zone.zone(1380); + test.equal(zone.format("HH:mm"), "07:31", "UTC 6:31AM should be 7:31AM at +1380"); + + test.done(); + }, + + "distance from the unix epoch" : function (test) { + var zoneA = moment(), + zoneB = moment(zoneA), + zoneC = moment(zoneA), + zoneD = moment(zoneA), + zoneE = moment(zoneA); + + zoneB.utc(); + test.equal(+zoneA, +zoneB, "moment should equal moment.utc"); + + zoneC.zone(-60); + test.equal(+zoneA, +zoneC, "moment should equal moment.zone(-60)"); + + zoneD.zone(480); + test.equal(+zoneA, +zoneD, "moment should equal moment.zone(480)"); + + zoneE.zone(1000); + test.equal(+zoneA, +zoneE, "moment should equal moment.zone(1000)"); + + test.done(); + }, + + "update offset after changing any values" : function (test) { + var oldOffset = moment.updateOffset, + m = moment.utc([2000, 6, 1]); + + moment.updateOffset = function (mom, keepTime) { + if (mom.__doChange) { + if (+mom > 962409600000) { + mom.zone(120, keepTime); + } else { + mom.zone(60, keepTime); + } + } + }; + + test.equal(m.format("ZZ"), "+0000", "should be at +0000"); + test.equal(m.format("HH:mm"), "00:00", "should start 12AM at +0000 timezone"); + + m.__doChange = true; + m.add(1, 'h'); + + test.equal(m.format("ZZ"), "-0200", "should be at -0200"); + test.equal(m.format("HH:mm"), "23:00", "1AM at +0000 should be 11PM at -0200 timezone"); + + m.subtract(1, 'h'); + + test.equal(m.format("ZZ"), "-0100", "should be at -0100"); + test.equal(m.format("HH:mm"), "23:00", "12AM at +0000 should be 11PM at -0100 timezone"); + + moment.updateOffset = oldOffset; + + test.done(); + }, + + "getters and setters" : function (test) { + var a = moment([2011, 5, 20]); + + test.equal(a.clone().zone(120).year(2012).year(), 2012, "should get and set year correctly"); + test.equal(a.clone().zone(120).month(1).month(), 1, "should get and set month correctly"); + test.equal(a.clone().zone(120).date(2).date(), 2, "should get and set date correctly"); + test.equal(a.clone().zone(120).day(1).day(), 1, "should get and set day correctly"); + test.equal(a.clone().zone(120).hour(1).hour(), 1, "should get and set hour correctly"); + test.equal(a.clone().zone(120).minute(1).minute(), 1, "should get and set minute correctly"); + + test.done(); + }, + + "getters" : function (test) { + var a = moment.utc([2012, 0, 1, 0, 0, 0]); + + test.equal(a.clone().zone(120).year(), 2011, "should get year correctly"); + test.equal(a.clone().zone(120).month(), 11, "should get month correctly"); + test.equal(a.clone().zone(120).date(), 31, "should get date correctly"); + test.equal(a.clone().zone(120).hour(), 22, "should get hour correctly"); + test.equal(a.clone().zone(120).minute(), 0, "should get minute correctly"); + + test.equal(a.clone().zone(-120).year(), 2012, "should get year correctly"); + test.equal(a.clone().zone(-120).month(), 0, "should get month correctly"); + test.equal(a.clone().zone(-120).date(), 1, "should get date correctly"); + test.equal(a.clone().zone(-120).hour(), 2, "should get hour correctly"); + test.equal(a.clone().zone(-120).minute(), 0, "should get minute correctly"); + + test.equal(a.clone().zone(-90).year(), 2012, "should get year correctly"); + test.equal(a.clone().zone(-90).month(), 0, "should get month correctly"); + test.equal(a.clone().zone(-90).date(), 1, "should get date correctly"); + test.equal(a.clone().zone(-90).hour(), 1, "should get hour correctly"); + test.equal(a.clone().zone(-90).minute(), 30, "should get minute correctly"); + + test.done(); + }, + + "from" : function (test) { + var zoneA = moment(), + zoneB = moment(zoneA).zone(720), + zoneC = moment(zoneA).zone(360), + zoneD = moment(zoneA).zone(-690), + other = moment(zoneA).add(35, 'm'); + + test.equal(zoneA.from(other), zoneB.from(other), "moment#from should be the same in all zones"); + test.equal(zoneA.from(other), zoneC.from(other), "moment#from should be the same in all zones"); + test.equal(zoneA.from(other), zoneD.from(other), "moment#from should be the same in all zones"); + + test.done(); + }, + + "diff" : function (test) { + var zoneA = moment(), + zoneB = moment(zoneA).zone(720), + zoneC = moment(zoneA).zone(360), + zoneD = moment(zoneA).zone(-690), + other = moment(zoneA).add(35, 'm'); + + test.equal(zoneA.diff(other), zoneB.diff(other), "moment#diff should be the same in all zones"); + test.equal(zoneA.diff(other), zoneC.diff(other), "moment#diff should be the same in all zones"); + test.equal(zoneA.diff(other), zoneD.diff(other), "moment#diff should be the same in all zones"); + + test.equal(zoneA.diff(other, 'minute', true), zoneB.diff(other, 'minute', true), "moment#diff should be the same in all zones"); + test.equal(zoneA.diff(other, 'minute', true), zoneC.diff(other, 'minute', true), "moment#diff should be the same in all zones"); + test.equal(zoneA.diff(other, 'minute', true), zoneD.diff(other, 'minute', true), "moment#diff should be the same in all zones"); + + test.equal(zoneA.diff(other, 'hour', true), zoneB.diff(other, 'hour', true), "moment#diff should be the same in all zones"); + test.equal(zoneA.diff(other, 'hour', true), zoneC.diff(other, 'hour', true), "moment#diff should be the same in all zones"); + test.equal(zoneA.diff(other, 'hour', true), zoneD.diff(other, 'hour', true), "moment#diff should be the same in all zones"); + + test.done(); + }, + + "unix offset and timestamp" : function (test) { + var zoneA = moment(), + zoneB = moment(zoneA).zone(720), + zoneC = moment(zoneA).zone(360), + zoneD = moment(zoneA).zone(-690); + + test.equal(zoneA.unix(), zoneB.unix(), "moment#unix should be the same in all zones"); + test.equal(zoneA.unix(), zoneC.unix(), "moment#unix should be the same in all zones"); + test.equal(zoneA.unix(), zoneD.unix(), "moment#unix should be the same in all zones"); + + test.equal(+zoneA, +zoneB, "moment#valueOf should be the same in all zones"); + test.equal(+zoneA, +zoneC, "moment#valueOf should be the same in all zones"); + test.equal(+zoneA, +zoneD, "moment#valueOf should be the same in all zones"); + + test.done(); + }, + + "cloning" : function (test) { + test.equal(moment().zone(120).clone().zone(), 120, "explicit cloning should retain the zone"); + test.equal(moment().zone(-120).clone().zone(), -120, "explicit cloning should retain the zone"); + test.equal(moment(moment().zone(120)).zone(), 120, "implicit cloning should retain the zone"); + test.equal(moment(moment().zone(-120)).zone(), -120, "implicit cloning should retain the zone"); + + test.done(); + }, + + "start of / end of" : function (test) { + var a = moment.utc([2010, 1, 2, 0, 0, 0]).zone(450); + + test.equal(a.clone().startOf('day').hour(), 0, "start of day should work on moments with a zone"); + test.equal(a.clone().startOf('day').minute(), 0, "start of day should work on moments with a zone"); + test.equal(a.clone().startOf('hour').minute(), 0, "start of hour should work on moments with a zone"); + + test.equal(a.clone().endOf('day').hour(), 23, "end of day should work on moments with a zone"); + test.equal(a.clone().endOf('day').minute(), 59, "end of day should work on moments with a zone"); + test.equal(a.clone().endOf('hour').minute(), 59, "end of hour should work on moments with a zone"); + + test.done(); + }, + + "reset zone with moment#utc" : function (test) { + var a = moment.utc([2012]).zone(480); + + test.equal(a.clone().hour(), 16, "different zone should have different hour"); + test.equal(a.clone().utc().hour(), 0, "calling moment#utc should reset the offset"); + + test.done(); + }, + + "reset zone with moment#local" : function (test) { + var a = moment([2012]).zone(480); + + test.equal(a.clone().local().hour(), 0, "calling moment#local should reset the offset"); + + test.done(); + }, + + "toDate" : function (test) { + var zoneA = new Date(), + zoneB = moment(zoneA).zone(720).toDate(), + zoneC = moment(zoneA).zone(360).toDate(), + zoneD = moment(zoneA).zone(-690).toDate(); + + test.equal(+zoneA, +zoneB, "moment#toDate should output a date with the right unix timestamp"); + test.equal(+zoneA, +zoneC, "moment#toDate should output a date with the right unix timestamp"); + test.equal(+zoneA, +zoneD, "moment#toDate should output a date with the right unix timestamp"); + + test.done(); + }, + + "same / before / after" : function (test) { + var zoneA = moment().utc(), + zoneB = moment(zoneA).zone(120), + zoneC = moment(zoneA).zone(-120); + + test.ok(zoneA.isSame(zoneB), "two moments with different offsets should be the same"); + test.ok(zoneA.isSame(zoneC), "two moments with different offsets should be the same"); + + test.ok(zoneA.isSame(zoneB, 'hour'), "two moments with different offsets should be the same hour"); + test.ok(zoneA.isSame(zoneC, 'hour'), "two moments with different offsets should be the same hour"); + + zoneA.add(1, 'hour'); + + test.ok(zoneA.isAfter(zoneB), "isAfter should work with two moments with different offsets"); + test.ok(zoneA.isAfter(zoneC), "isAfter should work with two moments with different offsets"); + + test.ok(zoneA.isAfter(zoneB, 'hour'), "isAfter:hour should work with two moments with different offsets"); + test.ok(zoneA.isAfter(zoneC, 'hour'), "isAfter:hour should work with two moments with different offsets"); + + zoneA.subtract(2, 'hour'); + + test.ok(zoneA.isBefore(zoneB), "isBefore should work with two moments with different offsets"); + test.ok(zoneA.isBefore(zoneC), "isBefore should work with two moments with different offsets"); + + test.ok(zoneA.isBefore(zoneB, 'hour'), "isBefore:hour should work with two moments with different offsets"); + test.ok(zoneA.isBefore(zoneC, 'hour'), "isBefore:hour should work with two moments with different offsets"); + + test.done(); + }, + + "add / subtract over dst" : function (test) { + var oldOffset = moment.updateOffset, + m = moment.utc([2000, 2, 31, 3]); + + moment.updateOffset = function (mom, keepTime) { + if (mom.clone().utc().month() > 2) { + mom.zone(-60, keepTime); + } else { + mom.zone(0, keepTime); + } + }; + + test.equal(m.hour(), 3, "should start at 00:00"); + + m.add(24, 'hour'); + + test.equal(m.hour(), 4, "adding 24 hours should disregard dst"); + + m.subtract(24, 'hour'); + + test.equal(m.hour(), 3, "subtracting 24 hours should disregard dst"); + + m.add(1, 'day'); + + test.equal(m.hour(), 3, "adding 1 day should have the same hour"); + + m.subtract(1, 'day'); + + test.equal(m.hour(), 3, "subtracting 1 day should have the same hour"); + + m.add(1, 'month'); + + test.equal(m.hour(), 3, "adding 1 month should have the same hour"); + + m.subtract(1, 'month'); + + test.equal(m.hour(), 3, "subtracting 1 month should have the same hour"); + + moment.updateOffset = oldOffset; + + test.done(); + }, + + "isDST" : function (test) { + var oldOffset = moment.updateOffset; + + moment.updateOffset = function (mom, keepTime) { + if (mom.month() > 2 && mom.month() < 9) { + mom.zone(-60, keepTime); + } else { + mom.zone(0, keepTime); + } + }; + + test.ok(!moment().month(0).isDST(), "Jan should not be summer dst"); + test.ok(moment().month(6).isDST(), "Jul should be summer dst"); + test.ok(!moment().month(11).isDST(), "Dec should not be summer dst"); + + moment.updateOffset = function (mom) { + if (mom.month() > 2 && mom.month() < 9) { + mom.zone(0); + } else { + mom.zone(-60); + } + }; + + test.ok(moment().month(0).isDST(), "Jan should be winter dst"); + test.ok(!moment().month(6).isDST(), "Jul should not be winter dst"); + test.ok(moment().month(11).isDST(), "Dec should be winter dst"); + + moment.updateOffset = oldOffset; + + test.done(); + }, + + "zone names" : function (test) { + test.expect(8); + + test.equal(moment().zoneAbbr(), "", "Local zone abbr should be empty"); + test.equal(moment().format('z'), "", "Local zone formatted abbr should be empty"); + test.equal(moment().zoneName(), "", "Local zone name should be empty"); + test.equal(moment().format('zz'), "", "Local zone formatted name should be empty"); + + test.equal(moment.utc().zoneAbbr(), "UTC", "UTC zone abbr should be UTC"); + test.equal(moment.utc().format('z'), "UTC", "UTC zone formatted abbr should be UTC"); + test.equal(moment.utc().zoneName(), "Coordinated Universal Time", "UTC zone abbr should be Coordinated Universal Time"); + test.equal(moment.utc().format('zz'), "Coordinated Universal Time", "UTC zone formatted abbr should be Coordinated Universal Time"); + + test.done(); + }, + + "hours alignment with UTC" : function (test) { + test.expect(4); + + test.equals(moment().zone(120).hasAlignedHourOffset(), true); + test.equals(moment().zone(-180).hasAlignedHourOffset(), true); + test.equals(moment().zone(90).hasAlignedHourOffset(), false); + test.equals(moment().zone(-90).hasAlignedHourOffset(), false); + + test.done(); + }, + + "hours alignment with other zone" : function (test) { + test.expect(16); + + var m = moment().zone(120); + + test.equals(m.hasAlignedHourOffset(moment().zone(180)), true); + test.equals(m.hasAlignedHourOffset(moment().zone(-180)), true); + test.equals(m.hasAlignedHourOffset(moment().zone(90)), false); + test.equals(m.hasAlignedHourOffset(moment().zone(-90)), false); + + m = moment().zone(90); + + test.equals(m.hasAlignedHourOffset(moment().zone(180)), false); + test.equals(m.hasAlignedHourOffset(moment().zone(-180)), false); + test.equals(m.hasAlignedHourOffset(moment().zone(30)), true); + test.equals(m.hasAlignedHourOffset(moment().zone(-30)), true); + + m = moment().zone(-60); + + test.equals(m.hasAlignedHourOffset(moment().zone(180)), true); + test.equals(m.hasAlignedHourOffset(moment().zone(-180)), true); + test.equals(m.hasAlignedHourOffset(moment().zone(90)), false); + test.equals(m.hasAlignedHourOffset(moment().zone(-90)), false); + + m = moment().zone(25); + + test.equals(m.hasAlignedHourOffset(moment().zone(-35)), true); + test.equals(m.hasAlignedHourOffset(moment().zone(85)), true); + + test.equals(m.hasAlignedHourOffset(moment().zone(35)), false); + test.equals(m.hasAlignedHourOffset(moment().zone(-85)), false); + + test.done(); + }, + + "parse zone" : function (test) { + test.expect(2); + var m = moment("2013-01-01T00:00:00-13:00").parseZone(); + test.equal(m.zone(), 13 * 60); + test.equal(m.hours(), 0); + test.done(); + }, + + "parse zone static" : function (test) { + test.expect(2); + var m = moment.parseZone("2013-01-01T00:00:00-13:00"); + test.equal(m.zone(), 13 * 60); + test.equal(m.hours(), 0); + test.done(); + }, + + "parse zone with more arguments" : function (test) { + var m; + test.expect(3); + + m = moment.parseZone("2013 01 01 05 -13:00", "YYYY MM DD HH ZZ"); + test.equal(m.format(), "2013-01-01T05:00:00-13:00", "accept input and format"); + m = moment.parseZone("2013-01-01-13:00", "YYYY MM DD ZZ", true); + test.equal(m.isValid(), false, "accept input, format and strict flag"); + m = moment.parseZone("2013-01-01-13:00", ["DD MM YYYY ZZ", "YYYY MM DD ZZ"]); + test.equal(m.format(), "2013-01-01T00:00:00-13:00", "accept input and array of formats"); + + test.done(); + }, + + "parse zone with a timezone from the format string" : function (test) { + test.expect(1); + + var m = moment("11-12-2013 -0400 +1100", "DD-MM-YYYY ZZ #####").parseZone(); + + test.equal(m.zone(), 4 * 60); + test.done(); + }, + + "parse zone without a timezone included in the format string" : function (test) { + test.expect(1); + + var m = moment("11-12-2013 -0400 +1100", "DD-MM-YYYY").parseZone(); + + test.equal(m.zone(), -11 * 60); + test.done(); + }, + + "timezone format" : function (test) { + test.equal(moment().zone(-60).format('ZZ'), "+0100", "-60 -> +0100"); + test.equal(moment().zone(-90).format('ZZ'), "+0130", "-90 -> +0130"); + test.equal(moment().zone(-120).format('ZZ'), "+0200", "-120 -> +0200"); + + test.equal(moment().zone(+60).format('ZZ'), "-0100", "+60 -> -0100"); + test.equal(moment().zone(+90).format('ZZ'), "-0130", "+90 -> -0130"); + test.equal(moment().zone(+120).format('ZZ'), "-0200", "+120 -> -0200"); + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Afrikaans + *************************************************/ + +exports["locale:af"] = { + setUp : function (cb) { + moment.locale('af'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'Januarie Jan_Februarie Feb_Maart Mar_April Apr_Mei Mei_Junie Jun_Julie Jul_Augustus Aug_September Sep_Oktober Okt_November Nov_Desember Des'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sondag, Februarie 14de 2010, 3:25:50 nm'], + ['ddd, hA', 'Son, 3NM'], + ['M Mo MM MMMM MMM', '2 2de 02 Februarie Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14de 14'], + ['d do dddd ddd dd', '0 0de Sondag Son So'], + ['DDD DDDo DDDD', '45 45ste 045'], + ['w wo ww', '6 6de 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'nm NM'], + ['[the] DDDo [day of the year]', 'the 45ste day of the year'], + ['L', '14/02/2010'], + ['LL', '14 Februarie 2010'], + ['LLL', '14 Februarie 2010 15:25'], + ['LLLL', 'Sondag, 14 Februarie 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 Feb 2010'], + ['lll', '14 Feb 2010 15:25'], + ['llll', 'Son, 14 Feb 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1ste', '1ste'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2de', '2de'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3de', '3de'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4de', '4de'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5de', '5de'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6de', '6de'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7de', '7de'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8ste', '8ste'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9de', '9de'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10de', '10de'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11de', '11de'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12de', '12de'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13de', '13de'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14de', '14de'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15de', '15de'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16de', '16de'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17de', '17de'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18de', '18de'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19de', '19de'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20ste', '20ste'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21ste', '21ste'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22ste', '22ste'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23ste', '23ste'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24ste', '24ste'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25ste', '25ste'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26ste', '26ste'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27ste', '27ste'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28ste', '28ste'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29ste', '29ste'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30ste', '30ste'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31ste', '31ste'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'Januarie Jan_Februarie Feb_Maart Mar_April Apr_Mei Mei_Junie Jun_Julie Jul_Augustus Aug_September Sep_Oktober Okt_November Nov_Desember Des'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'Sondag Son So_Maandag Maa Ma_Dinsdag Din Di_Woensdag Woe Wo_Donderdag Don Do_Vrydag Vry Vr_Saterdag Sat Sa'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "'n paar sekondes", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "'n minuut", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "'n minuut", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minute", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minute", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "'n uur", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "'n uur", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ure", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ure", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ure", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "'n dag", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "'n dag", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dae", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "'n dag", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dae", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dae", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "'n maand", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "'n maand", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "'n maand", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 maande", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 maande", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 maande", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "'n maand", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 maande", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "'n jaar", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 jaar", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "'n jaar", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 jaar", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "oor 'n paar sekondes", "prefix"); + test.equal(moment(0).from(30000), "'n paar sekondes gelede", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "'n paar sekondes gelede", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "oor 'n paar sekondes", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "oor 5 dae", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Vandag om 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Vandag om 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Vandag om 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Môre om 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Vandag om 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Gister om 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [om] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [om] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [om] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[Laas] dddd [om] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[Laas] dddd [om] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[Laas] dddd [om] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52ste', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1ste', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1ste', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2de', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2de', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +// moment.js Moroccan arabic (ar-ma) tests +// author: Abdel Said : https://github.com/abdelsaid +var moment = require("../../moment"); + +exports["locale:ar-ma"] = { + setUp : function (cb) { + moment.locale('ar-ma'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'يناير:يناير_فبراير:فبراير_مارس:مارس_أبريل:أبريل_ماي:ماي_يونيو:يونيو_يوليوز:يوليوز_غشت:غشت_شتنبر:شتنبر_أكتوبر:أكتوبر_نونبر:نونبر_دجنبر:دجنبر'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(':'); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد, فبراير 14 2010, 3:25:50 pm'], + ['ddd, hA', 'احد, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 فبراير فبراير'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 الأحد احد ح'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['L', '14/02/2010'], + ['LL', '14 فبراير 2010'], + ['LLL', '14 فبراير 2010 15:25'], + ['LLLL', 'الأحد 14 فبراير 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 فبراير 2010'], + ['lll', '14 فبراير 2010 15:25'], + ['llll', 'احد 14 فبراير 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'يناير يناير_فبراير فبراير_مارس مارس_أبريل أبريل_ماي ماي_يونيو يونيو_يوليوز يوليوز_غشت غشت_شتنبر شتنبر_أكتوبر أكتوبر_نونبر نونبر_دجنبر دجنبر'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'الأحد احد ح_الإتنين اتنين ن_الثلاثاء ثلاثاء ث_الأربعاء اربعاء ر_الخميس خميس خ_الجمعة جمعة ج_السبت سبت س'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ثوان", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "دقيقة", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "دقيقة", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 دقائق", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 دقائق", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ساعة", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ساعة", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ساعات", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ساعات", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ساعات", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "يوم", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "يوم", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 أيام", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "يوم", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 أيام", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 أيام", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "شهر", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "شهر", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "شهر", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 أشهر", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 أشهر", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 أشهر", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "شهر", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 أشهر", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "سنة", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 سنوات", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "سنة", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 سنوات", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "في ثوان", "prefix"); + test.equal(moment(0).from(30000), "منذ ثوان", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "منذ ثوان", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "في ثوان", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "في 5 أيام", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "اليوم على الساعة 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "اليوم على الساعة 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "اليوم على الساعة 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "غدا على الساعة 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "اليوم على الساعة 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "أمس على الساعة 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + + // Saturday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 31]).week(), 1, "Dec 31 2011 should be week 1"); + test.equal(moment([2012, 0, 6]).week(), 1, "Jan 6 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 2, "Jan 7 2012 should be week 2"); + test.equal(moment([2012, 0, 13]).week(), 2, "Jan 13 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 3, "Jan 14 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 30]).week(), 1, "Dec 30 2006 should be week 1"); + test.equal(moment([2007, 0, 5]).week(), 1, "Jan 5 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 2, "Jan 6 2007 should be week 2"); + test.equal(moment([2007, 0, 12]).week(), 2, "Jan 12 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 3, "Jan 13 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 1, "Dec 29 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 4]).week(), 1, "Jan 4 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 2, "Jan 5 2008 should be week 2"); + test.equal(moment([2008, 0, 11]).week(), 2, "Jan 11 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 3, "Jan 12 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 28]).week(), 1, "Dec 28 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 3]).week(), 1, "Jan 3 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 2, "Jan 4 2003 should be week 2"); + test.equal(moment([2003, 0, 10]).week(), 2, "Jan 10 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 3, "Jan 11 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 27]).week(), 1, "Dec 27 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 2]).week(), 1, "Jan 2 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 2, "Jan 3 2009 should be week 2"); + test.equal(moment([2009, 0, 9]).week(), 2, "Jan 9 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 3, "Jan 10 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 26]).week(), 1, "Dec 26 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 2, "Jan 2 2010 should be week 2"); + test.equal(moment([2010, 0, 8]).week(), 2, "Jan 8 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 3, "Jan 9 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 7]).week(), 1, "Jan 7 2011 should be week 1"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 14]).week(), 2, "Jan 14 2011 should be week 2"); + test.equal(moment([2011, 0, 15]).week(), 3, "Jan 15 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', "Dec 31 2011 should be week 1"); + test.equal(moment([2012, 0, 6]).format('w ww wo'), '1 01 1', "Jan 6 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', "Jan 7 2012 should be week 2"); + test.equal(moment([2012, 0, 13]).format('w ww wo'), '2 02 2', "Jan 13 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', "Jan 14 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Arabic Saudi Arabia + *************************************************/ + +exports["locale:ar-sa"] = { + setUp : function (cb) { + moment.locale('ar-sa'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + test.expect(96); + var tests = 'يناير:يناير_فبراير:فبراير_مارس:مارس_أبريل:أبريل_مايو:مايو_يونيو:يونيو_يوليو:يوليو_أغسطس:أغسطس_سبتمبر:سبتمبر_أكتوبر:أكتوبر_نوفمبر:نوفمبر_ديسمبر:ديسمبر'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1) + ' instead is month ' + moment(input, mmm).month()); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(':'); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + test.expect(22); + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد، فبراير ١٤ ٢٠١٠، ٣:٢٥:٥٠ م'], + ['ddd, hA', 'أحد، ٣م'], + ['M Mo MM MMMM MMM', '٢ ٢ ٠٢ فبراير فبراير'], + ['YYYY YY', '٢٠١٠ ١٠'], + ['D Do DD', '١٤ ١٤ ١٤'], + ['d do dddd ddd dd', '٠ ٠ الأحد أحد ح'], + ['DDD DDDo DDDD', '٤٥ ٤٥ ٠٤٥'], + ['w wo ww', '٨ ٨ ٠٨'], + ['h hh', '٣ ٠٣'], + ['H HH', '١٥ ١٥'], + ['m mm', '٢٥ ٢٥'], + ['s ss', '٥٠ ٥٠'], + ['a A', 'م م'], + ['[the] DDDo [day of the year]', 'the ٤٥ day of the year'], + ['L', '١٤/٠٢/٢٠١٠'], + ['LL', '١٤ فبراير ٢٠١٠'], + ['LLL', '١٤ فبراير ٢٠١٠ ١٥:٢٥'], + ['LLLL', 'الأحد ١٤ فبراير ٢٠١٠ ١٥:٢٥'], + ['l', '١٤/٢/٢٠١٠'], + ['ll', '١٤ فبراير ٢٠١٠'], + ['lll', '١٤ فبراير ٢٠١٠ ١٥:٢٥'], + ['llll', 'أحد ١٤ فبراير ٢٠١٠ ١٥:٢٥'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.expect(31); + test.equal(moment([2011, 0, 1]).format('DDDo'), '١', '1'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '٢', '2'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '٣', '3'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '٤', '4'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '٥', '5'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '٦', '6'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '٧', '7'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '٨', '8'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '٩', '9'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '١٠', '10'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '١١', '11'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '١٢', '12'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '١٣', '13'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '١٤', '14'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '١٥', '15'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '١٦', '16'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '١٧', '17'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '١٨', '18'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '١٩', '19'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '٢٠', '20'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '٢١', '21'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '٢٢', '22'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '٢٣', '23'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '٢٤', '24'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '٢٥', '25'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '٢٦', '26'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '٢٧', '27'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '٢٨', '28'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '٢٩', '29'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '٣٠', '30'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '٣١', '31'); + test.done(); + }, + + "format month" : function (test) { + test.expect(12); + + var expected = 'يناير يناير_فبراير فبراير_مارس مارس_أبريل أبريل_مايو مايو_يونيو يونيو_يوليو يوليو_أغسطس أغسطس_سبتمبر سبتمبر_أكتوبر أكتوبر_نوفمبر نوفمبر_ديسمبر ديسمبر'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + test.expect(7); + + var expected = 'الأحد أحد ح_الإثنين إثنين ن_الثلاثاء ثلاثاء ث_الأربعاء أربعاء ر_الخميس خميس خ_الجمعة جمعة ج_السبت سبت س'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ثوان", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "دقيقة", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "دقيقة", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "٢ دقائق", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "٤٤ دقائق", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ساعة", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ساعة", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "٢ ساعات", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "٥ ساعات", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "٢١ ساعات", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "يوم", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "يوم", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "٢ أيام", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "يوم", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "٥ أيام", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "٢٥ أيام", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "شهر", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "شهر", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "شهر", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "٢ أشهر", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "٢ أشهر", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "٣ أشهر", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "شهر", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "٥ أشهر", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "سنة", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "٢ سنوات", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "سنة", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "٥ سنوات", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.expect(2); + test.equal(moment(30000).from(0), "في ثوان", "prefix"); + test.equal(moment(0).from(30000), "منذ ثوان", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.expect(1); + test.equal(moment().fromNow(), "منذ ثوان", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.expect(2); + test.equal(moment().add({s: 30}).fromNow(), "في ثوان", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "في ٥ أيام", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + test.expect(6); + + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "اليوم على الساعة ٠٢:٠٠", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "اليوم على الساعة ٠٢:٢٥", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "اليوم على الساعة ٠٣:٠٠", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "غدا على الساعة ٠٢:٠٠", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "اليوم على الساعة ٠١:٠٠", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "أمس على الساعة ٠٢:٠٠", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + test.expect(15); + + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + test.expect(15); + + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + test.expect(4); + + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + + // Saturday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.expect(5); + + test.equal(moment([2011, 11, 31]).week(), 1, "Dec 31 2011 should be week 1"); + test.equal(moment([2012, 0, 6]).week(), 1, "Jan 6 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 2, "Jan 7 2012 should be week 2"); + test.equal(moment([2012, 0, 13]).week(), 2, "Jan 13 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 3, "Jan 14 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.expect(5); + + test.equal(moment([2006, 11, 30]).week(), 1, "Dec 30 2006 should be week 1"); + test.equal(moment([2007, 0, 5]).week(), 1, "Jan 5 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 2, "Jan 6 2007 should be week 2"); + test.equal(moment([2007, 0, 12]).week(), 2, "Jan 12 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 3, "Jan 13 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.expect(6); + + test.equal(moment([2007, 11, 29]).week(), 1, "Dec 29 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 4]).week(), 1, "Jan 4 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 2, "Jan 5 2008 should be week 2"); + test.equal(moment([2008, 0, 11]).week(), 2, "Jan 11 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 3, "Jan 12 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.expect(10); + + test.equal(moment([2002, 11, 28]).week(), 1, "Dec 28 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 3]).week(), 1, "Jan 3 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 2, "Jan 4 2003 should be week 2"); + test.equal(moment([2003, 0, 10]).week(), 2, "Jan 10 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 3, "Jan 11 2003 should be week 3"); + + test.equal(moment("2003 1 6", "gggg w d").format("YYYY-MM-DD"), "٢٠٠٢-١٢-٢٨", "Week 1 of 2003 should be Dec 28 2002"); + test.equal(moment("2003 1 0", "gggg w e").format("YYYY-MM-DD"), "٢٠٠٢-١٢-٢٨", "Week 1 of 2003 should be Dec 28 2002"); + test.equal(moment("2003 1 6", "gggg w d").format("gggg w d"), "٢٠٠٣ ١ ٦", "Saturday of week 1 of 2003 parsed should be formatted as 2003 1 6"); + test.equal(moment("2003 1 0", "gggg w e").format("gggg w e"), "٢٠٠٣ ١ ٠", "1st day of week 1 of 2003 parsed should be formatted as 2003 1 0"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.expect(6); + + test.equal(moment([2008, 11, 27]).week(), 1, "Dec 27 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 2]).week(), 1, "Jan 2 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 2, "Jan 3 2009 should be week 2"); + test.equal(moment([2009, 0, 9]).week(), 2, "Jan 9 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 3, "Jan 10 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.expect(5); + + test.equal(moment([2009, 11, 26]).week(), 1, "Dec 26 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 2, "Jan 2 2010 should be week 2"); + test.equal(moment([2010, 0, 8]).week(), 2, "Jan 8 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 3, "Jan 9 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.expect(5); + + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 7]).week(), 1, "Jan 7 2011 should be week 1"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 14]).week(), 2, "Jan 14 2011 should be week 2"); + test.equal(moment([2011, 0, 15]).week(), 3, "Jan 15 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.expect(5); + + test.equal(moment([2011, 11, 31]).format('w ww wo'), '١ ٠١ ١', "Dec 31 2011 should be week 1"); + test.equal(moment([2012, 0, 6]).format('w ww wo'), '١ ٠١ ١', "Jan 6 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '٢ ٠٢ ٢', "Jan 7 2012 should be week 2"); + test.equal(moment([2012, 0, 13]).format('w ww wo'), '٢ ٠٢ ٢', "Jan 13 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '٣ ٠٣ ٣', "Jan 14 2012 should be week 3"); + + test.done(); + } +}; + +// moment.js arabic (ar) tests +// author: Abdel Said : https://github.com/abdelsaid +var moment = require("../../moment"); + +exports["locale:ar"] = { + setUp : function (cb) { + moment.locale('ar'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'يناير/ كانون الثاني:يناير/ كانون الثاني_فبراير/ شباط:فبراير/ شباط_مارس/ آذار:مارس/ آذار_أبريل/ نيسان:أبريل/ نيسان_مايو/ أيار:مايو/ أيار_يونيو/ حزيران:يونيو/ حزيران_يوليو/ تموز:يوليو/ تموز_أغسطس/ آب:أغسطس/ آب_سبتمبر/ أيلول:سبتمبر/ أيلول_أكتوبر/ تشرين الأول:أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني:نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول:ديسمبر/ كانون الأول'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1) + ' instead is month ' + moment(input, mmm).month()); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(':'); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد، فبراير/ شباط ١٤ ٢٠١٠، ٣:٢٥:٥٠ م'], + ['ddd, hA', 'أحد، ٣م'], + ['M Mo MM MMMM MMM', '٢ ٢ ٠٢ فبراير/ شباط فبراير/ شباط'], + ['YYYY YY', '٢٠١٠ ١٠'], + ['D Do DD', '١٤ ١٤ ١٤'], + ['d do dddd ddd dd', '٠ ٠ الأحد أحد ح'], + ['DDD DDDo DDDD', '٤٥ ٤٥ ٠٤٥'], + ['w wo ww', '٨ ٨ ٠٨'], + ['h hh', '٣ ٠٣'], + ['H HH', '١٥ ١٥'], + ['m mm', '٢٥ ٢٥'], + ['s ss', '٥٠ ٥٠'], + ['a A', 'م م'], + ['[the] DDDo [day of the year]', 'the ٤٥ day of the year'], + ['L', '١٤/٠٢/٢٠١٠'], + ['LL', '١٤ فبراير/ شباط ٢٠١٠'], + ['LLL', '١٤ فبراير/ شباط ٢٠١٠ ١٥:٢٥'], + ['LLLL', 'الأحد ١٤ فبراير/ شباط ٢٠١٠ ١٥:٢٥'], + ['l', '١٤/٢/٢٠١٠'], + ['ll', '١٤ فبراير/ شباط ٢٠١٠'], + ['lll', '١٤ فبراير/ شباط ٢٠١٠ ١٥:٢٥'], + ['llll', 'أحد ١٤ فبراير/ شباط ٢٠١٠ ١٥:٢٥'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '١', '1'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '٢', '2'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '٣', '3'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '٤', '4'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '٥', '5'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '٦', '6'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '٧', '7'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '٨', '8'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '٩', '9'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '١٠', '10'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '١١', '11'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '١٢', '12'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '١٣', '13'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '١٤', '14'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '١٥', '15'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '١٦', '16'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '١٧', '17'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '١٨', '18'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '١٩', '19'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '٢٠', '20'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '٢١', '21'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '٢٢', '22'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '٢٣', '23'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '٢٤', '24'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '٢٥', '25'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '٢٦', '26'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '٢٧', '27'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '٢٨', '28'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '٢٩', '29'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '٣٠', '30'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '٣١', '31'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'يناير/ كانون الثاني يناير/ كانون الثاني_فبراير/ شباط فبراير/ شباط_مارس/ آذار مارس/ آذار_أبريل/ نيسان أبريل/ نيسان_مايو/ أيار مايو/ أيار_يونيو/ حزيران يونيو/ حزيران_يوليو/ تموز يوليو/ تموز_أغسطس/ آب أغسطس/ آب_سبتمبر/ أيلول سبتمبر/ أيلول_أكتوبر/ تشرين الأول أكتوبر/ تشرين الأول_نوفمبر/ تشرين الثاني نوفمبر/ تشرين الثاني_ديسمبر/ كانون الأول ديسمبر/ كانون الأول'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'الأحد أحد ح_الإثنين إثنين ن_الثلاثاء ثلاثاء ث_الأربعاء أربعاء ر_الخميس خميس خ_الجمعة جمعة ج_السبت سبت س'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ثوان", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "دقيقة", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "دقيقة", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "٢ دقائق", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "٤٤ دقائق", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ساعة", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ساعة", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "٢ ساعات", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "٥ ساعات", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "٢١ ساعات", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "يوم", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "يوم", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "٢ أيام", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "يوم", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "٥ أيام", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "٢٥ أيام", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "شهر", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "شهر", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "شهر", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "٢ أشهر", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "٢ أشهر", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "٣ أشهر", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "شهر", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "٥ أشهر", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "سنة", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "٢ سنوات", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "سنة", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "٥ سنوات", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "في ثوان", "prefix"); + test.equal(moment(0).from(30000), "منذ ثوان", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "منذ ثوان", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "في ثوان", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "في ٥ أيام", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "اليوم على الساعة ٠٢:٠٠", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "اليوم على الساعة ٠٢:٢٥", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "اليوم على الساعة ٠٣:٠٠", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "غدا على الساعة ٠٢:٠٠", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "اليوم على الساعة ٠١:٠٠", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "أمس على الساعة ٠٢:٠٠", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [على الساعة] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + + // Saturday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 31]).week(), 1, "Dec 31 2011 should be week 1"); + test.equal(moment([2012, 0, 6]).week(), 1, "Jan 6 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 2, "Jan 7 2012 should be week 2"); + test.equal(moment([2012, 0, 13]).week(), 2, "Jan 13 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 3, "Jan 14 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 30]).week(), 1, "Dec 30 2006 should be week 1"); + test.equal(moment([2007, 0, 5]).week(), 1, "Jan 5 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 2, "Jan 6 2007 should be week 2"); + test.equal(moment([2007, 0, 12]).week(), 2, "Jan 12 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 3, "Jan 13 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 1, "Dec 29 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 4]).week(), 1, "Jan 4 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 2, "Jan 5 2008 should be week 2"); + test.equal(moment([2008, 0, 11]).week(), 2, "Jan 11 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 3, "Jan 12 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 28]).week(), 1, "Dec 28 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 3]).week(), 1, "Jan 3 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 2, "Jan 4 2003 should be week 2"); + test.equal(moment([2003, 0, 10]).week(), 2, "Jan 10 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 3, "Jan 11 2003 should be week 3"); + + test.equal(moment("2003 1 6", "gggg w d").format("YYYY-MM-DD"), "٢٠٠٢-١٢-٢٨", "Week 1 of 2003 should be Dec 28 2002"); + test.equal(moment("2003 1 0", "gggg w e").format("YYYY-MM-DD"), "٢٠٠٢-١٢-٢٨", "Week 1 of 2003 should be Dec 28 2002"); + test.equal(moment("2003 1 6", "gggg w d").format("gggg w d"), "٢٠٠٣ ١ ٦", "Saturday of week 1 of 2003 parsed should be formatted as 2003 1 6"); + test.equal(moment("2003 1 0", "gggg w e").format("gggg w e"), "٢٠٠٣ ١ ٠", "1st day of week 1 of 2003 parsed should be formatted as 2003 1 0"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 27]).week(), 1, "Dec 27 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 2]).week(), 1, "Jan 2 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 2, "Jan 3 2009 should be week 2"); + test.equal(moment([2009, 0, 9]).week(), 2, "Jan 9 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 3, "Jan 10 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 26]).week(), 1, "Dec 26 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 2, "Jan 2 2010 should be week 2"); + test.equal(moment([2010, 0, 8]).week(), 2, "Jan 8 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 3, "Jan 9 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 7]).week(), 1, "Jan 7 2011 should be week 1"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 14]).week(), 2, "Jan 14 2011 should be week 2"); + test.equal(moment([2011, 0, 15]).week(), 3, "Jan 15 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 31]).format('w ww wo'), '١ ٠١ ١', "Dec 31 2011 should be week 1"); + test.equal(moment([2012, 0, 6]).format('w ww wo'), '١ ٠١ ١', "Jan 6 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '٢ ٠٢ ٢', "Jan 7 2012 should be week 2"); + test.equal(moment([2012, 0, 13]).format('w ww wo'), '٢ ٠٢ ٢', "Jan 13 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '٣ ٠٣ ٣', "Jan 14 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Azerbaijani + *************************************************/ + +exports["locale:az"] = { + setUp : function (cb) { + moment.locale('az'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + test.expect(96); + + var tests = 'yanvar yan_fevral fev_mart mar_Aprel apr_may may_iyun iyn_iyul iyl_Avqust avq_sentyabr sen_oktyabr okt_noyabr noy_dekabr dek'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, D MMMM YYYY, HH:mm:ss', 'Bazar, 14 fevral 2010, 15:25:50'], + ['ddd, A h', 'Baz, gündüz 3'], + ['M Mo MM MMMM MMM', '2 2-nci 02 fevral fev'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-üncü 14'], + ['d do dddd ddd dd', '0 0-ıncı Bazar Baz Bz'], + ['DDD DDDo DDDD', '45 45-inci 045'], + ['w wo ww', "7 7-nci 07"], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'gündüz gündüz'], + ['[ilin] DDDo [günü]', 'ilin 45-inci günü'], + ['L', '14.02.2010'], + ['LL', '14 fevral 2010'], + ['LLL', '14 fevral 2010 15:25'], + ['LLLL', 'Bazar, 14 fevral 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 fev 2010'], + ['lll', '14 fev 2010 15:25'], + ['llll', 'Baz, 14 fev 2010 15:25'] + ], + DDDo = [ + [359, '360-ıncı'], + [199, '200-üncü'], + [149, '150-nci'] + ], + dt = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + DDDoDt, + i; + test.expect(a.length + DDDo.length); + + for (i = 0; i < a.length; i++) { + test.equal(dt.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + for (i = 0; i < DDDo.length; i++) { + DDDoDt = moment([2010]); + test.equal(DDDoDt.add(DDDo[i][0], 'days').format('DDDo'), DDDo[i][1], DDDo[i][0] + ' ---> ' + DDDo[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.expect(31); + + test.equal(moment([2011, 0, 1]).format('DDDo'), '1-inci', '1st'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2-nci', '2nd'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3-üncü', '3rd'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4-üncü', '4th'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5-inci', '5th'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6-ncı', '6th'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7-nci', '7th'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8-inci', '8th'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9-uncu', '9th'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10-uncu', '10th'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11-inci', '11th'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12-nci', '12th'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13-üncü', '13th'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14-üncü', '14th'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15-inci', '15th'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16-ncı', '16th'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17-nci', '17th'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18-inci', '18th'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19-uncu', '19th'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20-nci', '20th'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21-inci', '21th'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22-nci', '22th'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23-üncü', '23th'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24-üncü', '24th'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25-inci', '25th'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26-ncı', '26th'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27-nci', '27th'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28-inci', '28th'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29-uncu', '29th'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30-uncu', '30th'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31-inci', '31st'); + test.done(); + }, + + "format month" : function (test) { + test.expect(12); + + var expected = 'yanvar yan_fevral fev_mart mar_aprel apr_may may_iyun iyn_iyul iyl_avqust avq_sentyabr sen_oktyabr okt_noyabr noy_dekabr dek'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + test.expect(7); + + var expected = 'Bazar Baz Bz_Bazar ertəsi BzE BE_Çərşənbə axşamı ÇAx ÇA_Çərşənbə Çər Çə_Cümə axşamı CAx CA_Cümə Cüm Cü_Şənbə Şən Şə'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "birneçə saniyyə", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "bir dəqiqə", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "bir dəqiqə", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 dəqiqə", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 dəqiqə", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "bir saat", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "bir saat", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 saat", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 saat", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 saat", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "bir gün", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "bir gün", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 gün", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "bir gün", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 gün", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 gün", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "bir ay", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "bir ay", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 ay", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 ay", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 ay", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "bir ay", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 ay", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "bir il", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 il", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "bir il", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 il", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.expect(2); + test.equal(moment(30000).from(0), "birneçə saniyyə sonra", "prefix"); + test.equal(moment(0).from(30000), "birneçə saniyyə əvvəl", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.expect(1); + test.equal(moment().fromNow(), "birneçə saniyyə əvvəl", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.expect(2); + test.equal(moment().add({s: 30}).fromNow(), "birneçə saniyyə sonra", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "5 gün sonra", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + test.expect(6); + + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "bugün saat 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "bugün saat 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "bugün saat 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "sabah saat 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "bugün saat 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "dünən 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + test.expect(15); + + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('[gələn həftə] dddd [saat] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[gələn həftə] dddd [saat] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[gələn həftə] dddd [saat] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + test.expect(15); + + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[keçən həftə] dddd [saat] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[keçən həftə] dddd [saat] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[keçən həftə] dddd [saat] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + test.expect(4); + + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.expect(5); + + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.expect(5); + + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.expect(6); + + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.expect(6); + + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.expect(6); + + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.expect(6); + + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.expect(6); + + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.expect(5); + + test.equal(moment([2011, 11, 26]).format('w ww wo'), "1 01 1-inci", "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), "1 01 1-inci", "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), "2 02 2-nci", "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), "2 02 2-nci", "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), "3 03 3-üncü", "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Belarusian + *************************************************/ + +exports["locale:be"] = { + setUp : function (cb) { + moment.locale('be'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'студзень студ_люты лют_сакавік сак_красавік крас_травень трав_чэрвень чэрв_ліпень ліп_жнівень жнів_верасень вер_кастрычнік каст_лістапад ліст_снежань снеж'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, HH:mm:ss', 'нядзеля, 14-га лютага 2010, 15:25:50'], + ['ddd, h A', 'нд, 3 дня'], + ['M Mo MM MMMM MMM', '2 2-і 02 люты лют'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-га 14'], + ['d do dddd ddd dd', '0 0-ы нядзеля нд нд'], + ['DDD DDDo DDDD', '45 45-ы 045'], + ['w wo ww', '7 7-ы 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'дня дня'], + ['DDDo [дзень года]', '45-ы дзень года'], + ['L', '14.02.2010'], + ['LL', '14 лютага 2010 г.'], + ['LLL', '14 лютага 2010 г., 15:25'], + ['LLLL', 'нядзеля, 14 лютага 2010 г., 15:25'], + ['l', '14.2.2010'], + ['ll', '14 лют 2010 г.'], + ['lll', '14 лют 2010 г., 15:25'], + ['llll', 'нд, 14 лют 2010 г., 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format meridiem" : function (test) { + test.equal(moment([2012, 11, 28, 0, 0]).format("A"), "ночы", "night"); + test.equal(moment([2012, 11, 28, 3, 59]).format("A"), "ночы", "night"); + test.equal(moment([2012, 11, 28, 4, 0]).format("A"), "раніцы", "morning"); + test.equal(moment([2012, 11, 28, 11, 59]).format("A"), "раніцы", "morning"); + test.equal(moment([2012, 11, 28, 12, 0]).format("A"), "дня", "afternoon"); + test.equal(moment([2012, 11, 28, 16, 59]).format("A"), "дня", "afternoon"); + test.equal(moment([2012, 11, 28, 17, 0]).format("A"), "вечара", "evening"); + test.equal(moment([2012, 11, 28, 23, 59]).format("A"), "вечара", "evening"); + + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1-ы', '1-ы'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2-і', '2-і'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3-і', '3-і'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4-ы', '4-ы'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5-ы', '5-ы'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6-ы', '6-ы'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7-ы', '7-ы'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8-ы', '8-ы'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9-ы', '9-ы'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10-ы', '10-ы'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11-ы', '11-ы'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12-ы', '12-ы'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13-ы', '13-ы'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14-ы', '14-ы'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15-ы', '15-ы'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16-ы', '16-ы'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17-ы', '17-ы'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18-ы', '18-ы'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19-ы', '19-ы'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20-ы', '20-ы'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21-ы', '21-ы'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22-і', '22-і'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23-і', '23-і'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24-ы', '24-ы'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25-ы', '25-ы'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26-ы', '26-ы'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27-ы', '27-ы'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28-ы', '28-ы'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29-ы', '29-ы'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30-ы', '30-ы'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31-ы', '31-ы'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'студзень студ_люты лют_сакавік сак_красавік крас_травень трав_чэрвень чэрв_ліпень ліп_жнівень жнів_верасень вер_кастрычнік каст_лістапад ліст_снежань снеж'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format month case" : function (test) { + var months = { + 'nominative': 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_'), + 'accusative': 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_') + }, i; + for (i = 0; i < 12; i++) { + test.equal(moment([2011, i, 1]).format('D MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); + test.equal(moment([2011, i, 1]).format('MMMM'), months.nominative[i], '1 ' + months.nominative[i]); + } + test.done(); + }, + + "format month case with escaped symbols" : function (test) { + var months = { + 'nominative': 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_'), + 'accusative': 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_') + }, i; + for (i = 0; i < 12; i++) { + test.equal(moment([2013, i, 1]).format('D[] MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); + test.equal(moment([2013, i, 1]).format('[]D[] []MMMM[]'), '1 ' + months.accusative[i] + '', '1 ' + months.accusative[i] + ''); + test.equal(moment([2013, i, 1]).format('D[-ы дзень] MMMM'), '1-ы дзень ' + months.accusative[i], '1-ы дзень ' + months.accusative[i]); + test.equal(moment([2013, i, 1]).format('D, MMMM'), '1, ' + months.nominative[i], '1, ' + months.nominative[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'нядзеля нд нд_панядзелак пн пн_аўторак ат ат_серада ср ср_чацвер чц чц_пятніца пт пт_субота сб сб'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "некалькі секунд", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "хвіліна", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "хвіліна", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 хвіліны", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 31}), true), "31 хвіліна", "31 minutes = 31 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 хвіліны", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "гадзіна", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "гадзіна", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 гадзіны", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 гадзін", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 гадзіна", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "дзень", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "дзень", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 дні", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "дзень", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 дзён", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), "11 дзён", "11 days = 11 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), "21 дзень", "21 days = 21 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 дзён", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "месяц", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "месяц", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "месяц", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 месяцы", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 месяцы", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 месяцы", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "месяц", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 месяцаў", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "год", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 гады", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "год", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 гадоў", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "праз некалькі секунд", "prefix"); + test.equal(moment(0).from(30000), "некалькі секунд таму", "suffix"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "праз некалькі секунд", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "праз 5 дзён", "in 5 days"); + test.equal(moment().add({m: 31}).fromNow(), "праз 31 хвіліну", "in 31 minutes = in 31 minutes"); + test.equal(moment().subtract({m: 31}).fromNow(), "31 хвіліну таму", "31 minutes ago = 31 minutes ago"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Сёння ў 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Сёння ў 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Сёння ў 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Заўтра ў 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Сёння ў 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Учора ў 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + function makeFormat(d) { + return '[У] dddd [ў] LT'; + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + case 3: + case 5: + case 6: + return '[У мінулую] dddd [ў] LT'; + case 1: + case 2: + case 4: + return '[У мінулы] dddd [ў] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ы', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ы', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-і', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-і', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-і', "Jan 9 2012 should be week 3"); + + test.done(); + } + +}; + +var moment = require("../../moment"); + + + /************************************************** + Bulgarian + *************************************************/ + +exports["locale:bg"] = { + setUp : function (cb) { + moment.locale('bg'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'януари янр_февруари фев_март мар_април апр_май май_юни юни_юли юли_август авг_септември сеп_октомври окт_ноември ное_декември дек'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, H:mm:ss', 'неделя, февруари 14-ти 2010, 15:25:50'], + ['ddd, hA', 'нед, 3PM'], + ['M Mo MM MMMM MMM', '2 2-ри 02 февруари фев'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-ти 14'], + ['d do dddd ddd dd', '0 0-ев неделя нед нд'], + ['DDD DDDo DDDD', '45 45-ти 045'], + ['w wo ww', '7 7-ми 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45-ти day of the year'], + ['L', '14.02.2010'], + ['LL', '14 февруари 2010'], + ['LLL', '14 февруари 2010 15:25'], + ['LLLL', 'неделя, 14 февруари 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 фев 2010'], + ['lll', '14 фев 2010 15:25'], + ['llll', 'нед, 14 фев 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1-ви', '1-ви'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2-ри', '2-ри'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3-ти', '3-ти'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4-ти', '4-ти'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5-ти', '5-ти'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6-ти', '6-ти'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7-ми', '7-ми'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8-ми', '8-ми'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9-ти', '9-ти'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10-ти', '10-ти'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11-ти', '11-ти'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12-ти', '12-ти'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13-ти', '13-ти'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14-ти', '14-ти'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15-ти', '15-ти'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16-ти', '16-ти'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17-ти', '17-ти'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18-ти', '18-ти'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19-ти', '19-ти'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20-ти', '20-ти'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21-ви', '21-ви'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22-ри', '22-ри'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23-ти', '23-ти'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24-ти', '24-ти'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25-ти', '25-ти'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26-ти', '26-ти'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27-ми', '27-ми'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28-ми', '28-ми'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29-ти', '29-ти'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30-ти', '30-ти'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31-ви', '31-ви'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'януари янр_февруари фев_март мар_април апр_май май_юни юни_юли юли_август авг_септември сеп_октомври окт_ноември ное_декември дек'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'неделя нед нд_понеделник пон пн_вторник вто вт_сряда сря ср_четвъртък чет чт_петък пет пт_събота съб сб'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "няколко секунди", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "минута", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "минута", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 минути", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 минути", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "час", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "час", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 часа", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 часа", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 часа", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ден", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ден", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 дни", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ден", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 дни", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 дни", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "месец", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "месец", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "месец", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 месеца", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 месеца", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 месеца", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "месец", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 месеца", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "година", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 години", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "година", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 години", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "след няколко секунди", "prefix"); + test.equal(moment(0).from(30000), "преди няколко секунди", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "преди няколко секунди", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "след няколко секунди", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "след 5 дни", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Днес в 2:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Днес в 2:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Днес в 3:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Утре в 2:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Днес в 1:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Вчера в 2:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [в] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [в] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [в] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + case 3: + case 6: + return '[В изминалата] dddd [в] LT'; + case 1: + case 2: + case 4: + case 5: + return '[В изминалия] dddd [в] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ви', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ви', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-ри', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-ри', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-ти', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Bengali + *************************************************/ + +exports["locale:bn"] = { + setUp : function (cb) { + moment.locale('bn'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + test.expect(96); + + var tests = 'জানুয়ারী জানু_ফেবুয়ারী ফেব_মার্চ মার্চ_এপ্রিল এপর_মে মে_জুন জুন_জুলাই জুল_অগাস্ট অগ_সেপ্টেম্বর সেপ্ট_অক্টোবর অক্টো_নভেম্বর নভ_ডিসেম্বর ডিসেম্'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + test.expect(21); + + var a = [ + ['dddd, Do MMMM YYYY, a h:mm:ss সময়', 'রবিবার, ১৪ ফেবুয়ারী ২০১০, দুপুর ৩:২৫:৫০ সময়'], + ['ddd, a h সময়', 'রবি, দুপুর ৩ সময়'], + ['M Mo MM MMMM MMM', '২ ২ ০২ ফেবুয়ারী ফেব'], + ['YYYY YY', '২০১০ ১০'], + ['D Do DD', '১৪ ১৪ ১৪'], + ['d do dddd ddd dd', '০ ০ রবিবার রবি রব'], + ['DDD DDDo DDDD', '৪৫ ৪৫ ০৪৫'], + ['w wo ww', '৮ ৮ ০৮'], + ['h hh', '৩ ০৩'], + ['H HH', '১৫ ১৫'], + ['m mm', '২৫ ২৫'], + ['s ss', '৫০ ৫০'], + ['a A', 'দুপুর দুপুর'], + ['L', '১৪/০২/২০১০'], + ['LL', '১৪ ফেবুয়ারী ২০১০'], + ['LLL', '১৪ ফেবুয়ারী ২০১০, দুপুর ৩:২৫ সময়'], + ['LLLL', 'রবিবার, ১৪ ফেবুয়ারী ২০১০, দুপুর ৩:২৫ সময়'], + ['l', '১৪/২/২০১০'], + ['ll', '১৪ ফেব ২০১০'], + ['lll', '১৪ ফেব ২০১০, দুপুর ৩:২৫ সময়'], + ['llll', 'রবি, ১৪ ফেব ২০১০, দুপুর ৩:২৫ সময়'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.expect(31); + + test.equal(moment([2011, 0, 1]).format('DDDo'), '১', '১'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '২', '২'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '৩', '৩'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '৪', '৪'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '৫', '৫'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '৬', '৬'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '৭', '৭'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '৮', '৮'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '৯', '৯'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '১০', '১০'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '১১', '১১'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '১২', '১২'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '১৩', '১৩'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '১৪', '১৪'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '১৫', '১৫'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '১৬', '১৬'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '১৭', '১৭'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '১৮', '১৮'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '১৯', '১৯'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '২০', '২০'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '২১', '২১'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '২২', '২২'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '২৩', '২৩'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '২৪', '২৪'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '২৫', '২৫'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '২৬', '২৬'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '২৭', '২৭'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '২৮', '२৮'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '২৯', '২৯'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '৩০', '৩০'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '৩১', '৩১'); + test.done(); + }, + + "format month" : function (test) { + test.expect(12); + + var expected = 'জানুয়ারী জানু_ফেবুয়ারী ফেব_মার্চ মার্চ_এপ্রিল এপর_মে মে_জুন জুন_জুলাই জুল_অগাস্ট অগ_সেপ্টেম্বর সেপ্ট_অক্টোবর অক্টো_নভেম্বর নভ_ডিসেম্বর ডিসেম্'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + test.expect(7); + + var expected = 'রবিবার রবি রব_সোমবার সোম সম_মঙ্গলবার মঙ্গল মঙ্গ_বুধবার বুধ বু_বৃহস্পত্তিবার বৃহস্পত্তি ব্রিহ_শুক্রুবার শুক্রু শু_শনিবার শনি শনি'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "কএক সেকেন্ড", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "এক মিনিট", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "এক মিনিট", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "২ মিনিট", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "৪৪ মিনিট", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "এক ঘন্টা", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "এক ঘন্টা", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "২ ঘন্টা", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "৫ ঘন্টা", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "২১ ঘন্টা", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "এক দিন", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "এক দিন", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "২ দিন", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "এক দিন", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "৫ দিন", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "২৫ দিন", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "এক মাস", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "এক মাস", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "২ মাস", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "২ মাস", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "৩ মাস", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "এক মাস", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "৫ মাস", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "এক বছর", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "২ বছর", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "এক বছর", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "৫ বছর", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.expect(2); + test.equal(moment(30000).from(0), "কএক সেকেন্ড পরে", "prefix"); + test.equal(moment(0).from(30000), "কএক সেকেন্ড আগে", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.expect(1); + test.equal(moment().fromNow(), "কএক সেকেন্ড আগে", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.expect(2); + test.equal(moment().add({s: 30}).fromNow(), "কএক সেকেন্ড পরে", "কএক সেকেন্ড পরে"); + test.equal(moment().add({d: 5}).fromNow(), "৫ দিন পরে", "৫ দিন পরে"); + test.done(); + }, + + "calendar day" : function (test) { + test.expect(6); + + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "আজ রাত ২:০০ সময়", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "আজ রাত ২:২৫ সময়", "Now plus 25 min"); + test.equal(moment(a).add({h: 3}).calendar(), "আজ শকাল ৫:০০ সময়", "Now plus 3 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "আগামীকাল রাত ২:০০ সময়", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "আজ রাত ১:০০ সময়", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "গতকাল রাত ২:০০ সময়", "yesterday at the same time"); + test.done(); + }, + "calendar next week" : function (test) { + test.expect(15); + + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + test.expect(15); + + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[গত] dddd[,] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[গত] dddd[,] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[গত] dddd[,] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + test.expect(4); + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + "meridiem" : function (test) { + test.expect(12); + + test.equal(moment([2011, 2, 23, 2, 30]).format('a'), "রাত", "before dawn"); + test.equal(moment([2011, 2, 23, 9, 30]).format('a'), "শকাল", "morning"); + test.equal(moment([2011, 2, 23, 14, 30]).format('a'), "দুপুর", "during day"); + test.equal(moment([2011, 2, 23, 17, 30]).format('a'), "বিকেল", "evening"); + test.equal(moment([2011, 2, 23, 19, 30]).format('a'), "বিকেল", "late evening"); + test.equal(moment([2011, 2, 23, 21, 20]).format('a'), "রাত", "night"); + + test.equal(moment([2011, 2, 23, 2, 30]).format('A'), "রাত", "before dawn"); + test.equal(moment([2011, 2, 23, 9, 30]).format('A'), "শকাল", "morning"); + test.equal(moment([2011, 2, 23, 14, 30]).format('A'), "দুপুর", " during day"); + test.equal(moment([2011, 2, 23, 17, 30]).format('A'), "বিকেল", "evening"); + test.equal(moment([2011, 2, 23, 19, 30]).format('A'), "বিকেল", "late evening"); + test.equal(moment([2011, 2, 23, 21, 20]).format('A'), "রাত", "night"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.expect(5); + + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.expect(6); + + test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.expect(6); + + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.expect(6); + + test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.expect(6); + + test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.expect(6); + + test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.expect(5); + + test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.expect(5); + test.expect(5); + + test.equal(moment([2012, 0, 1]).format('w ww wo'), '১ ০১ ১', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '১ ০১ ১', "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '২ ০২ ২', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '২ ০২ ২', "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '৩ ০৩ ৩', "Jan 15 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Tibetan + *************************************************/ + +exports["locale:bo"] = { + setUp : function (cb) { + moment.locale('bo'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'ཟླ་བ་དང་པོ ཟླ་བ་དང་པོ._ཟླ་བ་གཉིས་པ ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ ཟླ་བ་བཅུ་གཉིས་པ'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, a h:mm:ss ལ་', 'གཟའ་ཉི་མ་, ༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠, ཉིན་གུང ༣:༢༥:༥༠ ལ་'], + ['ddd, a h ལ་', 'ཉི་མ་, ཉིན་གུང ༣ ལ་'], + ['M Mo MM MMMM MMM', '༢ ༢ ༠༢ ཟླ་བ་གཉིས་པ ཟླ་བ་གཉིས་པ'], + ['YYYY YY', '༢༠༡༠ ༡༠'], + ['D Do DD', '༡༤ ༡༤ ༡༤'], + ['d do dddd ddd dd', '༠ ༠ གཟའ་ཉི་མ་ ཉི་མ་ ཉི་མ་'], + ['DDD DDDo DDDD', '༤༥ ༤༥ ༠༤༥'], + ['w wo ww', '༨ ༨ ༠༨'], + ['h hh', '༣ ༠༣'], + ['H HH', '༡༥ ༡༥'], + ['m mm', '༢༥ ༢༥'], + ['s ss', '༥༠ ༥༠'], + ['a A', 'ཉིན་གུང ཉིན་གུང'], + ['L', '༡༤/༠༢/༢༠༡༠'], + ['LL', '༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠'], + ['LLL', '༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠, ཉིན་གུང ༣:༢༥'], + ['LLLL', 'གཟའ་ཉི་མ་, ༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠, ཉིན་གུང ༣:༢༥'], + ['l', '༡༤/༢/༢༠༡༠'], + ['ll', '༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠'], + ['lll', '༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠, ཉིན་གུང ༣:༢༥'], + ['llll', 'ཉི་མ་, ༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠, ཉིན་གུང ༣:༢༥'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '༡', '༡'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '༢', '༢'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '༣', '༣'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '༤', '༤'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '༥', '༥'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '༦', '༦'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '༧', '༧'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '༨', '༨'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '༩', '༩'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '༡༠', '༡༠'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '༡༡', '༡༡'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '༡༢', '༡༢'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '༡༣', '༡༣'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '༡༤', '༡༤'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '༡༥', '༡༥'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '༡༦', '༡༦'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '༡༧', '༡༧'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '༡༨', '༡༨'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '༡༩', '༡༩'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '༢༠', '༢༠'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '༢༡', '༢༡'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '༢༢', '༢༢'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '༢༣', '༢༣'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '༢༤', '༢༤'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '༢༥', '༢༥'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '༢༦', '༢༦'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '༢༧', '༢༧'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '༢༨', '༢༨'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '༢༩', '༢༩'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '༣༠', '༣༠'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '༣༡', '༣༡'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'ཟླ་བ་དང་པོ ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ ཟླ་བ་བཅུ་གཉིས་པ'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'གཟའ་ཉི་མ་ ཉི་མ་ ཉི་མ་_གཟའ་ཟླ་བ་ ཟླ་བ་ ཟླ་བ་_གཟའ་མིག་དམར་ མིག་དམར་ མིག་དམར་_གཟའ་ལྷག་པ་ ལྷག་པ་ ལྷག་པ་_གཟའ་ཕུར་བུ ཕུར་བུ ཕུར་བུ_གཟའ་པ་སངས་ པ་སངས་ པ་སངས་_གཟའ་སྤེན་པ་ སྤེན་པ་ སྤེན་པ་'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ལམ་སང", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "སྐར་མ་གཅིག", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "སྐར་མ་གཅིག", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "༢ སྐར་མ", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "༤༤ སྐར་མ", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ཆུ་ཚོད་གཅིག", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ཆུ་ཚོད་གཅིག", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "༢ ཆུ་ཚོད", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "༥ ཆུ་ཚོད", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "༢༡ ཆུ་ཚོད", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ཉིན་གཅིག", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ཉིན་གཅིག", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "༢ ཉིན་", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ཉིན་གཅིག", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "༥ ཉིན་", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "༢༥ ཉིན་", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ཟླ་བ་གཅིག", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ཟླ་བ་གཅིག", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "ཟླ་བ་གཅིག", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "༢ ཟླ་བ", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "༢ ཟླ་བ", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "༣ ཟླ་བ", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ཟླ་བ་གཅིག", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "༥ ཟླ་བ", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ལོ་གཅིག", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "༢ ལོ", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ལོ་གཅིག", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "༥ ལོ", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "ལམ་སང ལ་", "prefix"); + test.equal(moment(0).from(30000), "ལམ་སང སྔན་ལ", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "ལམ་སང སྔན་ལ", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "ལམ་སང ལ་", "ལམ་སང ལ་"); + test.equal(moment().add({d: 5}).fromNow(), "༥ ཉིན་ ལ་", "༥ ཉིན་ ལ་"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "དི་རིང མཚན་མོ ༢:༠༠", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "དི་རིང མཚན་མོ ༢:༢༥", "Now plus 25 min"); + test.equal(moment(a).add({h: 3}).calendar(), "དི་རིང ཞོགས་ཀས ༥:༠༠", "Now plus 3 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "སང་ཉིན མཚན་མོ ༢:༠༠", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "དི་རིང མཚན་མོ ༡:༠༠", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "ཁ་སང མཚན་མོ ༢:༠༠", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('[བདུན་ཕྲག་རྗེས་མ][,] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[བདུན་ཕྲག་རྗེས་མ][,] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[བདུན་ཕྲག་རྗེས་མ][,] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[བདུན་ཕྲག་མཐའ་མ] dddd[,] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[བདུན་ཕྲག་མཐའ་མ] dddd[,] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[བདུན་ཕྲག་མཐའ་མ] dddd[,] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + "meridiem" : function (test) { + test.equal(moment([2011, 2, 23, 2, 30]).format('a'), "མཚན་མོ", "before dawn"); + test.equal(moment([2011, 2, 23, 9, 30]).format('a'), "ཞོགས་ཀས", "morning"); + test.equal(moment([2011, 2, 23, 14, 30]).format('a'), "ཉིན་གུང", "during day"); + test.equal(moment([2011, 2, 23, 17, 30]).format('a'), "དགོང་དག", "evening"); + test.equal(moment([2011, 2, 23, 19, 30]).format('a'), "དགོང་དག", "late evening"); + test.equal(moment([2011, 2, 23, 21, 20]).format('a'), "མཚན་མོ", "night"); + + test.equal(moment([2011, 2, 23, 2, 30]).format('A'), "མཚན་མོ", "before dawn"); + test.equal(moment([2011, 2, 23, 9, 30]).format('A'), "ཞོགས་ཀས", "morning"); + test.equal(moment([2011, 2, 23, 14, 30]).format('A'), "ཉིན་གུང", " during day"); + test.equal(moment([2011, 2, 23, 17, 30]).format('A'), "དགོང་དག", "evening"); + test.equal(moment([2011, 2, 23, 19, 30]).format('A'), "དགོང་དག", "late evening"); + test.equal(moment([2011, 2, 23, 21, 20]).format('A'), "མཚན་མོ", "night"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '༡ ༠༡ ༡', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '༡ ༠༡ ༡', "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '༢ ༠༢ ༢', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '༢ ༠༢ ༢', "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '༣ ༠༣ ༣', "Jan 15 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Breton + *************************************************/ + +exports["locale:br"] = { + setUp : function (cb) { + moment.locale('br'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('br'); + cb(); + }, + + "parse" : function (test) { + var tests = "Genver Gen_C'hwevrer C'hwe_Meurzh Meu_Ebrel Ebr_Mae Mae_Mezheven Eve_Gouere Gou_Eost Eos_Gwengolo Gwe_Here Her_Du Du_Kerzu Ker".split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + moment.locale('br'); + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', "Sul, C'hwevrer 14vet 2010, 3:25:50 pm"], + ['ddd, h A', 'Sul, 3 PM'], + ['M Mo MM MMMM MMM', "2 2vet 02 C'hwevrer C'hwe"], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14vet 14'], + ['d do dddd ddd dd', '0 0vet Sul Sul Su'], + ['DDD DDDo DDDD', '45 45vet 045'], + ['w wo ww', '6 6vet 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['DDDo [devezh] [ar] [vloaz]', '45vet devezh ar vloaz'], + ['L', '14/02/2010'], + ['LL', "14 a viz C'hwevrer 2010"], + ['LLL', "14 a viz C'hwevrer 2010 3e25 PM"], + ['LLLL', "Sul, 14 a viz C'hwevrer 2010 3e25 PM"] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + moment.locale('br'); + test.equal(moment([2011, 0, 1]).format('DDDo'), '1añ', '1añ'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2vet', '2vet'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3vet', '3vet'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4vet', '4vet'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5vet', '5vet'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6vet', '6vet'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7vet', '7vet'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8vet', '8vet'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9vet', '9vet'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10vet', '10vet'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11vet', '11vet'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12vet', '12vet'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13vet', '13vet'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14vet', '14vet'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15vet', '15vet'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16vet', '16vet'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17vet', '17vet'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18vet', '18vet'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19vet', '19vet'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20vet', '20vet'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21vet', '21vet'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22vet', '22vet'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23vet', '23vet'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24vet', '24vet'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25vet', '25vet'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26vet', '26vet'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27vet', '27vet'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28vet', '28vet'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29vet', '29vet'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30vet', '30vet'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31vet', '31vet'); + test.done(); + }, + + "format month" : function (test) { + moment.locale('br'); + var expected = "Genver Gen_C'hwevrer C'hwe_Meurzh Meu_Ebrel Ebr_Mae Mae_Mezheven Eve_Gouere Gou_Eost Eos_Gwengolo Gwe_Here Her_Du Du_Kerzu Ker".split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + moment.locale('br'); + var expected = "Sul Sul Su_Lun Lun Lu_Meurzh Meu Me_Merc'her Mer Mer_Yaou Yao Ya_Gwener Gwe Gw_Sadorn Sad Sa".split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + moment.locale('br'); + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "un nebeud segondennoù", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "ur vunutenn", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "ur vunutenn", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 vunutenn", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 munutenn", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "un eur", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "un eur", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 eur", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 eur", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 eur", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "un devezh", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "un devezh", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 zevezh", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "un devezh", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 devezh", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 devezh", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ur miz", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ur miz", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "ur miz", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 viz", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 viz", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 miz", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ur miz", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 miz", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ur bloaz", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 vloaz", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ur bloaz", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 bloaz", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + moment.locale('br'); + test.equal(moment(30000).from(0), "a-benn un nebeud segondennoù", "prefix"); + test.equal(moment(0).from(30000), "un nebeud segondennoù 'zo", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + moment.locale('br'); + test.equal(moment().fromNow(), "un nebeud segondennoù 'zo", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + moment.locale('br'); + test.equal(moment().add({s: 30}).fromNow(), "a-benn un nebeud segondennoù", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "a-benn 5 devezh", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + moment.locale('br'); + + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Hiziv da 2e00 AM", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Hiziv da 2e25 AM", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Hiziv da 3e00 AM", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Warc'hoazh da 2e00 AM", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Hiziv da 1e00 AM", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Dec'h da 2e00 AM", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + moment.locale('br'); + + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [da] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [da] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [da] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + moment.locale('br'); + + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('dddd [paset da] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [paset da] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [paset da] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + moment.locale('br'); + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + "special mutations for years": function (test) { + moment.locale('br'); + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ur bloaz", "mutation 1 year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 2}), true), "2 vloaz", "mutation 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 3}), true), "3 bloaz", "mutation 3 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 4}), true), "4 bloaz", "mutation 4 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 bloaz", "mutation 5 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 9}), true), "9 bloaz", "mutation 9 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 10}), true), "10 vloaz", "mutation 10 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 21}), true), "21 bloaz", "mutation 21 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 22}), true), "22 vloaz", "mutation 22 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 133}), true), "133 bloaz", "mutation 133 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 148}), true), "148 vloaz", "mutation 148 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 261}), true), "261 bloaz", "mutation 261 years"); + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Croatian + *************************************************/ + +exports["locale:bs"] = { + setUp : function (cb) { + moment.locale('bs'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'januar jan._februar feb._mart mar._april apr._maj maj._juni jun._juli jul._avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedjelja, 14. februar 2010, 3:25:50 pm'], + ['ddd, hA', 'ned., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. nedjelja ned. ne'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '7 7. 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['L', '14. 02. 2010'], + ['LL', '14. februar 2010'], + ['LLL', '14. februar 2010 15:25'], + ['LLLL', 'nedjelja, 14. februar 2010 15:25'], + ['l', '14. 2. 2010'], + ['ll', '14. feb. 2010'], + ['lll', '14. feb. 2010 15:25'], + ['llll', 'ned., 14. feb. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'januar jan._februar feb._mart mar._april apr._maj maj._juni jun._juli jul._avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'nedjelja ned. ne_ponedjeljak pon. po_utorak uto. ut_srijeda sri. sr_četvrtak čet. če_petak pet. pe_subota sub. su'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "par sekundi", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "jedna minuta", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "jedna minuta", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minute", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuta", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "jedan sat", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "jedan sat", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 sata", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 sati", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 sati", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "dan", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "dan", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dana", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "dan", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dana", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dana", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "mjesec", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "mjesec", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "mjesec", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mjeseca", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mjeseca", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mjeseca", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "mjesec", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mjeseci", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "godinu", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 godine", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "godinu", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 godina", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "za par sekundi", "prefix"); + test.equal(moment(0).from(30000), "prije par sekundi", "prefix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "prije par sekundi", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "za par sekundi", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "za 5 dana", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "danas u 2:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "danas u 2:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "danas u 3:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "sutra u 2:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "danas u 1:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "jučer u 2:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Català + *************************************************/ + +exports["locale:ca"] = { + setUp : function (cb) { + moment.locale('ca'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = "gener gen._febrer febr._març mar._abril abr._maig mai._juny jun._juliol jul._agost ag._setembre set._octubre oct._novembre nov._desembre des.".split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); + test.done(); + }, + + "format month" : function (test) { + var expected = "gener gen._febrer febr._març mar._abril abr._maig mai._juny jun._juliol jul._agost ag._setembre set._octubre oct._novembre nov._desembre des.".split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = "diumenge dg. Dg_dilluns dl. Dl_dimarts dt. Dt_dimecres dc. Dc_dijous dj. Dj_divendres dv. Dv_dissabte ds. Ds".split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "uns segons", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "un minut", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "un minut", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuts", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuts", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "una hora", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "una hora", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 hores", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 hores", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 hores", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "un dia", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "un dia", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dies", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "un dia", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dies", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dies", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "un mes", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "un mes", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "un mes", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mesos", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mesos", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mesos", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "un mes", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mesos", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "un any", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 anys", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "un any", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 anys", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "en uns segons", "prefix"); + test.equal(moment(0).from(30000), "fa uns segons", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "fa uns segons", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "en uns segons", "en uns segons"); + test.equal(moment().add({d: 5}).fromNow(), "en 5 dies", "en 5 dies"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "avui a les 2:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "avui a les 2:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "avui a les 3:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "demà a les 2:00", "tomorrow at the same time"); + test.equal(moment(a).add({d: 1, h : -1}).calendar(), "demà a la 1:00", "tomorrow minus 1 hour"); + test.equal(moment(a).subtract({h: 1}).calendar(), "avui a la 1:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "ahir a les 2:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[el] dddd [passat a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[el] dddd [passat a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[el] dddd [passat a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Czech + *************************************************/ + +exports["locale:cs"] = { + setUp : function (cb) { + moment.locale('cs'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'leden led_únor úno_březen bře_duben dub_květen kvě_červen čvn_červenec čvc_srpen srp_září zář_říjen říj_listopad lis_prosinec pro'.split("_"), i; + function equalTest(input, mmm, monthIndex) { + test.equal(moment(input, mmm).month(), monthIndex, input + ' should be month ' + (monthIndex + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss', 'neděle, únor 14. 2010, 3:25:50'], + ['ddd, h', 'ne, 3'], + ['M Mo MM MMMM MMM', '2 2. 02 únor úno'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. neděle ne ne'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['DDDo [den v roce]', '45. den v roce'], + ['L', '14. 02. 2010'], + ['LL', '14. únor 2010'], + ['LLL', '14. únor 2010 15.25'], + ['LLLL', 'neděle 14. únor 2010 15.25'], + ['l', '14. 2. 2010'], + ['ll', '14. úno 2010'], + ['lll', '14. úno 2010 15.25'], + ['llll', 'ne 14. úno 2010 15.25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'leden led_únor úno_březen bře_duben dub_květen kvě_červen čvn_červenec čvc_srpen srp_září zář_říjen říj_listopad lis_prosinec pro'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'neděle ne ne_pondělí po po_úterý út út_středa st st_čtvrtek čt čt_pátek pá pá_sobota so so'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "pár sekund", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minuta", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minuta", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuty", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minut", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "hodina", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "hodina", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 hodiny", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 hodin", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 hodin", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "den", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "den", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dny", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "den", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dní", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dní", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "měsíc", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "měsíc", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "měsíc", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 měsíce", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 měsíce", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 měsíce", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "měsíc", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 měsíců", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "rok", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 roky", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "rok", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 let", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "za pár sekund", "prefix"); + test.equal(moment(0).from(30000), "před pár sekundami", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "před pár sekundami", "now from now should display as in the past"); + test.done(); + }, + + "fromNow (future)" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "za pár sekund", "in a few seconds"); + test.equal(moment().add({m: 1}).fromNow(), "za minutu", "in a minute"); + test.equal(moment().add({m: 3}).fromNow(), "za 3 minuty", "in 3 minutes"); + test.equal(moment().add({m: 10}).fromNow(), "za 10 minut", "in 10 minutes"); + test.equal(moment().add({h: 1}).fromNow(), "za hodinu", "in an hour"); + test.equal(moment().add({h: 3}).fromNow(), "za 3 hodiny", "in 3 hours"); + test.equal(moment().add({h: 10}).fromNow(), "za 10 hodin", "in 10 hours"); + test.equal(moment().add({d: 1}).fromNow(), "za den", "in a day"); + test.equal(moment().add({d: 3}).fromNow(), "za 3 dny", "in 3 days"); + test.equal(moment().add({d: 10}).fromNow(), "za 10 dní", "in 10 days"); + test.equal(moment().add({M: 1}).fromNow(), "za měsíc", "in a month"); + test.equal(moment().add({M: 3}).fromNow(), "za 3 měsíce", "in 3 months"); + test.equal(moment().add({M: 10}).fromNow(), "za 10 měsíců", "in 10 months"); + test.equal(moment().add({y: 1}).fromNow(), "za rok", "in a year"); + test.equal(moment().add({y: 3}).fromNow(), "za 3 roky", "in 3 years"); + test.equal(moment().add({y: 10}).fromNow(), "za 10 let", "in 10 years"); + test.done(); + }, + + "fromNow (past)" : function (test) { + test.equal(moment().subtract({s: 30}).fromNow(), "před pár sekundami", "a few seconds ago"); + test.equal(moment().subtract({m: 1}).fromNow(), "před minutou", "a minute ago"); + test.equal(moment().subtract({m: 3}).fromNow(), "před 3 minutami", "3 minutes ago"); + test.equal(moment().subtract({m: 10}).fromNow(), "před 10 minutami", "10 minutes ago"); + test.equal(moment().subtract({h: 1}).fromNow(), "před hodinou", "an hour ago"); + test.equal(moment().subtract({h: 3}).fromNow(), "před 3 hodinami", "3 hours ago"); + test.equal(moment().subtract({h: 10}).fromNow(), "před 10 hodinami", "10 hours ago"); + test.equal(moment().subtract({d: 1}).fromNow(), "před dnem", "a day ago"); + test.equal(moment().subtract({d: 3}).fromNow(), "před 3 dny", "3 days ago"); + test.equal(moment().subtract({d: 10}).fromNow(), "před 10 dny", "10 days ago"); + test.equal(moment().subtract({M: 1}).fromNow(), "před měsícem", "a month ago"); + test.equal(moment().subtract({M: 3}).fromNow(), "před 3 měsíci", "3 months ago"); + test.equal(moment().subtract({M: 10}).fromNow(), "před 10 měsíci", "10 months ago"); + test.equal(moment().subtract({y: 1}).fromNow(), "před rokem", "a year ago"); + test.equal(moment().subtract({y: 3}).fromNow(), "před 3 lety", "3 years ago"); + test.equal(moment().subtract({y: 10}).fromNow(), "před 10 lety", "10 years ago"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "dnes v 2.00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "dnes v 2.25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "dnes v 3.00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "zítra v 2.00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "dnes v 1.00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "včera v 2.00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m, nextDay; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + nextDay = ''; + switch (m.day()) { + case 0: + nextDay = 'v neděli'; + break; + case 1: + nextDay = 'v pondělí'; + break; + case 2: + nextDay = 'v úterý'; + break; + case 3: + nextDay = 've středu'; + break; + case 4: + nextDay = 've čtvrtek'; + break; + case 5: + nextDay = 'v pátek'; + break; + case 6: + nextDay = 'v sobotu'; + break; + } + test.equal(m.calendar(), m.format('[' + nextDay + '] [v] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[' + nextDay + '] [v] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[' + nextDay + '] [v] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m, lastDay; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + lastDay = ''; + switch (m.day()) { + case 0: + lastDay = 'minulou neděli'; + break; + case 1: + lastDay = 'minulé pondělí'; + break; + case 2: + lastDay = 'minulé úterý'; + break; + case 3: + lastDay = 'minulou středu'; + break; + case 4: + lastDay = 'minulý čtvrtek'; + break; + case 5: + lastDay = 'minulý pátek'; + break; + case 6: + lastDay = 'minulou sobotu'; + break; + } + test.equal(m.calendar(), m.format('[' + lastDay + '] [v] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[' + lastDay + '] [v] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[' + lastDay + '] [v] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + "humanize duration" : function (test) { + test.equal(moment.duration(1, "minutes").humanize(), "minuta", "a minute (future)"); + test.equal(moment.duration(1, "minutes").humanize(true), "za minutu", "in a minute"); + test.equal(moment.duration(-1, "minutes").humanize(), "minuta", "a minute (past)"); + test.equal(moment.duration(-1, "minutes").humanize(true), "před minutou", "a minute ago"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Chuvash + *************************************************/ + +exports["locale:cv"] = { + setUp : function (cb) { + moment.locale('cv'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'кăрлач кăр_нарăс нар_пуш пуш_ака ака_май май_çĕртме çĕр_утă утă_çурла çур_авăн ав_юпа юпа_чӳк чӳк_раштав раш'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'вырсарникун, нарăс 14-мĕш 2010, 3:25:50 pm'], + ['ddd, hA', 'выр, 3PM'], + ['M Mo MM MMMM MMM', '2 2-мĕш 02 нарăс нар'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-мĕш 14'], + ['d do dddd ddd dd', '0 0-мĕш вырсарникун выр вр'], + ['DDD DDDo DDDD', '45 45-мĕш 045'], + ['w wo ww', '7 7-мĕш 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['Çулăн DDDo кунĕ', 'Çулăн 45-мĕш кунĕ'], + ['L', '14-02-2010'], + ['LL', '2010 çулхи нарăс уйăхĕн 14-мĕшĕ'], + ['LLL', '2010 çулхи нарăс уйăхĕн 14-мĕшĕ, 15:25'], + ['LLLL', 'вырсарникун, 2010 çулхи нарăс уйăхĕн 14-мĕшĕ, 15:25'], + ['l', '14-2-2010'], + ['ll', '2010 çулхи нар уйăхĕн 14-мĕшĕ'], + ['lll', '2010 çулхи нар уйăхĕн 14-мĕшĕ, 15:25'], + ['llll', 'выр, 2010 çулхи нар уйăхĕн 14-мĕшĕ, 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1-мĕш', '1-мĕш'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2-мĕш', '2-мĕш'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3-мĕш', '3-мĕш'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4-мĕш', '4-мĕш'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5-мĕш', '5-мĕш'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6-мĕш', '6-мĕш'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7-мĕш', '7-мĕш'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8-мĕш', '8-мĕш'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9-мĕш', '9-мĕш'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10-мĕш', '10-мĕш'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11-мĕш', '11-мĕш'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12-мĕш', '12-мĕш'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13-мĕш', '13-мĕш'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14-мĕш', '14-мĕш'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15-мĕш', '15-мĕш'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16-мĕш', '16-мĕш'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17-мĕш', '17-мĕш'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18-мĕш', '18-мĕш'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19-мĕш', '19-мĕш'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20-мĕш', '20-мĕш'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21-мĕш', '21-мĕш'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22-мĕш', '22-мĕш'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23-мĕш', '23-мĕш'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24-мĕш', '24-мĕш'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25-мĕш', '25-мĕш'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26-мĕш', '26-мĕш'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27-мĕш', '27-мĕш'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28-мĕш', '28-мĕш'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29-мĕш', '29-мĕш'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30-мĕш', '30-мĕш'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31-мĕш', '31-мĕш'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'кăрлач кăр_нарăс нар_пуш пуш_ака ака_май май_çĕртме çĕр_утă утă_çурла çур_авăн ав_юпа юпа_чӳк чӳк_раштав раш'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'вырсарникун выр вр_тунтикун тун тн_ытларикун ытл ыт_юнкун юн юн_кĕçнерникун кĕç кç_эрнекун эрн эр_шăматкун шăм шм'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "пĕр-ик çеккунт", "44 sekunder = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "пĕр минут", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "пĕр минут", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 минут", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 минут", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "пĕр сехет", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "пĕр сехет", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 сехет", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 сехет", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 сехет", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "пĕр кун", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "пĕр кун", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 кун", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "пĕр кун", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 кун", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 кун", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "пĕр уйăх", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "пĕр уйăх", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "пĕр уйăх", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 уйăх", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 уйăх", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 уйăх", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "пĕр уйăх", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 уйăх", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "пĕр çул", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 çул", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "пĕр çул", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 çул", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "пĕр-ик çеккунтран", "prefix"); + test.equal(moment(0).from(30000), "пĕр-ик çеккунт каялла", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "пĕр-ик çеккунт каялла", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "пĕр-ик çеккунтран", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "5 кунран", "in 5 days"); + test.equal(moment().add({h: 2}).fromNow(), "2 сехетрен", "in 2 hours, the right suffix!"); + test.equal(moment().add({y: 3}).fromNow(), "3 çултан", "in 3 years, the right suffix!"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + test.equal(moment(a).calendar(), "Паян 02:00 сехетре", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Паян 02:25 сехетре", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Паян 03:00 сехетре", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Ыран 02:00 сехетре", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Паян 01:00 сехетре", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Ĕнер 02:00 сехетре", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('[Çитес] dddd LT [сехетре]'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[Çитес] dddd LT [сехетре]'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[Çитес] dddd LT [сехетре]'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[Иртнĕ] dddd LT [сехетре]'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[Иртнĕ] dddd LT [сехетре]'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[Иртнĕ] dddd LT [сехетре]'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-мĕш', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-мĕш', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-мĕш', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-мĕш', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-мĕш', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Welsh + *************************************************/ + +exports["locale:cy"] = { + setUp : function (cb) { + moment.locale('cy'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'Ionawr Ion_Chwefror Chwe_Mawrth Maw_Ebrill Ebr_Mai Mai_Mehefin Meh_Gorffennaf Gor_Awst Aws_Medi Med_Hydref Hyd_Tachwedd Tach_Rhagfyr Rhag'.split("_"), + i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Dydd Sul, Chwefror 14eg 2010, 3:25:50 pm'], + ['ddd, hA', 'Sul, 3PM'], + ['M Mo MM MMMM MMM', '2 2il 02 Chwefror Chwe'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14eg 14'], + ['d do dddd ddd dd', '0 0 Dydd Sul Sul Su'], + ['DDD DDDo DDDD', '45 45ain 045'], + ['w wo ww', '6 6ed 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45ain day of the year'], + ['L', '14/02/2010'], + ['LL', '14 Chwefror 2010'], + ['LLL', '14 Chwefror 2010 15:25'], + ['LLLL', 'Dydd Sul, 14 Chwefror 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 Chwe 2010'], + ['lll', '14 Chwe 2010 15:25'], + ['llll', 'Sul, 14 Chwe 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1af', '1af'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2il', '2il'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3ydd', '3ydd'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4ydd', '4ydd'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5ed', '5ed'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6ed', '6ed'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7ed', '7ed'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8fed', '8fed'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9fed', '9fed'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10fed', '10fed'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11eg', '11eg'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12fed', '12fed'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13eg', '13eg'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14eg', '14eg'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15fed', '15fed'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16eg', '16eg'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17eg', '17eg'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18fed', '18fed'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19eg', '19eg'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20fed', '20fed'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21ain', '21ain'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22ain', '22ain'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23ain', '23ain'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24ain', '24ain'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25ain', '25ain'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26ain', '26ain'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27ain', '27ain'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28ain', '28ain'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29ain', '29ain'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30ain', '30ain'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31ain', '31ain'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'Ionawr Ion_Chwefror Chwe_Mawrth Maw_Ebrill Ebr_Mai Mai_Mehefin Meh_Gorffennaf Gor_Awst Aws_Medi Med_Hydref Hyd_Tachwedd Tach_Rhagfyr Rhag'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'Dydd Sul Sul Su_Dydd Llun Llun Ll_Dydd Mawrth Maw Ma_Dydd Mercher Mer Me_Dydd Iau Iau Ia_Dydd Gwener Gwe Gw_Dydd Sadwrn Sad Sa'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ychydig eiliadau", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "munud", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "munud", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 munud", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 munud", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "awr", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "awr", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 awr", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 awr", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 awr", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "diwrnod", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "diwrnod", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 diwrnod", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "diwrnod", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 diwrnod", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 diwrnod", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "mis", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "mis", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "mis", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mis", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mis", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mis", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "mis", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mis", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "blwyddyn", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 flynedd", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "blwyddyn", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 flynedd", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "mewn ychydig eiliadau", "prefix"); + test.equal(moment(0).from(30000), "ychydig eiliadau yn ôl", "suffix"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "mewn ychydig eiliadau", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "mewn 5 diwrnod", "in 5 days"); + test.done(); + }, + + "same day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Heddiw am 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Heddiw am 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Heddiw am 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Yfory am 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Heddiw am 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Ddoe am 02:00", "yesterday at the same time"); + test.done(); + }, + + "same next week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [am] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [am] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [am] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "same last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('dddd [diwethaf am] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [diwethaf am] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [diwethaf am] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "same all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52ain', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1af', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1af', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2il', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2il', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Danish + *************************************************/ + +exports["locale:da"] = { + setUp : function (cb) { + moment.locale('da'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'januar jan_februar feb_marts mar_april apr_maj maj_juni jun_juli jul_august aug_september sep_oktober okt_november nov_december dec'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd [den] Do MMMM YYYY, h:mm:ss a', 'søndag den 14. februar 2010, 3:25:50 pm'], + ['ddd hA', 'søn 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februar feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. søndag søn sø'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[den] DDDo [dag på året]', 'den 45. dag på året'], + ['L', '14/02/2010'], + ['LL', '14. februar 2010'], + ['LLL', '14. februar 2010 15:25'], + ['LLLL', 'søndag d. 14. februar 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14. feb 2010'], + ['lll', '14. feb 2010 15:25'], + ['llll', 'søn d. 14. feb 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'januar jan_februar feb_marts mar_april apr_maj maj_juni jun_juli jul_august aug_september sep_oktober okt_november nov_december dec'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'søndag søn sø_mandag man ma_tirsdag tir ti_onsdag ons on_torsdag tor to_fredag fre fr_lørdag lør lø'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "få sekunder", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "et minut", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "et minut", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutter", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutter", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "en time", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "en time", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 timer", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 timer", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 timer", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "en dag", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "en dag", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dage", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "en dag", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dage", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dage", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "en måned", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "en måned", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "en måned", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 måneder", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 måneder", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 måneder", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "en måned", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 måneder", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "et år", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 år", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "et år", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 år", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "om få sekunder", "prefix"); + test.equal(moment(0).from(30000), "få sekunder siden", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "få sekunder siden", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "om få sekunder", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "om 5 dage", "in 5 days"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + +/************************************************** + German (Austria) + *************************************************/ + +exports["locale:de-at"] = { + setUp: function (cb) { + moment.locale('de-at'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown: function (cb) { + moment.locale('en'); + cb(); + }, + + "parse": function (test) { + test.expect(96); + + var tests = 'Jänner Jän._Februar Febr._März Mrz._April Apr._Mai Mai_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split("_"), i; + + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format": function (test) { + test.expect(22); + + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'Sonntag, 14. Februar 2010, 3:25:50 pm'], + ['ddd, hA', 'So., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 Februar Febr.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. Sonntag So. So'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['L', '14.02.2010'], + ['LL', '14. Februar 2010'], + ['LLL', '14. Februar 2010 15:25 Uhr'], + ['LLLL', 'Sonntag, 14. Februar 2010 15:25 Uhr'], + ['l', '14.2.2010'], + ['ll', '14. Febr. 2010'], + ['lll', '14. Febr. 2010 15:25 Uhr'], + ['llll', 'So., 14. Febr. 2010 15:25 Uhr'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal": function (test) { + test.expect(31); + + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month": function (test) { + test.expect(12); + + var expected = 'Jänner Jän._Februar Febr._März Mrz._April Apr._Mai Mai_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week": function (test) { + test.expect(7); + + var expected = 'Sonntag So. So_Montag Mo. Mo_Dienstag Di. Di_Mittwoch Mi. Mi_Donnerstag Do. Do_Freitag Fr. Fr_Samstag Sa. Sa'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from": function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ein paar Sekunden", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "eine Minute", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "eine Minute", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 Minuten", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 Minuten", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "eine Stunde", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "eine Stunde", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 Stunden", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 Stunden", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 Stunden", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ein Tag", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ein Tag", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 Tage", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ein Tag", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 Tage", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 Tage", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ein Monat", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ein Monat", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 Monate", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 Monate", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 Monate", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ein Monat", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 Monate", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ein Jahr", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 Jahre", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ein Jahr", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 Jahre", "5 years = 5 years"); + test.done(); + }, + + "suffix": function (test) { + test.expect(2); + test.equal(moment(30000).from(0), "in ein paar Sekunden", "prefix"); + test.equal(moment(0).from(30000), "vor ein paar Sekunden", "suffix"); + test.done(); + }, + + "fromNow": function (test) { + test.expect(2); + test.equal(moment().add({s: 30}).fromNow(), "in ein paar Sekunden", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "in 5 Tagen", "in 5 days"); + test.done(); + }, + + "calendar day": function (test) { + test.expect(6); + + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Heute um 02:00 Uhr", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Heute um 02:25 Uhr", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Heute um 03:00 Uhr", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Morgen um 02:00 Uhr", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Heute um 01:00 Uhr", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Gestern um 02:00 Uhr", "yesterday at the same time"); + test.done(); + }, + + "calendar next week": function (test) { + test.expect(15); + + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [um] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [um] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [um] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week": function (test) { + test.expect(15); + + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[letzten] dddd [um] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[letzten] dddd [um] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[letzten] dddd [um] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else": function (test) { + test.expect(4); + + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday": function (test) { + test.expect(5); + + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday": function (test) { + test.expect(5); + + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday": function (test) { + test.expect(6); + + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday": function (test) { + test.expect(6); + + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday": function (test) { + test.expect(6); + + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday": function (test) { + test.expect(6); + + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday": function (test) { + test.expect(6); + + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted": function (test) { + test.expect(5); + + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + German + *************************************************/ + +exports["locale:de"] = { + setUp : function (cb) { + moment.locale('de'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'Januar Jan._Februar Febr._März Mrz._April Apr._Mai Mai_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'Sonntag, 14. Februar 2010, 3:25:50 pm'], + ['ddd, hA', 'So., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 Februar Febr.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. Sonntag So. So'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['L', '14.02.2010'], + ['LL', '14. Februar 2010'], + ['LLL', '14. Februar 2010 15:25 Uhr'], + ['LLLL', 'Sonntag, 14. Februar 2010 15:25 Uhr'], + ['l', '14.2.2010'], + ['ll', '14. Febr. 2010'], + ['lll', '14. Febr. 2010 15:25 Uhr'], + ['llll', 'So., 14. Febr. 2010 15:25 Uhr'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'Januar Jan._Februar Febr._März Mrz._April Apr._Mai Mai_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'Sonntag So. So_Montag Mo. Mo_Dienstag Di. Di_Mittwoch Mi. Mi_Donnerstag Do. Do_Freitag Fr. Fr_Samstag Sa. Sa'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ein paar Sekunden", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "eine Minute", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "eine Minute", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 Minuten", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 Minuten", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "eine Stunde", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "eine Stunde", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 Stunden", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 Stunden", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 Stunden", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ein Tag", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ein Tag", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 Tage", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ein Tag", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 Tage", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 Tage", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ein Monat", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ein Monat", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "ein Monat", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 Monate", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 Monate", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 Monate", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ein Monat", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 Monate", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ein Jahr", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 Jahre", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ein Jahr", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 Jahre", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "in ein paar Sekunden", "prefix"); + test.equal(moment(0).from(30000), "vor ein paar Sekunden", "suffix"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "in ein paar Sekunden", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "in 5 Tagen", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Heute um 02:00 Uhr", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Heute um 02:25 Uhr", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Heute um 03:00 Uhr", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Morgen um 02:00 Uhr", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Heute um 01:00 Uhr", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Gestern um 02:00 Uhr", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [um] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [um] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [um] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[letzten] dddd [um] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[letzten] dddd [um] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[letzten] dddd [um] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Modern Greek + *************************************************/ + +exports["locale:el"] = { + setUp : function (cb) { + moment.locale('el'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var i, + tests = 'Ιανουάριος Ιαν_Φεβρουάριος Φεβ_Μάρτιος Μαρ_Απρίλιος Απρ_Μάιος Μαϊ_Ιούνιος Ιουν_Ιούλιος Ιουλ_Αύγουστος Αυγ_Σεπτέμβριος Σεπ_Οκτώβριος Οκτ_Νοέμβριος Νοε_Δεκέμβριος Δεκ'.split("_"); + + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Κυριακή, Φεβρουάριος 14η 2010, 3:25:50 μμ'], + ['dddd, D MMMM YYYY, h:mm:ss a', 'Κυριακή, 14 Φεβρουαρίου 2010, 3:25:50 μμ'], + ['ddd, hA', 'Κυρ, 3ΜΜ'], + ['dddd, MMMM YYYY', 'Κυριακή, Φεβρουάριος 2010'], + ['M Mo MM MMMM MMM', '2 2η 02 Φεβρουάριος Φεβ'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14η 14'], + ['d do dddd ddd dd', '0 0η Κυριακή Κυρ Κυ'], + ['DDD DDDo DDDD', '45 45η 045'], + ['w wo ww', '6 6η 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'μμ ΜΜ'], + ['[the] DDDo [day of the year]', 'the 45η day of the year'], + ['L', '14/02/2010'], + ['LL', '14 Φεβρουαρίου 2010'], + ['LLL', '14 Φεβρουαρίου 2010 3:25 ΜΜ'], + ['LLLL', 'Κυριακή, 14 Φεβρουαρίου 2010 3:25 ΜΜ'], + ['l', '14/2/2010'], + ['ll', '14 Φεβ 2010'], + ['lll', '14 Φεβ 2010 3:25 ΜΜ'], + ['llll', 'Κυρ, 14 Φεβ 2010 3:25 ΜΜ'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1η', '1η'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2η', '2η'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3η', '3η'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4η', '4η'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5η', '5η'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6η', '6η'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7η', '7η'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8η', '8η'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9η', '9η'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10η', '10η'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11η', '11η'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12η', '12η'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13η', '13η'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14η', '14η'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15η', '15η'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16η', '16η'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17η', '17η'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18η', '18η'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19η', '19η'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20η', '20η'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21η', '21η'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22η', '22η'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23η', '23η'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24η', '24η'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25η', '25η'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26η', '26η'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27η', '27η'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28η', '28η'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29η', '29η'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30η', '30η'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31η', '31η'); + test.done(); + }, + + "format month" : function (test) { + var i, + expected = 'Ιανουάριος Ιαν_Φεβρουάριος Φεβ_Μάρτιος Μαρ_Απρίλιος Απρ_Μάιος Μαϊ_Ιούνιος Ιουν_Ιούλιος Ιουλ_Αύγουστος Αυγ_Σεπτέμβριος Σεπ_Οκτώβριος Οκτ_Νοέμβριος Νοε_Δεκέμβριος Δεκ'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var i, + expected = 'Κυριακή Κυρ Κυ_Δευτέρα Δευ Δε_Τρίτη Τρι Τρ_Τετάρτη Τετ Τε_Πέμπτη Πεμ Πε_Παρασκευή Παρ Πα_Σάββατο Σαβ Σα'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "δευτερόλεπτα", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "ένα λεπτό", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "ένα λεπτό", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 λεπτά", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 λεπτά", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "μία ώρα", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "μία ώρα", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ώρες", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ώρες", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ώρες", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "μία μέρα", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "μία μέρα", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 μέρες", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "μία μέρα", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 μέρες", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 μέρες", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ένας μήνας", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ένας μήνας", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "ένας μήνας", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 μήνες", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 μήνες", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 μήνες", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ένας μήνας", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 μήνες", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ένας χρόνος", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 χρόνια", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ένας χρόνος", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 χρόνια", "5 years = 5 years"); + + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "σε δευτερόλεπτα", "prefix"); + test.equal(moment(0).from(30000), "δευτερόλεπτα πριν", "suffix"); + + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "δευτερόλεπτα πριν", "now from now should display as in the past"); + + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "σε δευτερόλεπτα", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "σε 5 μέρες", "in 5 days"); + + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Σήμερα στις 2:00 ΠΜ", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Σήμερα στις 2:25 ΠΜ", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Σήμερα στις 3:00 ΠΜ", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Αύριο στις 2:00 ΠΜ", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Σήμερα στη 1:00 ΠΜ", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Χθες στις 2:00 ΠΜ", "yesterday at the same time"); + + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [' + (m.hours() % 12 === 1 ? 'στη' : 'στις') + '] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [στις] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [στις] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m, dayString; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + dayString = m.day() === 6 ? '[το προηγούμενο Σάββατο]' : '[την προηγούμενη] dddd'; + test.equal(m.calendar(), m.format(dayString + ' [' + (m.hours() % 12 === 1 ? 'στη' : 'στις') + '] LT'), "Today - " + i + " days current time"); + m.hours(1).minutes(30).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(dayString + ' [στη] LT'), "Today - " + i + " days one o clock"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(dayString + ' [στις] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(dayString + ' [στις] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 52, "Dec 31 2006 should be week 52"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 30]).week(), 52, "Dec 30 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 52, "Dec 29 2002 should be week 52"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 52, "Dec 28 2008 should be week 52"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 52, "Dec 27 2009 should be week 52"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 2]).week(), 53, "Jan 2 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 9]).week(), 1, "Jan 9 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 51, "Dec 26 2010 should be week 51"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 8]).week(), 1, "Jan 8 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday format" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52η', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1η', "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1η', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2η', "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2η', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Australian English + *************************************************/ + +exports["locale:en-au"] = { + setUp : function (cb) { + moment.locale('en-au'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'], + ['ddd, hA', 'Sun, 3PM'], + ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14th 14'], + ['d do dddd ddd dd', '0 0th Sunday Sun Su'], + ['DDD DDDo DDDD', '45 45th 045'], + ['w wo ww', '6 6th 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45th day of the year'], + ['L', '14/02/2010'], + ['LL', '14 February 2010'], + ['LLL', '14 February 2010 3:25 PM'], + ['LLLL', 'Sunday, 14 February 2010 3:25 PM'], + ['l', '14/2/2010'], + ['ll', '14 Feb 2010'], + ['lll', '14 Feb 2010 3:25 PM'], + ['llll', 'Sun, 14 Feb 2010 3:25 PM'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "a few seconds", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "a minute", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "a minute", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutes", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutes", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "an hour", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "an hour", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 hours", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 hours", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 hours", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "a day", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "a day", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 days", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "a day", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 days", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 days", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "a month", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "a month", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "a month", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 months", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 months", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 months", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "a month", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 months", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "a year", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 years", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "a year", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 years", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "in a few seconds", "prefix"); + test.equal(moment(0).from(30000), "a few seconds ago", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "a few seconds ago", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "in a few seconds", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "in 5 days", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Today at 2:00 AM", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Today at 2:25 AM", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Today at 3:00 AM", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Tomorrow at 2:00 AM", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Today at 1:00 AM", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Yesterday at 2:00 AM", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52nd', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1st', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1st', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2nd', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2nd', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + +/************************************************** + English (Canadian) +*************************************************/ + +exports["locale:en-ca"] = { + setUp : function (cb) { + moment.locale('en-ca'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var i, + tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split("_"); + + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'], + ['ddd, hA', 'Sun, 3PM'], + ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14th 14'], + ['d do dddd ddd dd', '0 0th Sunday Sun Su'], + ['DDD DDDo DDDD', '45 45th 045'], + ['w wo ww', '8 8th 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45th day of the year'], + ['L', '2010-02-14'], + ['LL', '14 February, 2010'], + ['LLL', '14 February, 2010 3:25 PM'], + ['LLLL', 'Sunday, 14 February, 2010 3:25 PM'], + ['l', '2010-2-14'], + ['ll', '14 Feb, 2010'], + ['lll', '14 Feb, 2010 3:25 PM'], + ['llll', 'Sun, 14 Feb, 2010 3:25 PM'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st'); + + test.done(); + }, + + "format month" : function (test) { + var i, + expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + + test.done(); + }, + + "format week" : function (test) { + var i, + expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "a few seconds", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "a minute", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "a minute", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutes", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutes", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "an hour", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "an hour", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 hours", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 hours", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 hours", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "a day", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "a day", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 days", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "a day", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 days", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 days", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "a month", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "a month", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "a month", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 months", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 months", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 months", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "a month", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 months", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "a year", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 years", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "a year", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 years", "5 years = 5 years"); + + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "in a few seconds", "prefix"); + test.equal(moment(0).from(30000), "a few seconds ago", "suffix"); + + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "a few seconds ago", "now from now should display as in the past"); + + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "in a few seconds", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "in 5 days", "in 5 days"); + + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Today at 2:00 AM", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Today at 2:25 AM", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Today at 3:00 AM", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Tomorrow at 2:00 AM", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Today at 1:00 AM", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Yesterday at 2:00 AM", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Sunday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday format" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1st', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1st', "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2nd', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2nd', "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3rd', "Jan 15 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + British English + *************************************************/ + +exports["locale:en-gb"] = { + setUp : function (cb) { + moment.locale('en-gb'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'], + ['ddd, hA', 'Sun, 3PM'], + ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14th 14'], + ['d do dddd ddd dd', '0 0th Sunday Sun Su'], + ['DDD DDDo DDDD', '45 45th 045'], + ['w wo ww', '6 6th 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45th day of the year'], + ['L', '14/02/2010'], + ['LL', '14 February 2010'], + ['LLL', '14 February 2010 15:25'], + ['LLLL', 'Sunday, 14 February 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 Feb 2010'], + ['lll', '14 Feb 2010 15:25'], + ['llll', 'Sun, 14 Feb 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "a few seconds", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "a minute", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "a minute", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutes", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutes", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "an hour", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "an hour", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 hours", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 hours", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 hours", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "a day", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "a day", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 days", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "a day", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 days", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 days", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "a month", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "a month", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "a month", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 months", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 months", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 months", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "a month", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 months", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "a year", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 years", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "a year", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 years", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "in a few seconds", "prefix"); + test.equal(moment(0).from(30000), "a few seconds ago", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "a few seconds ago", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "in a few seconds", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "in 5 days", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Today at 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Today at 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Today at 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Tomorrow at 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Today at 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Yesterday at 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52nd', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1st', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1st', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2nd', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2nd', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + English + *************************************************/ + +exports["locale:en"] = { + setUp : function (cb) { + moment.locale('en'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var i, + tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split("_"); + + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'], + ['ddd, hA', 'Sun, 3PM'], + ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14th 14'], + ['d do dddd ddd dd', '0 0th Sunday Sun Su'], + ['DDD DDDo DDDD', '45 45th 045'], + ['w wo ww', '8 8th 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45th day of the year'], + ['L', '02/14/2010'], + ['LL', 'February 14, 2010'], + ['LLL', 'February 14, 2010 3:25 PM'], + ['LLLL', 'Sunday, February 14, 2010 3:25 PM'], + ['l', '2/14/2010'], + ['ll', 'Feb 14, 2010'], + ['lll', 'Feb 14, 2010 3:25 PM'], + ['llll', 'Sun, Feb 14, 2010 3:25 PM'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st'); + test.done(); + }, + + "format month" : function (test) { + var i, + expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var i, + expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "a few seconds", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "a minute", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "a minute", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutes", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutes", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "an hour", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "an hour", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 hours", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 hours", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 hours", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "a day", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "a day", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 days", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "a day", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 days", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 days", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "a month", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "a month", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "a month", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 months", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 months", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 months", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "a month", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 months", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "a year", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 years", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "a year", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 years", "5 years = 5 years"); + + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "in a few seconds", "prefix"); + test.equal(moment(0).from(30000), "a few seconds ago", "suffix"); + + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "a few seconds ago", "now from now should display as in the past"); + + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "in a few seconds", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "in 5 days", "in 5 days"); + + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Today at 2:00 AM", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Today at 2:25 AM", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Today at 3:00 AM", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Tomorrow at 2:00 AM", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Today at 1:00 AM", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Yesterday at 2:00 AM", "yesterday at the same time"); + + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [at] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[Last] dddd [at] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Sunday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday format" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1st', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1st', "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2nd', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2nd', "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3rd', "Jan 15 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Esperanto + *************************************************/ + +exports["locale:eo"] = { + setUp : function (cb) { + moment.locale('eo'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'januaro jan_februaro feb_marto mar_aprilo apr_majo maj_junio jun_julio jul_aŭgusto aŭg_septembro sep_oktobro okt_novembro nov_decembro dec'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Dimanĉo, februaro 14a 2010, 3:25:50 p.t.m.'], + ['ddd, hA', 'Dim, 3P.T.M.'], + ['M Mo MM MMMM MMM', '2 2a 02 februaro feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14a 14'], + ['d do dddd ddd dd', '0 0a Dimanĉo Dim Di'], + ['DDD DDDo DDDD', '45 45a 045'], + ['w wo ww', '7 7a 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'p.t.m. P.T.M.'], + ['[la] DDDo [tago] [de] [la] [jaro]', 'la 45a tago de la jaro'], + ['L', '2010-02-14'], + ['LL', '14-an de februaro, 2010'], + ['LLL', '14-an de februaro, 2010 15:25'], + ['LLLL', 'Dimanĉo, la 14-an de februaro, 2010 15:25'], + ['l', '2010-2-14'], + ['ll', '14-an de feb, 2010'], + ['lll', '14-an de feb, 2010 15:25'], + ['llll', 'Dim, la 14-an de feb, 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1a', '1a'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2a', '2a'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3a', '3a'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4a', '4a'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5a', '5a'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6a', '6a'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7a', '7a'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8a', '8a'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9a', '9a'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10a', '10a'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11a', '11a'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12a', '12a'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13a', '13a'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14a', '14a'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15a', '15a'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16a', '16a'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17a', '17a'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18a', '18a'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19a', '19a'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20a', '20a'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21a', '21a'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22a', '22a'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23a', '23a'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24a', '24a'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25a', '25a'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26a', '26a'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27a', '27a'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28a', '28a'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29a', '29a'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30a', '30a'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31a', '31a'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'januaro jan_februaro feb_marto mar_aprilo apr_majo maj_junio jun_julio jul_aŭgusto aŭg_septembro sep_oktobro okt_novembro nov_decembro dec'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'Dimanĉo Dim Di_Lundo Lun Lu_Mardo Mard Ma_Merkredo Merk Me_Ĵaŭdo Ĵaŭ Ĵa_Vendredo Ven Ve_Sabato Sab Sa'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "sekundoj", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minuto", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minuto", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutoj", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutoj", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "horo", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "horo", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 horoj", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 horoj", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 horoj", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "tago", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "tago", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 tagoj", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "tago", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 tagoj", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 tagoj", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "monato", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "monato", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "monato", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 monatoj", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 monatoj", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 monatoj", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "monato", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 monatoj", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "jaro", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 jaroj", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "jaro", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 jaroj", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "je sekundoj", "je prefix"); + test.equal(moment(0).from(30000), "antaŭ sekundoj", "antaŭ prefix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "antaŭ sekundoj", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "je sekundoj", "je sekundoj"); + test.equal(moment().add({d: 5}).fromNow(), "je 5 tagoj", "je 5 tagoj"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Hodiaŭ je 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Hodiaŭ je 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Hodiaŭ je 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Morgaŭ je 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Hodiaŭ je 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Hieraŭ je 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [je] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [je] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [je] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[pasinta] dddd [je] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[pasinta] dddd [je] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[pasinta] dddd [je] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1a', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1a', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2a', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2a', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3a', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Spanish + *************************************************/ + +exports["locale:es"] = { + setUp : function (cb) { + moment.locale('es'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'enero ene._febrero feb._marzo mar._abril abr._mayo may._junio jun._julio jul._agosto ago._septiembre sep._octubre oct._noviembre nov._diciembre dic.'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'domingo, febrero 14º 2010, 3:25:50 pm'], + ['ddd, hA', 'dom., 3PM'], + ['M Mo MM MMMM MMM', '2 2º 02 febrero feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14º 14'], + ['d do dddd ddd dd', '0 0º domingo dom. Do'], + ['DDD DDDo DDDD', '45 45º 045'], + ['w wo ww', '6 6º 06'], + ['YYYY-MMM-DD', '2010-feb-14'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45º day of the year'], + ['L', '14/02/2010'], + ['LL', '14 de febrero del 2010'], + ['LLL', '14 de febrero del 2010 15:25'], + ['LLLL', 'domingo, 14 de febrero del 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 de feb. del 2010'], + ['lll', '14 de feb. del 2010 15:25'], + ['llll', 'dom., 14 de feb. del 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'enero ene._febrero feb._marzo mar._abril abr._mayo may._junio jun._julio jul._agosto ago._septiembre sep._octubre oct._noviembre nov._diciembre dic.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'domingo dom. Do_lunes lun. Lu_martes mar. Ma_miércoles mié. Mi_jueves jue. Ju_viernes vie. Vi_sábado sáb. Sá'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "unos segundos", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "un minuto", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "un minuto", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutos", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutos", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "una hora", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "una hora", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 horas", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 horas", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 horas", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "un día", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "un día", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 días", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "un día", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 días", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 días", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "un mes", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "un mes", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "un mes", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 meses", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 meses", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 meses", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "un mes", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 meses", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "un año", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 años", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "un año", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 años", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "en unos segundos", "prefix"); + test.equal(moment(0).from(30000), "hace unos segundos", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "hace unos segundos", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "en unos segundos", "en unos segundos"); + test.equal(moment().add({d: 5}).fromNow(), "en 5 días", "en 5 días"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "hoy a las 2:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "hoy a las 2:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "hoy a las 3:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "mañana a las 2:00", "tomorrow at the same time"); + test.equal(moment(a).add({d: 1, h : -1}).calendar(), "mañana a la 1:00", "tomorrow minus 1 hour"); + test.equal(moment(a).subtract({h: 1}).calendar(), "hoy a la 1:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "ayer a las 2:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + +/************************************************** + Estonian +**************************************************/ + +exports["locale:et"] = { + setUp : function (cb) { + moment.locale('et'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'jaanuar jaan_veebruar veebr_märts märts_aprill apr_mai mai_juuni juuni_juuli juuli_august aug_september sept_oktoober okt_november nov_detsember dets'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' peaks olema kuu ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, H:mm:ss', 'pühapäev, 14. veebruar 2010, 15:25:50'], + ['ddd, h', 'P, 3'], + ['M Mo MM MMMM MMM', '2 2. 02 veebruar veebr'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. pühapäev P P'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[aasta] DDDo [päev]', 'aasta 45. päev'], + ['L', '14.02.2010'], + ['LL', '14. veebruar 2010'], + ['LLL', '14. veebruar 2010 15:25'], + ['LLLL', 'pühapäev, 14. veebruar 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14. veebr 2010'], + ['lll', '14. veebr 2010 15:25'], + ['llll', 'P, 14. veebr 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'jaanuar jaan_veebruar veebr_märts märts_aprill apr_mai mai_juuni juuni_juuli juuli_august aug_september sept_oktoober okt_november nov_detsember dets'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'pühapäev P P_esmaspäev E E_teisipäev T T_kolmapäev K K_neljapäev N N_reede R R_laupäev L L'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "paar sekundit", "44 seconds = paar sekundit"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "üks minut", "45 seconds = üks minut"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "üks minut", "89 seconds = üks minut"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutit", "90 seconds = 2 minutit"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutit", "44 minutes = 44 minutit"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "üks tund", "45 minutes = tund aega"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "üks tund", "89 minutes = üks tund"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 tundi", "90 minutes = 2 tundi"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 tundi", "5 hours = 5 tundi"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 tundi", "21 hours = 21 tundi"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "üks päev", "22 hours = üks päev"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "üks päev", "35 hours = üks päev"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 päeva", "36 hours = 2 päeva"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "üks päev", "1 day = üks päev"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 päeva", "5 days = 5 päeva"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 päeva", "25 days = 25 päeva"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "üks kuu", "26 days = üks kuu"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "üks kuu", "30 days = üks kuu"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "üks kuu", "43 days = üks kuu"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 kuud", "46 days = 2 kuud"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 kuud", "75 days = 2 kuud"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 kuud", "76 days = 3 kuud"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "üks kuu", "1 month = üks kuu"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 kuud", "5 months = 5 kuud"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "üks aasta", "345 days = üks aasta"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 aastat", "548 days = 2 aastat"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "üks aasta", "1 year = üks aasta"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 aastat", "5 years = 5 aastat"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "mõne sekundi pärast", "prefix"); + test.equal(moment(0).from(30000), "mõni sekund tagasi", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "mõni sekund tagasi", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "mõne sekundi pärast", "in a few seconds"); + test.equal(moment().subtract({s: 30}).fromNow(), "mõni sekund tagasi", "a few seconds ago"); + + test.equal(moment().add({m: 1}).fromNow(), "ühe minuti pärast", "in a minute"); + test.equal(moment().subtract({m: 1}).fromNow(), "üks minut tagasi", "a minute ago"); + + test.equal(moment().add({m: 5}).fromNow(), "5 minuti pärast", "in 5 minutes"); + test.equal(moment().subtract({m: 5}).fromNow(), "5 minutit tagasi", "5 minutes ago"); + + test.equal(moment().add({d: 1}).fromNow(), "ühe päeva pärast", "in one day"); + test.equal(moment().subtract({d: 1}).fromNow(), "üks päev tagasi", "one day ago"); + + test.equal(moment().add({d: 5}).fromNow(), "5 päeva pärast", "in 5 days"); + test.equal(moment().subtract({d: 5}).fromNow(), "5 päeva tagasi", "5 days ago"); + + test.equal(moment().add({M: 1}).fromNow(), "kuu aja pärast", "in a month"); + test.equal(moment().subtract({M: 1}).fromNow(), "kuu aega tagasi", "a month ago"); + + test.equal(moment().add({M: 5}).fromNow(), "5 kuu pärast", "in 5 months"); + test.equal(moment().subtract({M: 5}).fromNow(), "5 kuud tagasi", "5 months ago"); + + test.equal(moment().add({y: 1}).fromNow(), "ühe aasta pärast", "in a year"); + test.equal(moment().subtract({y: 1}).fromNow(), "aasta tagasi", "a year ago"); + + test.equal(moment().add({y: 5}).fromNow(), "5 aasta pärast", "in 5 years"); + test.equal(moment().subtract({y: 5}).fromNow(), "5 aastat tagasi", "5 years ago"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Täna, 2:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Täna, 2:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Täna, 3:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Homme, 2:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Täna, 1:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Eile, 2:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('[Järgmine] dddd LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[Järgmine] dddd LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[Järgmine] dddd LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[Eelmine] dddd LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[Eelmine] dddd LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[Eelmine] dddd LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 nädal tagasi"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "1 nädala pärast"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 nädalat tagasi"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "2 nädala pärast"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Euskara + *************************************************/ + +exports["locale:eu"] = { + setUp : function (cb) { + moment.locale('eu'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'urtarrila urt._otsaila ots._martxoa mar._apirila api._maiatza mai._ekaina eka._uztaila uzt._abuztua abu._iraila ira._urria urr._azaroa aza._abendua abe.'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'igandea, otsaila 14. 2010, 3:25:50 pm'], + ['ddd, hA', 'ig., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 otsaila ots.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. igandea ig. ig'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '7 7. 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['L', '2010-02-14'], + ['LL', '2010ko otsailaren 14a'], + ['LLL', '2010ko otsailaren 14a 15:25'], + ['LLLL', 'igandea, 2010ko otsailaren 14a 15:25'], + ['l', '2010-2-14'], + ['ll', '2010ko ots. 14a'], + ['lll', '2010ko ots. 14a 15:25'], + ['llll', 'ig., 2010ko ots. 14a 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'urtarrila urt._otsaila ots._martxoa mar._apirila api._maiatza mai._ekaina eka._uztaila uzt._abuztua abu._iraila ira._urria urr._azaroa aza._abendua abe.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'igandea ig. ig_astelehena al. al_asteartea ar. ar_asteazkena az. az_osteguna og. og_ostirala ol. ol_larunbata lr. lr'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "segundo batzuk", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minutu bat", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minutu bat", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutu", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutu", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ordu bat", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ordu bat", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ordu", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ordu", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ordu", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "egun bat", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "egun bat", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 egun", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "egun bat", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 egun", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 egun", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "hilabete bat", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "hilabete bat", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "hilabete bat", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 hilabete", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 hilabete", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 hilabete", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "hilabete bat", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 hilabete", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "urte bat", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 urte", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "urte bat", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 urte", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "segundo batzuk barru", "prefix"); + test.equal(moment(0).from(30000), "duela segundo batzuk", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "duela segundo batzuk", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "segundo batzuk barru", "in seconds"); + test.equal(moment().add({d: 5}).fromNow(), "5 egun barru", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "gaur 02:00etan", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "gaur 02:25etan", "now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "gaur 03:00etan", "now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "bihar 02:00etan", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "gaur 01:00etan", "now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "atzo 02:00etan", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd LT[etan]'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd LT[etan]'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd LT[etan]'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[aurreko] dddd LT[etan]'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[aurreko] dddd LT[etan]'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[aurreko] dddd LT[etan]'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +// moment.js Persian (fa) tests +// author: Ebrahim Byagowi : https://github.com/ebraminio +var moment = require("../../moment"); + +exports["locale:fa"] = { + setUp : function (cb) { + moment.locale('fa'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1) + ' instead is month ' + moment(input, mmm).month()); + } + for (i = 0; i < 12; i++) { + equalTest(tests[i], 'MMM', i); + equalTest(tests[i], 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'یک\u200cشنبه، فوریه ۱۴م ۲۰۱۰، ۳:۲۵:۵۰ بعد از ظهر'], + ['ddd, hA', 'یک\u200cشنبه، ۳بعد از ظهر'], + ['M Mo MM MMMM MMM', '۲ ۲م ۰۲ فوریه فوریه'], + ['YYYY YY', '۲۰۱۰ ۱۰'], + ['D Do DD', '۱۴ ۱۴م ۱۴'], + ['d do dddd ddd dd', '۰ ۰م یک\u200cشنبه یک\u200cشنبه ی'], + ['DDD DDDo DDDD', '۴۵ ۴۵م ۰۴۵'], + ['w wo ww', '۸ ۸م ۰۸'], + ['h hh', '۳ ۰۳'], + ['H HH', '۱۵ ۱۵'], + ['m mm', '۲۵ ۲۵'], + ['s ss', '۵۰ ۵۰'], + ['a A', 'بعد از ظهر بعد از ظهر'], + ['DDDo [روز سال]', '۴۵م روز سال'], + ['L', '۱۴/۰۲/۲۰۱۰'], + ['LL', '۱۴ فوریه ۲۰۱۰'], + ['LLL', '۱۴ فوریه ۲۰۱۰ ۱۵:۲۵'], + ['LLLL', 'یک\u200cشنبه، ۱۴ فوریه ۲۰۱۰ ۱۵:۲۵'], + ['l', '۱۴/۲/۲۰۱۰'], + ['ll', '۱۴ فوریه ۲۰۱۰'], + ['lll', '۱۴ فوریه ۲۰۱۰ ۱۵:۲۵'], + ['llll', 'یک\u200cشنبه، ۱۴ فوریه ۲۰۱۰ ۱۵:۲۵'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '۱م', '1'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '۲م', '2'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '۳م', '3'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '۴م', '4'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '۵م', '5'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '۶م', '6'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '۷م', '7'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '۸م', '8'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '۹م', '9'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '۱۰م', '10'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '۱۱م', '11'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '۱۲م', '12'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '۱۳م', '13'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '۱۴م', '14'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '۱۵م', '15'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '۱۶م', '16'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '۱۷م', '17'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '۱۸م', '18'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '۱۹م', '19'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '۲۰م', '20'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '۲۱م', '21'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '۲۲م', '22'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '۲۳م', '23'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '۲۴م', '24'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '۲۵م', '25'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '۲۶م', '26'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '۲۷م', '27'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '۲۸م', '28'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '۲۹م', '29'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '۳۰م', '30'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '۳۱م', '31'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'ژانویه ژانویه_فوریه فوریه_مارس مارس_آوریل آوریل_مه مه_ژوئن ژوئن_ژوئیه ژوئیه_اوت اوت_سپتامبر سپتامبر_اکتبر اکتبر_نوامبر نوامبر_دسامبر دسامبر'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'یک\u200cشنبه یک\u200cشنبه ی_دوشنبه دوشنبه د_سه\u200cشنبه سه\u200cشنبه س_چهارشنبه چهارشنبه چ_پنج\u200cشنبه پنج\u200cشنبه پ_جمعه جمعه ج_شنبه شنبه ش'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "چندین ثانیه", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "یک دقیقه", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "یک دقیقه", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "۲ دقیقه", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "۴۴ دقیقه", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "یک ساعت", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "یک ساعت", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "۲ ساعت", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "۵ ساعت", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "۲۱ ساعت", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "یک روز", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "یک روز", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "۲ روز", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "یک روز", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "۵ روز", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "۲۵ روز", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "یک ماه", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "یک ماه", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "یک ماه", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "۲ ماه", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "۲ ماه", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "۳ ماه", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "یک ماه", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "۵ ماه", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "یک سال", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "۲ سال", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "یک سال", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "۵ سال", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "در چندین ثانیه", "prefix"); + test.equal(moment(0).from(30000), "چندین ثانیه پیش", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "چندین ثانیه پیش", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "در چندین ثانیه", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "در ۵ روز", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "امروز ساعت ۰۲:۰۰", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "امروز ساعت ۰۲:۲۵", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "امروز ساعت ۰۳:۰۰", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "فردا ساعت ۰۲:۰۰", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "امروز ساعت ۰۱:۰۰", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "دیروز ساعت ۰۲:۰۰", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [ساعت] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [ساعت] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [ساعت] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('dddd [پیش ساعت] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [پیش ساعت] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [پیش ساعت] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + + // Saturday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 31]).week(), 1, "Dec 31 2011 should be week 1"); + test.equal(moment([2012, 0, 6]).week(), 1, "Jan 6 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 2, "Jan 7 2012 should be week 2"); + test.equal(moment([2012, 0, 13]).week(), 2, "Jan 13 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 3, "Jan 14 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 30]).week(), 1, "Dec 30 2006 should be week 1"); + test.equal(moment([2007, 0, 5]).week(), 1, "Jan 5 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 2, "Jan 6 2007 should be week 2"); + test.equal(moment([2007, 0, 12]).week(), 2, "Jan 12 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 3, "Jan 13 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 1, "Dec 29 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 4]).week(), 1, "Jan 4 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 2, "Jan 5 2008 should be week 2"); + test.equal(moment([2008, 0, 11]).week(), 2, "Jan 11 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 3, "Jan 12 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 28]).week(), 1, "Dec 28 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 3]).week(), 1, "Jan 3 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 2, "Jan 4 2003 should be week 2"); + test.equal(moment([2003, 0, 10]).week(), 2, "Jan 10 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 3, "Jan 11 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 27]).week(), 1, "Dec 27 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 2]).week(), 1, "Jan 2 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 2, "Jan 3 2009 should be week 2"); + test.equal(moment([2009, 0, 9]).week(), 2, "Jan 9 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 3, "Jan 10 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 26]).week(), 1, "Dec 26 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 2, "Jan 2 2010 should be week 2"); + test.equal(moment([2010, 0, 8]).week(), 2, "Jan 8 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 3, "Jan 9 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 7]).week(), 1, "Jan 7 2011 should be week 1"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 14]).week(), 2, "Jan 14 2011 should be week 2"); + test.equal(moment([2011, 0, 15]).week(), 3, "Jan 15 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 31]).format('w ww wo'), '۱ ۰۱ ۱م', "Dec 31 2011 should be week 1"); + test.equal(moment([2012, 0, 6]).format('w ww wo'), '۱ ۰۱ ۱م', "Jan 6 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '۲ ۰۲ ۲م', "Jan 7 2012 should be week 2"); + test.equal(moment([2012, 0, 13]).format('w ww wo'), '۲ ۰۲ ۲م', "Jan 13 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '۳ ۰۳ ۳م', "Jan 14 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Finnish + *************************************************/ + +exports["locale:fi"] = { + setUp : function (cb) { + moment.locale('fi'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'tammikuu tammi_helmikuu helmi_maaliskuu maalis_huhtikuu huhti_toukokuu touko_kesäkuu kesä_heinäkuu heinä_elokuu elo_syyskuu syys_lokakuu loka_marraskuu marras_joulukuu joulu'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'sunnuntai, helmikuu 14. 2010, 3:25:50 pm'], + ['ddd, hA', 'su, 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 helmikuu helmi'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. sunnuntai su su'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[vuoden] DDDo [päivä]', 'vuoden 45. päivä'], + ['L', '14.02.2010'], + ['LL', '14. helmikuuta 2010'], + ['LLL', '14. helmikuuta 2010, klo 15.25'], + ['LLLL', 'sunnuntai, 14. helmikuuta 2010, klo 15.25'], + ['l', '14.2.2010'], + ['ll', '14. helmi 2010'], + ['lll', '14. helmi 2010, klo 15.25'], + ['llll', 'su, 14. helmi 2010, klo 15.25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1st'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2nd'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3rd'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4th'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5th'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6th'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7th'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8th'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9th'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10th'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11th'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12th'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13th'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14th'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15th'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16th'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17th'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18th'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19th'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20th'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21st'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22nd'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23rd'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24th'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25th'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26th'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27th'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28th'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29th'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30th'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31st'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'tammikuu tammi_helmikuu helmi_maaliskuu maalis_huhtikuu huhti_toukokuu touko_kesäkuu kesä_heinäkuu heinä_elokuu elo_syyskuu syys_lokakuu loka_marraskuu marras_joulukuu joulu'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'sunnuntai su su_maanantai ma ma_tiistai ti ti_keskiviikko ke ke_torstai to to_perjantai pe pe_lauantai la la'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "muutama sekunti", "44 seconds = few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minuutti", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minuutti", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "kaksi minuuttia", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuuttia", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "tunti", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "tunti", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "kaksi tuntia", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "viisi tuntia", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 tuntia", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "päivä", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "päivä", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "kaksi päivää", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "päivä", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "viisi päivää", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 päivää", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "kuukausi", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "kuukausi", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "kuukausi", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "kaksi kuukautta", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "kaksi kuukautta", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "kolme kuukautta", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "kuukausi", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "viisi kuukautta", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "vuosi", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "kaksi vuotta", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "vuosi", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "viisi vuotta", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "muutaman sekunnin päästä", "prefix"); + test.equal(moment(0).from(30000), "muutama sekunti sitten", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "muutama sekunti sitten", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "muutaman sekunnin päästä", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "viiden päivän päästä", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "tänään klo 02.00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "tänään klo 02.25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "tänään klo 03.00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "huomenna klo 02.00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "tänään klo 01.00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "eilen klo 02.00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [klo] LT'), "today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [klo] LT'), "today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [klo] LT'), "today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[viime] dddd[na] [klo] LT'), "today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[viime] dddd[na] [klo] LT'), "today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[viime] dddd[na] [klo] LT'), "today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "yksi viikko sitten"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "yhden viikon päästä"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "kaksi viikkoa sitten"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "kaden viikon päästä"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Danish + *************************************************/ + +exports["locale:fo"] = { + setUp : function (cb) { + moment.locale('fo'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'januar jan_februar feb_mars mar_apríl apr_mai mai_juni jun_juli jul_august aug_september sep_oktober okt_november nov_desember des'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd [tann] Do MMMM YYYY, h:mm:ss a', 'sunnudagur tann 14. februar 2010, 3:25:50 pm'], + ['ddd hA', 'sun 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februar feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. sunnudagur sun su'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[tann] DDDo [dagin á árinum]', 'tann 45. dagin á árinum'], + ['L', '14/02/2010'], + ['LL', '14 februar 2010'], + ['LLL', '14 februar 2010 15:25'], + ['LLLL', 'sunnudagur 14. februar, 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 feb 2010'], + ['lll', '14 feb 2010 15:25'], + ['llll', 'sun 14. feb, 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'januar jan_februar feb_mars mar_apríl apr_mai mai_juni jun_juli jul_august aug_september sep_oktober okt_november nov_desember des'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'sunnudagur sun su_mánadagur mán má_týsdagur týs tý_mikudagur mik mi_hósdagur hós hó_fríggjadagur frí fr_leygardagur ley le'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "fá sekund", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "ein minutt", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "ein minutt", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuttir", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuttir", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ein tími", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ein tími", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 tímar", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 tímar", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 tímar", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ein dagur", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ein dagur", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dagar", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ein dagur", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dagar", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dagar", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ein mánaði", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ein mánaði", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "ein mánaði", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mánaðir", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mánaðir", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mánaðir", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ein mánaði", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mánaðir", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "eitt ár", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 ár", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "eitt ár", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 ár", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "um fá sekund", "prefix"); + test.equal(moment(0).from(30000), "fá sekund síðani", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "fá sekund síðani", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "um fá sekund", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "um 5 dagar", "in 5 days"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + +/************************************************** + French (Canadian) +*************************************************/ + +exports["locale:fr-ca"] = { + setUp : function (cb) { + moment.locale('fr-ca'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var i, + tests = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split("_"); + + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'dimanche, février 14 2010, 3:25:50 pm'], + ['ddd, hA', 'dim., 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 février févr.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 dimanche dim. Di'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['L', '2010-02-14'], + ['LL', '14 février 2010'], + ['LLL', '14 février 2010 15:25'], + ['LLLL', 'dimanche 14 février 2010 15:25'], + ['l', '2010-2-14'], + ['ll', '14 févr. 2010'], + ['lll', '14 févr. 2010 15:25'], + ['llll', 'dim. 14 févr. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1er', '1er'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); + + test.done(); + }, + + "format month" : function (test) { + var i, + expected = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + + test.done(); + }, + + "format week" : function (test) { + var i, + expected = 'dimanche dim. Di_lundi lun. Lu_mardi mar. Ma_mercredi mer. Me_jeudi jeu. Je_vendredi ven. Ve_samedi sam. Sa'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "quelques secondes", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "une minute", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "une minute", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutes", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutes", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "une heure", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "une heure", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 heures", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 heures", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 heures", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "un jour", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "un jour", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 jours", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "un jour", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 jours", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 jours", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "un mois", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "un mois", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "un mois", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mois", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mois", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mois", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "un mois", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mois", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "un an", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 ans", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "un an", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 ans", "5 years = 5 years"); + + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "dans quelques secondes", "prefix"); + test.equal(moment(0).from(30000), "il y a quelques secondes", "suffix"); + + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "dans quelques secondes", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "dans 5 jours", "in 5 days"); + + test.done(); + }, + + "same day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Aujourd'hui à 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Aujourd'hui à 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Aujourd'hui à 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Demain à 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Aujourd'hui à 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Hier à 02:00", "yesterday at the same time"); + test.done(); + }, + + "same next week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [à] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [à] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [à] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "same last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('dddd [dernier à] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [dernier à] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [dernier à] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "same all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Sunday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday format" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1er', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1er', "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', "Jan 15 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + French + *************************************************/ + +exports["locale:fr"] = { + setUp : function (cb) { + moment.locale('fr'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split("_"), + i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'dimanche, février 14 2010, 3:25:50 pm'], + ['ddd, hA', 'dim., 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 février févr.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 dimanche dim. Di'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '6 6 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['L', '14/02/2010'], + ['LL', '14 février 2010'], + ['LLL', '14 février 2010 15:25'], + ['LLLL', 'dimanche 14 février 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 févr. 2010'], + ['lll', '14 févr. 2010 15:25'], + ['llll', 'dim. 14 févr. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1er', '1er'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'dimanche dim. Di_lundi lun. Lu_mardi mar. Ma_mercredi mer. Me_jeudi jeu. Je_vendredi ven. Ve_samedi sam. Sa'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "quelques secondes", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "une minute", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "une minute", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutes", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutes", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "une heure", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "une heure", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 heures", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 heures", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 heures", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "un jour", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "un jour", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 jours", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "un jour", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 jours", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 jours", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "un mois", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "un mois", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "un mois", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mois", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mois", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mois", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "un mois", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mois", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "un an", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 ans", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "un an", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 ans", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "dans quelques secondes", "prefix"); + test.equal(moment(0).from(30000), "il y a quelques secondes", "suffix"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "dans quelques secondes", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "dans 5 jours", "in 5 days"); + test.done(); + }, + + "same day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Aujourd'hui à 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Aujourd'hui à 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Aujourd'hui à 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Demain à 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Aujourd'hui à 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Hier à 02:00", "yesterday at the same time"); + test.done(); + }, + + "same next week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [à] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [à] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [à] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "same last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('dddd [dernier à] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [dernier à] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [dernier à] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "same all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1er', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1er', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Galego + *************************************************/ + +exports["locale:gl"] = { + setUp : function (cb) { + moment.locale('gl'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = "Xaneiro Xan._Febreiro Feb._Marzo Mar._Abril Abr._Maio Mai._Xuño Xuñ._Xullo Xul._Agosto Ago._Setembro Set._Outubro Out._Novembro Nov._Decembro Dec.".split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); + test.done(); + }, + + "format month" : function (test) { + var expected = "Xaneiro Xan._Febreiro Feb._Marzo Mar._Abril Abr._Maio Mai._Xuño Xuñ._Xullo Xul._Agosto Ago._Setembro Set._Outubro Out._Novembro Nov._Decembro Dec.".split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = "Domingo Dom. Do_Luns Lun. Lu_Martes Mar. Ma_Mércores Mér. Mé_Xoves Xov. Xo_Venres Ven. Ve_Sábado Sáb. Sá".split("_"), + i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "uns segundos", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "un minuto", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "un minuto", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutos", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutos", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "unha hora", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "unha hora", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 horas", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 horas", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 horas", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "un día", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "un día", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 días", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "un día", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 días", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 días", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "un mes", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "un mes", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "un mes", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 meses", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 meses", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 meses", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "un mes", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 meses", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "un ano", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 anos", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "un ano", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 anos", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "nuns segundos", "prefix"); + test.equal(moment(0).from(30000), "hai uns segundos", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "hai uns segundos", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "nuns segundos", "en unos segundos"); + test.equal(moment().add({d: 5}).fromNow(), "en 5 días", "en 5 días"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "hoxe ás 2:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "hoxe ás 2:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "hoxe ás 3:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "mañá ás 2:00", "tomorrow at the same time"); + test.equal(moment(a).add({d: 1, h : -1}).calendar(), "mañá á 1:00", "tomorrow minus 1 hour"); + test.equal(moment(a).subtract({h: 1}).calendar(), "hoxe á 1:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "onte á 2:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[o] dddd [pasado ' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[o] dddd [pasado ' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[o] dddd [pasado ' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + "regression tests" : function (test) { + var lastWeek = moment().subtract({d: 4}).hours(1); + test.equal(lastWeek.calendar(), lastWeek.format('[o] dddd [pasado a] LT'), "1 o'clock bug"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1º', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1º', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2º', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2º', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3º', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + +/************************************************** + Hebrew +**************************************************/ + +exports["locale:he"] = { + setUp : function (cb) { + moment.locale('he'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'ינואר ינו׳_פברואר פבר׳_מרץ מרץ_אפריל אפר׳_מאי מאי_יוני יוני_יולי יולי_אוגוסט אוג׳_ספטמבר ספט׳_אוקטובר אוק׳_נובמבר נוב׳_דצמבר דצמ׳'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'ראשון, פברואר 14 2010, 3:25:50 pm'], + ['ddd, hA', 'א׳, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 פברואר פבר׳'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 ראשון א׳ א'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['L', '14/02/2010'], + ['LL', '14 בפברואר 2010'], + ['LLL', '14 בפברואר 2010 15:25'], + ['LLLL', 'ראשון, 14 בפברואר 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 פבר׳ 2010'], + ['lll', '14 פבר׳ 2010 15:25'], + ['llll', 'א׳, 14 פבר׳ 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format month" : function (test) { + var expected = 'ינואר ינו׳_פברואר פבר׳_מרץ מרץ_אפריל אפר׳_מאי מאי_יוני יוני_יולי יולי_אוגוסט אוג׳_ספטמבר ספט׳_אוקטובר אוק׳_נובמבר נוב׳_דצמבר דצמ׳'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'ראשון א׳ א|שני ב׳ ב|שלישי ג׳ ג|רביעי ד׳ ד|חמישי ה׳ ה|שישי ו׳ ו|שבת ש׳ ש'.split("|"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "מספר שניות", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "דקה", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "דקה", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 דקות", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 דקות", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "שעה", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "שעה", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "שעתיים", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 שעות", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 שעות", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "יום", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "יום", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "יומיים", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "יום", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 ימים", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 ימים", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "חודש", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "חודש", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "חודש", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "חודשיים", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "חודשיים", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 חודשים", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "חודש", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 חודשים", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "שנה", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "שנתיים", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "שנה", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 שנים", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "בעוד מספר שניות", "prefix"); + test.equal(moment(0).from(30000), "לפני מספר שניות", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "לפני מספר שניות", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "בעוד מספר שניות", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "בעוד 5 ימים", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "היום ב־02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "היום ב־02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "היום ב־03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "מחר ב־02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "היום ב־01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "אתמול ב־02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [בשעה] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [בשעה] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [בשעה] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[ביום] dddd [האחרון בשעה] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[ביום] dddd [האחרון בשעה] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[ביום] dddd [האחרון בשעה] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Sunday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday format" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', "Jan 15 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Hindi + *************************************************/ + +exports["locale:hi"] = { + setUp : function (cb) { + moment.locale('hi'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'जनवरी जन._फ़रवरी फ़र._मार्च मार्च_अप्रैल अप्रै._मई मई_जून जून_जुलाई जुल._अगस्त अग._सितम्बर सित._अक्टूबर अक्टू._नवम्बर नव._दिसम्बर दिस.'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, a h:mm:ss बजे', 'रविवार, १४ फ़रवरी २०१०, दोपहर ३:२५:५० बजे'], + ['ddd, a h बजे', 'रवि, दोपहर ३ बजे'], + ['M Mo MM MMMM MMM', '२ २ ०२ फ़रवरी फ़र.'], + ['YYYY YY', '२०१० १०'], + ['D Do DD', '१४ १४ १४'], + ['d do dddd ddd dd', '० ० रविवार रवि र'], + ['DDD DDDo DDDD', '४५ ४५ ०४५'], + ['w wo ww', '८ ८ ०८'], + ['h hh', '३ ०३'], + ['H HH', '१५ १५'], + ['m mm', '२५ २५'], + ['s ss', '५० ५०'], + ['a A', 'दोपहर दोपहर'], + ['L', '१४/०२/२०१०'], + ['LL', '१४ फ़रवरी २०१०'], + ['LLL', '१४ फ़रवरी २०१०, दोपहर ३:२५ बजे'], + ['LLLL', 'रविवार, १४ फ़रवरी २०१०, दोपहर ३:२५ बजे'], + ['l', '१४/२/२०१०'], + ['ll', '१४ फ़र. २०१०'], + ['lll', '१४ फ़र. २०१०, दोपहर ३:२५ बजे'], + ['llll', 'रवि, १४ फ़र. २०१०, दोपहर ३:२५ बजे'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '१', '१'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '२', '२'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '३', '३'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '४', '४'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '५', '५'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '६', '६'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '७', '७'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '८', '८'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '९', '९'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '१०', '१०'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '११', '११'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '१२', '१२'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '१३', '१३'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '१४', '१४'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '१५', '१५'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '१६', '१६'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '१७', '१७'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '१८', '१८'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '१९', '१९'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '२०', '२०'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '२१', '२१'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '२२', '२२'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '२३', '२३'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '२४', '२४'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '२५', '२५'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '२६', '२६'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '२७', '२७'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '२८', '२८'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '२९', '२९'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '३०', '३०'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '३१', '३१'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'जनवरी जन._फ़रवरी फ़र._मार्च मार्च_अप्रैल अप्रै._मई मई_जून जून_जुलाई जुल._अगस्त अग._सितम्बर सित._अक्टूबर अक्टू._नवम्बर नव._दिसम्बर दिस.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'रविवार रवि र_सोमवार सोम सो_मंगलवार मंगल मं_बुधवार बुध बु_गुरूवार गुरू गु_शुक्रवार शुक्र शु_शनिवार शनि श'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "कुछ ही क्षण", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "एक मिनट", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "एक मिनट", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "२ मिनट", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "४४ मिनट", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "एक घंटा", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "एक घंटा", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "२ घंटे", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "५ घंटे", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "२१ घंटे", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "एक दिन", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "एक दिन", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "२ दिन", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "एक दिन", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "५ दिन", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "२५ दिन", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "एक महीने", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "एक महीने", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "एक महीने", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "२ महीने", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "२ महीने", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "३ महीने", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "एक महीने", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "५ महीने", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "एक वर्ष", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "२ वर्ष", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "एक वर्ष", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "५ वर्ष", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "कुछ ही क्षण में", "prefix"); + test.equal(moment(0).from(30000), "कुछ ही क्षण पहले", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "कुछ ही क्षण पहले", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "कुछ ही क्षण में", "कुछ ही क्षण में"); + test.equal(moment().add({d: 5}).fromNow(), "५ दिन में", "५ दिन में"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "आज रात २:०० बजे", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "आज रात २:२५ बजे", "Now plus 25 min"); + test.equal(moment(a).add({h: 3}).calendar(), "आज सुबह ५:०० बजे", "Now plus 3 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "कल रात २:०० बजे", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "आज रात १:०० बजे", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "कल रात २:०० बजे", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[पिछले] dddd[,] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[पिछले] dddd[,] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[पिछले] dddd[,] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + "meridiem" : function (test) { + test.equal(moment([2011, 2, 23, 2, 30]).format('a'), "रात", "before dawn"); + test.equal(moment([2011, 2, 23, 9, 30]).format('a'), "सुबह", "morning"); + test.equal(moment([2011, 2, 23, 14, 30]).format('a'), "दोपहर", "during day"); + test.equal(moment([2011, 2, 23, 17, 30]).format('a'), "शाम", "evening"); + test.equal(moment([2011, 2, 23, 19, 30]).format('a'), "शाम", "late evening"); + test.equal(moment([2011, 2, 23, 21, 20]).format('a'), "रात", "night"); + + test.equal(moment([2011, 2, 23, 2, 30]).format('A'), "रात", "before dawn"); + test.equal(moment([2011, 2, 23, 9, 30]).format('A'), "सुबह", "morning"); + test.equal(moment([2011, 2, 23, 14, 30]).format('A'), "दोपहर", " during day"); + test.equal(moment([2011, 2, 23, 17, 30]).format('A'), "शाम", "evening"); + test.equal(moment([2011, 2, 23, 19, 30]).format('A'), "शाम", "late evening"); + test.equal(moment([2011, 2, 23, 21, 20]).format('A'), "रात", "night"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '१ ०१ १', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '१ ०१ १', "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '२ ०२ २', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '२ ०२ २', "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '३ ०३ ३', "Jan 15 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Croatian + *************************************************/ + +exports["locale:hr"] = { + setUp : function (cb) { + moment.locale('hr'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'sječanj sje._veljača vel._ožujak ožu._travanj tra._svibanj svi._lipanj lip._srpanj srp._kolovoz kol._rujan ruj._listopad lis._studeni stu._prosinac pro.'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedjelja, 14. veljača 2010, 3:25:50 pm'], + ['ddd, hA', 'ned., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 veljača vel.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. nedjelja ned. ne'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '7 7. 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['L', '14. 02. 2010'], + ['LL', '14. veljača 2010'], + ['LLL', '14. veljača 2010 15:25'], + ['LLLL', 'nedjelja, 14. veljača 2010 15:25'], + ['l', '14. 2. 2010'], + ['ll', '14. vel. 2010'], + ['lll', '14. vel. 2010 15:25'], + ['llll', 'ned., 14. vel. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'sječanj sje._veljača vel._ožujak ožu._travanj tra._svibanj svi._lipanj lip._srpanj srp._kolovoz kol._rujan ruj._listopad lis._studeni stu._prosinac pro.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'nedjelja ned. ne_ponedjeljak pon. po_utorak uto. ut_srijeda sri. sr_četvrtak čet. če_petak pet. pe_subota sub. su'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "par sekundi", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "jedna minuta", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "jedna minuta", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minute", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuta", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "jedan sat", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "jedan sat", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 sata", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 sati", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 sati", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "dan", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "dan", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dana", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "dan", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dana", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dana", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "mjesec", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "mjesec", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "mjesec", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mjeseca", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mjeseca", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mjeseca", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "mjesec", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mjeseci", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "godinu", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 godine", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "godinu", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 godina", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "za par sekundi", "prefix"); + test.equal(moment(0).from(30000), "prije par sekundi", "prefix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "prije par sekundi", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "za par sekundi", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "za 5 dana", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "danas u 2:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "danas u 2:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "danas u 3:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "sutra u 2:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "danas u 1:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "jučer u 2:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + /************************************************** + Hungarian + *************************************************/ + +exports["locale:hu"] = { + setUp : function (cb) { + moment.locale('hu'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'január jan_február feb_március márc_április ápr_május máj_június jún_július júl_augusztus aug_szeptember szept_október okt_november nov_december dec'.split("_"), + i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, HH:mm:ss', 'vasárnap, február 14. 2010, 15:25:50'], + ['ddd, HH', 'vas, 15'], + ['M Mo MM MMMM MMM', '2 2. 02 február feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. vasárnap vas v'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '7 7. 07'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['[az év] DDDo [napja]', 'az év 45. napja'], + ['L', '2010.02.14.'], + ['LL', '2010. február 14.'], + ['LLL', '2010. február 14., 15:25'], + ['LLLL', '2010. február 14., vasárnap 15:25'], + ['l', '2010.2.14.'], + ['ll', '2010. feb 14.'], + ['lll', '2010. feb 14., 15:25'], + ['llll', '2010. feb 14., vas 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "meridiem" : function (test) { + test.equal(moment([2011, 2, 23, 0, 0]).format('a'), "de", "am"); + test.equal(moment([2011, 2, 23, 11, 59]).format('a'), "de", "am"); + test.equal(moment([2011, 2, 23, 12, 0]).format('a'), "du", "pm"); + test.equal(moment([2011, 2, 23, 23, 59]).format('a'), "du", "pm"); + + test.equal(moment([2011, 2, 23, 0, 0]).format('A'), "DE", "AM"); + test.equal(moment([2011, 2, 23, 11, 59]).format('A'), "DE", "AM"); + test.equal(moment([2011, 2, 23, 12, 0]).format('A'), "DU", "PM"); + test.equal(moment([2011, 2, 23, 23, 59]).format('A'), "DU", "PM"); + + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'január jan_február feb_március márc_április ápr_május máj_június jún_július júl_augusztus aug_szeptember szept_október okt_november nov_december dec'.split("_"), + i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'vasárnap vas_hétfő hét_kedd kedd_szerda sze_csütörtök csüt_péntek pén_szombat szo'.split("_"), + i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "néhány másodperc", "44 másodperc = néhány másodperc"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "egy perc", "45 másodperc = egy perc"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "egy perc", "89 másodperc = egy perc"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 perc", "90 másodperc = 2 perc"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 perc", "44 perc = 44 perc"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "egy óra", "45 perc = egy óra"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "egy óra", "89 perc = egy óra"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 óra", "90 perc = 2 óra"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 óra", "5 óra = 5 óra"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 óra", "21 óra = 21 óra"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "egy nap", "22 óra = egy nap"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "egy nap", "35 óra = egy nap"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 nap", "36 óra = 2 nap"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "egy nap", "1 nap = egy nap"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 nap", "5 nap = 5 nap"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 nap", "25 nap = 25 nap"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "egy hónap", "26 nap = egy hónap"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "egy hónap", "30 nap = egy hónap"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "egy hónap", "45 nap = egy hónap"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 hónap", "46 nap = 2 hónap"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 hónap", "75 nap = 2 hónap"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 hónap", "76 nap = 3 hónap"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "egy hónap", "1 hónap = egy hónap"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 hónap", "5 hónap = 5 hónap"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "egy év", "345 nap = egy év"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 év", "548 nap = 2 év"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "egy év", "1 év = egy év"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 év", "5 év = 5 év"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "néhány másodperc múlva", "prefix"); + test.equal(moment(0).from(30000), "néhány másodperce", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "néhány másodperce", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "néhány másodperc múlva", "néhány másodperc múlva"); + test.equal(moment().add({d: 5}).fromNow(), "5 nap múlva", "5 nap múlva"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "ma 2:00-kor", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "ma 2:25-kor", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "ma 3:00-kor", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "holnap 2:00-kor", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "ma 1:00-kor", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "tegnap 2:00-kor", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m, days = 'vasárnap_hétfőn_kedden_szerdán_csütörtökön_pénteken_szombaton'.split('_'); + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('[' + days[m.day()] + '] LT[-kor]'), "today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[' + days[m.day()] + '] LT[-kor]'), "today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[' + days[m.day()] + '] LT[-kor]'), "today + " + i + " days end of day"); + } + + test.done(); + }, + + "calendar last week" : function (test) { + var i, m, days = 'vasárnap_hétfőn_kedden_szerdán_csütörtökön_pénteken_szombaton'.split('_'); + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[múlt ' + days[m.day()] + '] LT[-kor]'), "today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[múlt ' + days[m.day()] + '] LT[-kor]'), "today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[múlt ' + days[m.day()] + '] LT[-kor]'), "today - " + i + " days end of day"); + } + + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "egy héte"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "egy hét múlva"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 hete"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "2 hét múlva"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Armenian + *************************************************/ + +exports["locale:hy-am"] = { + setUp : function (cb) { + moment.locale('hy-am'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'հունվար հնվ_փետրվար փտր_մարտ մրտ_ապրիլ ապր_մայիս մյս_հունիս հնս_հուլիս հլս_օգոստոս օգս_սեպտեմբեր սպտ_հոկտեմբեր հկտ_նոյեմբեր նմբ_դեկտեմբեր դկտ'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "parse exceptional case" : function (test) { + test.equal(moment('11 մայիսի 1989', ['DD MMMM YYYY']).format('DD-MM-YYYY'), '11-05-1989'); + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, HH:mm:ss', 'կիրակի, 14 փետրվարի 2010, 15:25:50'], + ['ddd, h A', 'կրկ, 3 ցերեկվա'], + ['M Mo MM MMMM MMM', '2 2 02 փետրվար փտր'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 կիրակի կրկ կրկ'], + ['DDD DDDo DDDD', '45 45-րդ 045'], + ['w wo ww', '7 7-րդ 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'ցերեկվա ցերեկվա'], + ['[տարվա] DDDo [օրը]', 'տարվա 45-րդ օրը'], + ['L', '14.02.2010'], + ['LL', '14 փետրվարի 2010 թ.'], + ['LLL', '14 փետրվարի 2010 թ., 15:25'], + ['LLLL', 'կիրակի, 14 փետրվարի 2010 թ., 15:25'], + ['l', '14.2.2010'], + ['ll', '14 փտր 2010 թ.'], + ['lll', '14 փտր 2010 թ., 15:25'], + ['llll', 'կրկ, 14 փտր 2010 թ., 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format meridiem" : function (test) { + test.equal(moment([2012, 11, 28, 0, 0]).format("A"), "գիշերվա", "night"); + test.equal(moment([2012, 11, 28, 3, 59]).format("A"), "գիշերվա", "night"); + test.equal(moment([2012, 11, 28, 4, 0]).format("A"), "առավոտվա", "morning"); + test.equal(moment([2012, 11, 28, 11, 59]).format("A"), "առավոտվա", "morning"); + test.equal(moment([2012, 11, 28, 12, 0]).format("A"), "ցերեկվա", "afternoon"); + test.equal(moment([2012, 11, 28, 16, 59]).format("A"), "ցերեկվա", "afternoon"); + test.equal(moment([2012, 11, 28, 17, 0]).format("A"), "երեկոյան", "evening"); + test.equal(moment([2012, 11, 28, 23, 59]).format("A"), "երեկոյան", "evening"); + + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1-ին', '1-ին'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2-րդ', '2-րդ'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3-րդ', '3-րդ'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4-րդ', '4-րդ'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5-րդ', '5-րդ'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6-րդ', '6-րդ'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7-րդ', '7-րդ'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8-րդ', '8-րդ'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9-րդ', '9-րդ'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10-րդ', '10-րդ'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11-րդ', '11-րդ'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12-րդ', '12-րդ'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13-րդ', '13-րդ'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14-րդ', '14-րդ'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15-րդ', '15-րդ'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16-րդ', '16-րդ'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17-րդ', '17-րդ'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18-րդ', '18-րդ'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19-րդ', '19-րդ'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20-րդ', '20-րդ'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21-րդ', '21-րդ'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22-րդ', '22-րդ'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23-րդ', '23-րդ'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24-րդ', '24-րդ'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25-րդ', '25-րդ'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26-րդ', '26-րդ'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27-րդ', '27-րդ'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28-րդ', '28-րդ'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29-րդ', '29-րդ'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30-րդ', '30-րդ'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31-րդ', '31-րդ'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'հունվար հնվ_փետրվար փտր_մարտ մրտ_ապրիլ ապր_մայիս մյս_հունիս հնս_հուլիս հլս_օգոստոս օգս_սեպտեմբեր սպտ_հոկտեմբեր հկտ_նոյեմբեր նմբ_դեկտեմբեր դկտ'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format month case" : function (test) { + var months = { + 'nominative': 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_'), + 'accusative': 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_') + }, i; + for (i = 0; i < 12; i++) { + test.equal(moment([2011, i, 1]).format('D MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); + test.equal(moment([2011, i, 1]).format('MMMM'), months.nominative[i], '1 ' + months.nominative[i]); + } + test.done(); + }, + + "format month short case" : function (test) { + var monthsShort = { + 'nominative': 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'), + 'accusative': 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_') + }, i; + for (i = 0; i < 12; i++) { + test.equal(moment([2011, i, 1]).format('D MMM'), '1 ' + monthsShort.accusative[i], '1 ' + monthsShort.accusative[i]); + test.equal(moment([2011, i, 1]).format('MMM'), monthsShort.nominative[i], '1 ' + monthsShort.nominative[i]); + } + test.done(); + }, + + "format month case with escaped symbols" : function (test) { + var months = { + 'nominative': 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_'), + 'accusative': 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_') + }, i; + for (i = 0; i < 12; i++) { + test.equal(moment([2013, i, 1]).format('D[] MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); + test.equal(moment([2013, i, 1]).format('[]D[] []MMMM[]'), '1 ' + months.accusative[i] + '', '1 ' + months.accusative[i] + ''); + test.equal(moment([2013, i, 1]).format('D[-ին օրը] MMMM'), '1-ին օրը ' + months.accusative[i], '1-ին օրը ' + months.accusative[i]); + test.equal(moment([2013, i, 1]).format('D, MMMM'), '1, ' + months.nominative[i], '1, ' + months.nominative[i]); + } + test.done(); + }, + + "format month short case with escaped symbols" : function (test) { + var monthsShort = { + 'nominative': 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'), + 'accusative': 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_') + }, i; + for (i = 0; i < 12; i++) { + test.equal(moment([2013, i, 1]).format('D[] MMM'), '1 ' + monthsShort.accusative[i], '1 ' + monthsShort.accusative[i]); + test.equal(moment([2013, i, 1]).format('[]D[] []MMM[]'), '1 ' + monthsShort.accusative[i] + '', '1 ' + monthsShort.accusative[i] + ''); + test.equal(moment([2013, i, 1]).format('D[-ին օրը] MMM'), '1-ին օրը ' + monthsShort.accusative[i], '1-ին օրը ' + monthsShort.accusative[i]); + test.equal(moment([2013, i, 1]).format('D, MMM'), '1, ' + monthsShort.nominative[i], '1, ' + monthsShort.nominative[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'կիրակի կրկ կրկ_երկուշաբթի երկ երկ_երեքշաբթի երք երք_չորեքշաբթի չրք չրք_հինգշաբթի հնգ հնգ_ուրբաթ ուրբ ուրբ_շաբաթ շբթ շբթ'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "մի քանի վայրկյան", "44 seconds = seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "րոպե", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "րոպե", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 րոպե", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 րոպե", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ժամ", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ժամ", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ժամ", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ժամ", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ժամ", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "օր", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "օր", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 օր", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "օր", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 օր", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), "11 օր", "11 days = 11 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), "21 օր", "21 days = 21 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 օր", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ամիս", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ամիս", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "ամիս", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 ամիս", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 ամիս", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 ամիս", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ամիս", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 ամիս", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "տարի", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 տարի", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "տարի", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 տարի", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "մի քանի վայրկյան հետո", "prefix"); + test.equal(moment(0).from(30000), "մի քանի վայրկյան առաջ", "suffix"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "մի քանի վայրկյան հետո", "in seconds"); + test.equal(moment().add({d: 5}).fromNow(), "5 օր հետո", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "այսօր 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "այսօր 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "այսօր 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "վաղը 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "այսօր 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "երեկ 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + function makeFormat(d) { + return 'dddd [օրը ժամը] LT'; + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + function makeFormat(d) { + return '[անցած] dddd [օրը ժամը] LT'; + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ին', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ին', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-րդ', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-րդ', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-րդ', "Jan 9 2012 should be week 3"); + + test.done(); + } + +}; + +var moment = require("../../moment"); + + + /************************************************** + Indonesian + *************************************************/ + +exports["locale:id"] = { + setUp : function (cb) { + moment.locale('id'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'Januari Jan_Februari Feb_Maret Mar_April Apr_Mei Mei_Juni Jun_Juli Jul_Agustus Ags_September Sep_Oktober Okt_November Nov_Desember Des'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Minggu, Februari 14 2010, 3:25:50 sore'], + ['ddd, hA', 'Min, 3sore'], + ['M Mo MM MMMM MMM', '2 2 02 Februari Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 Minggu Min Mg'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '7 7 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'sore sore'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['L', '14/02/2010'], + ['LL', '14 Februari 2010'], + ['LLL', '14 Februari 2010 pukul 15.25'], + ['LLLL', 'Minggu, 14 Februari 2010 pukul 15.25'], + ['l', '14/2/2010'], + ['ll', '14 Feb 2010'], + ['lll', '14 Feb 2010 pukul 15.25'], + ['llll', 'Min, 14 Feb 2010 pukul 15.25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format month" : function (test) { + var expected = 'Januari Jan_Februari Feb_Maret Mar_April Apr_Mei Mei_Juni Jun_Juli Jul_Agustus Ags_September Sep_Oktober Okt_November Nov_Desember Des'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'Minggu Min Mg_Senin Sen Sn_Selasa Sel Sl_Rabu Rab Rb_Kamis Kam Km_Jumat Jum Jm_Sabtu Sab Sb'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "beberapa detik", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "semenit", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "semenit", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 menit", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 menit", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "sejam", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "sejam", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 jam", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 jam", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 jam", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "sehari", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "sehari", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 hari", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "sehari", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 hari", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 hari", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "sebulan", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "sebulan", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "sebulan", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 bulan", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 bulan", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 bulan", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "sebulan", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 bulan", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "setahun", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 tahun", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "setahun", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 tahun", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "dalam beberapa detik", "prefix"); + test.equal(moment(0).from(30000), "beberapa detik yang lalu", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "beberapa detik yang lalu", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "dalam beberapa detik", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "dalam 5 hari", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Hari ini pukul 02.00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Hari ini pukul 02.25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Hari ini pukul 03.00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Besok pukul 02.00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Hari ini pukul 01.00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Kemarin pukul 02.00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [pukul] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [pukul] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [pukul] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('dddd [lalu pukul] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [lalu pukul] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [lalu pukul] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Icelandic + *************************************************/ + +exports["locale:is"] = { + setUp : function (cb) { + moment.locale('is'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'janúar jan_febrúar feb_mars mar_apríl apr_maí maí_júní jún_júlí júl_ágúst ágú_september sep_október okt_nóvember nóv_desember des'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'sunnudagur, 14. febrúar 2010, 3:25:50 pm'], + ['ddd, hA', 'sun, 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 febrúar feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. sunnudagur sun Su'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['L', '14/02/2010'], + ['LL', '14. febrúar 2010'], + ['LLL', '14. febrúar 2010 kl. 15:25'], + ['LLLL', 'sunnudagur, 14. febrúar 2010 kl. 15:25'], + ['l', '14/2/2010'], + ['ll', '14. feb 2010'], + ['lll', '14. feb 2010 kl. 15:25'], + ['llll', 'sun, 14. feb 2010 kl. 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'janúar jan_febrúar feb_mars mar_apríl apr_maí maí_júní jún_júlí júl_ágúst ágú_september sep_október okt_nóvember nóv_desember des'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'sunnudagur sun Su_mánudagur mán Má_þriðjudagur þri Þr_miðvikudagur mið Mi_fimmtudagur fim Fi_föstudagur fös Fö_laugardagur lau La'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "nokkrar sekúndur", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "mínúta", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "mínúta", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 mínútur", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 mínútur", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 21}), true), "21 mínúta", "21 minutes = 21 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "klukkustund", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "klukkustund", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 klukkustundir", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 klukkustundir", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 klukkustund", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "dagur", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "dagur", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dagar", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "dagur", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dagar", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dagar", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), "11 dagar", "11 days = 11 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), "21 dagur", "21 days = 21 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "mánuður", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "mánuður", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "mánuður", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mánuðir", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mánuðir", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mánuðir", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "mánuður", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mánuðir", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ár", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 ár", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ár", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 ár", "5 years = 5 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 21}), true), "21 ár", "21 years = 21 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "eftir nokkrar sekúndur", "prefix"); + test.equal(moment(0).from(30000), "fyrir nokkrum sekúndum síðan", "suffix"); + test.equal(moment().subtract({m: 1}).fromNow(), "fyrir mínútu síðan", "a minute ago"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "fyrir nokkrum sekúndum síðan", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "eftir nokkrar sekúndur", "in a few seconds"); + test.equal(moment().add({m: 1}).fromNow(), "eftir mínútu", "in a minute"); + test.equal(moment().add({d: 5}).fromNow(), "eftir 5 daga", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "í dag kl. 2:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "í dag kl. 2:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "í dag kl. 3:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "á morgun kl. 2:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "í dag kl. 1:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "í gær kl. 2:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [kl.] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [kl.] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [kl.] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[síðasta] dddd [kl.] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[síðasta] dddd [kl.] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[síðasta] dddd [kl.] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Italian + *************************************************/ + +exports["locale:it"] = { + setUp : function (cb) { + moment.locale('it'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'gennaio gen_febbraio feb_marzo mar_aprile apr_maggio mag_giugno giu_luglio lug_agosto ago_settembre set_ottobre ott_novembre nov_dicembre dic'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Domenica, febbraio 14º 2010, 3:25:50 pm'], + ['ddd, hA', 'Dom, 3PM'], + ['M Mo MM MMMM MMM', '2 2º 02 febbraio feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14º 14'], + ['d do dddd ddd dd', '0 0º Domenica Dom D'], + ['DDD DDDo DDDD', '45 45º 045'], + ['w wo ww', '6 6º 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45º day of the year'], + ['L', '14/02/2010'], + ['LL', '14 febbraio 2010'], + ['LLL', '14 febbraio 2010 15:25'], + ['LLLL', 'Domenica, 14 febbraio 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 feb 2010'], + ['lll', '14 feb 2010 15:25'], + ['llll', 'Dom, 14 feb 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'gennaio gen_febbraio feb_marzo mar_aprile apr_maggio mag_giugno giu_luglio lug_agosto ago_settembre set_ottobre ott_novembre nov_dicembre dic'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'Domenica Dom D_Lunedì Lun L_Martedì Mar Ma_Mercoledì Mer Me_Giovedì Gio G_Venerdì Ven V_Sabato Sab S'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "alcuni secondi", "44 seconds = seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "un minuto", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "un minuto", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuti", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuti", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "un'ora", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "un'ora", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ore", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ore", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ore", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "un giorno", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "un giorno", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 giorni", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "un giorno", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 giorni", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 giorni", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "un mese", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "un mese", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "un mese", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mesi", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mesi", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mesi", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "un mese", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mesi", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "un anno", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 anni", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "un anno", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 anni", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "in alcuni secondi", "prefix"); + test.equal(moment(0).from(30000), "alcuni secondi fa", "suffix"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "in alcuni secondi", "in seconds"); + test.equal(moment().add({d: 5}).fromNow(), "tra 5 giorni", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Oggi alle 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Oggi alle 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Oggi alle 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Domani alle 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Oggi alle 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Ieri alle 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [alle] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [alle] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [alle] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[lo scorso] dddd [alle] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[lo scorso] dddd [alle] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[lo scorso] dddd [alle] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Japanese + *************************************************/ + +exports["locale:ja"] = { + setUp : function (cb) { + moment.locale('ja'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = '1月 1月_2月 2月_3月 3月_4月 4月_5月 5月_6月 6月_7月 7月_8月 8月_9月 9月_10月 10月_11月 11月_12月 12月'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, a h:mm:ss', '日曜日, 2月 14 2010, 午後 3:25:50'], + ['ddd, Ah', '日, 午後3'], + ['M Mo MM MMMM MMM', '2 2 02 2月 2月'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 日曜日 日 日'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', '午後 午後'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['L', '2010/02/14'], + ['LL', '2010年2月14日'], + ['LLL', '2010年2月14日午後3時25分'], + ['LLLL', '2010年2月14日午後3時25分 日曜日'], + ['l', '2010/2/14'], + ['ll', '2010年2月14日'], + ['lll', '2010年2月14日午後3時25分'], + ['llll', '2010年2月14日午後3時25分 日'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format month" : function (test) { + var expected = '1月 1月_2月 2月_3月 3月_4月 4月_5月 5月_6月 6月_7月 7月_8月 8月_9月 9月_10月 10月_11月 11月_12月 12月'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = '日曜日 日 日_月曜日 月 月_火曜日 火 火_水曜日 水 水_木曜日 木 木_金曜日 金 金_土曜日 土 土'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "数秒", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "1分", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "1分", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2分", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44分", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "1時間", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "1時間", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2時間", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5時間", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21時間", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "1日", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "1日", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2日", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "1日", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5日", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25日", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "1ヶ月", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "1ヶ月", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "1ヶ月", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2ヶ月", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2ヶ月", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3ヶ月", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "1ヶ月", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5ヶ月", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "1年", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2年", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "1年", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5年", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "数秒後", "prefix"); + test.equal(moment(0).from(30000), "数秒前", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "数秒前", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "数秒後", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "5日後", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "今日 午前2時0分", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "今日 午前2時25分", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "今日 午前3時0分", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "明日 午前2時0分", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "今日 午前1時0分", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "昨日 午前2時0分", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('[来週]dddd LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[来週]dddd LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[来週]dddd LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[前週]dddd LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[前週]dddd LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[前週]dddd LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Sunday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday format" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', "Jan 15 2012 should be week 3"); + + test.done(); + } +}; + +// moment.js locale configuration +// locale : Georgian (ka) +// author : Irakli Janiashvili : https://github.com/irakli-janiashvili + +var moment = require("../../moment"); + +exports["locale:ka"] = { + setUp : function (cb) { + moment.locale('ka'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('ka'); + cb(); + }, + + "parse" : function (test) { + var i, + tests = 'იანვარი იან_თებერვალი თებ_მარტი მარ_აპრილი აპრ_მაისი მაი_ივნისი ივნ_ივლისი ივლ_აგვისტო აგვ_სექტემბერი სექ_ოქტომბერი ოქტ_ნოემბერი ნოე_დეკემბერი დეკ'.split("_"); + + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' უნდა იყოს თვე ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'კვირა, თებერვალი მე-14 2010, 3:25:50 pm'], + ['ddd, hA', 'კვი, 3PM'], + ['M Mo MM MMMM MMM', '2 მე-2 02 თებერვალი თებ'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 მე-14 14'], + ['d do dddd ddd dd', '0 0 კვირა კვი კვ'], + ['DDD DDDo DDDD', '45 45-ე 045'], + ['w wo ww', '7 მე-7 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['წლის DDDo დღე', 'წლის 45-ე დღე'], + ['L', '14/02/2010'], + ['LL', '14 თებერვალი 2010'], + ['LLL', '14 თებერვალი 2010 3:25 PM'], + ['LLLL', 'კვირა, 14 თებერვალი 2010 3:25 PM'], + ['l', '14/2/2010'], + ['ll', '14 თებ 2010'], + ['lll', '14 თებ 2010 3:25 PM'], + ['llll', 'კვი, 14 თებ 2010 3:25 PM'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1-ლი', '1-ლი'); + test.equal(moment([2011, 0, 2]).format('DDDo'), 'მე-2', 'მე-2'); + test.equal(moment([2011, 0, 3]).format('DDDo'), 'მე-3', 'მე-3'); + test.equal(moment([2011, 0, 4]).format('DDDo'), 'მე-4', 'მე-4'); + test.equal(moment([2011, 0, 5]).format('DDDo'), 'მე-5', 'მე-5'); + test.equal(moment([2011, 0, 6]).format('DDDo'), 'მე-6', 'მე-6'); + test.equal(moment([2011, 0, 7]).format('DDDo'), 'მე-7', 'მე-7'); + test.equal(moment([2011, 0, 8]).format('DDDo'), 'მე-8', 'მე-8'); + test.equal(moment([2011, 0, 9]).format('DDDo'), 'მე-9', 'მე-9'); + test.equal(moment([2011, 0, 10]).format('DDDo'), 'მე-10', 'მე-10'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), 'მე-11', 'მე-11'); + test.equal(moment([2011, 0, 12]).format('DDDo'), 'მე-12', 'მე-12'); + test.equal(moment([2011, 0, 13]).format('DDDo'), 'მე-13', 'მე-13'); + test.equal(moment([2011, 0, 14]).format('DDDo'), 'მე-14', 'მე-14'); + test.equal(moment([2011, 0, 15]).format('DDDo'), 'მე-15', 'მე-15'); + test.equal(moment([2011, 0, 16]).format('DDDo'), 'მე-16', 'მე-16'); + test.equal(moment([2011, 0, 17]).format('DDDo'), 'მე-17', 'მე-17'); + test.equal(moment([2011, 0, 18]).format('DDDo'), 'მე-18', 'მე-18'); + test.equal(moment([2011, 0, 19]).format('DDDo'), 'მე-19', 'მე-19'); + test.equal(moment([2011, 0, 20]).format('DDDo'), 'მე-20', 'მე-20'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21-ე', '21-ე'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22-ე', '22-ე'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23-ე', '23-ე'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24-ე', '24-ე'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25-ე', '25-ე'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26-ე', '26-ე'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27-ე', '27-ე'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28-ე', '28-ე'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29-ე', '29-ე'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30-ე', '30-ე'); + + test.equal(moment("2011 40", "YYYY DDD").format('DDDo'), 'მე-40', 'მე-40'); + test.equal(moment("2011 50", "YYYY DDD").format('DDDo'), '50-ე', '50-ე'); + test.equal(moment("2011 60", "YYYY DDD").format('DDDo'), 'მე-60', 'მე-60'); + test.equal(moment("2011 100", "YYYY DDD").format('DDDo'), 'მე-100', 'მე-100'); + test.equal(moment("2011 101", "YYYY DDD").format('DDDo'), '101-ე', '101-ე'); + test.done(); + }, + + "format month" : function (test) { + var i, + expected = 'იანვარი იან_თებერვალი თებ_მარტი მარ_აპრილი აპრ_მაისი მაი_ივნისი ივნ_ივლისი ივლ_აგვისტო აგვ_სექტემბერი სექ_ოქტომბერი ოქტ_ნოემბერი ნოე_დეკემბერი დეკ'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var i, + expected = 'კვირა კვი კვ_ორშაბათი ორშ ორ_სამშაბათი სამ სა_ოთხშაბათი ოთხ ოთ_ხუთშაბათი ხუთ ხუ_პარასკევი პარ პა_შაბათი შაბ შა'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "რამდენიმე წამი", "44 წამი = რამდენიმე წამი"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "წუთი", "45 წამი = წუთი"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "წუთი", "89 წამი = წუთი"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 წუთი", "90 წამი = 2 წუთი"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 წუთი", "44 წამი = 44 წუთი"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "საათი", "45 წამი = საათი"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "საათი", "89 წამი = საათი"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 საათი", "90 წამი = 2 საათი"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 საათი", "5 საათი = 5 საათი"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 საათი", "21 საათი = 21 საათი"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "დღე", "22 საათი = დღე"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "დღე", "35 საათი = დღე"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 დღე", "36 საათი = 2 დღე"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "დღე", "1 დღე = დღე"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 დღე", "5 დღე = 5 დღე"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 დღე", "25 დღე = 25 დღე"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "თვე", "26 დღე = თვე"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "თვე", "30 დღე = თვე"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "თვე", "45 დღე = თვე"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 თვე", "46 დღე = 2 თვე"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 თვე", "75 დღე = 2 თვე"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 თვე", "76 დღე = 3 თვე"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "თვე", "1 თვე = თვე"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 თვე", "5 თვე = 5 თვე"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "წელი", "345 დღე = წელი"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 წელი", "548 დღე = 2 წელი"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "წელი", "1 წელი = წელი"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 წელი", "5 წელი = 5 წელი"); + + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "რამდენიმე წამში", "ში სუფიქსი"); + test.equal(moment(0).from(30000), "რამდენიმე წამის წინ", "წინ სუფიქსი"); + + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "რამდენიმე წამის წინ", "უნდა აჩვენოს როგორც წარსული"); + + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "რამდენიმე წამში", "რამდენიმე წამში"); + test.equal(moment().add({d: 5}).fromNow(), "5 დღეში", "5 დღეში"); + + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "დღეს 2:00 AM-ზე", "დღეს ამავე დროს"); + test.equal(moment(a).add({m: 25}).calendar(), "დღეს 2:25 AM-ზე", "ახლანდელ დროს დამატებული 25 წუთი"); + test.equal(moment(a).add({h: 1}).calendar(), "დღეს 3:00 AM-ზე", "ახლანდელ დროს დამატებული 1 საათი"); + test.equal(moment(a).add({d: 1}).calendar(), "ხვალ 2:00 AM-ზე", "ხვალ ამავე დროს"); + test.equal(moment(a).subtract({h: 1}).calendar(), "დღეს 1:00 AM-ზე", "ახლანდელ დროს გამოკლებული 1 საათი"); + test.equal(moment(a).subtract({d: 1}).calendar(), "გუშინ 2:00 AM-ზე", "გუშინ ამავე დროს"); + + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('[შემდეგ] dddd LT[-ზე]'), "დღეს + " + i + " დღე ახლანდელ დროს"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[შემდეგ] dddd LT[-ზე]'), "დღეს + " + i + " დღე დღის დასაწყისში"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[შემდეგ] dddd LT[-ზე]'), "დღეს + " + i + " დღე დღის დასასრულს"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[წინა] dddd LT[-ზე]'), "დღეს - " + i + " დღე ახლანდელ დროს"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[წინა] dddd LT[-ზე]'), "დღეს - " + i + " დღე დღის დასაწყისში"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[წინა] dddd LT[-ზე]'), "დღეს - " + i + " დღე დღის დასასრულს"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 კვირის წინ"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "1 კვირაში"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 კვირის წინ"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "2 კვირაში"); + + test.done(); + }, + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "დეკ 26 2011 უნდა იყოს კვირა 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "იან 1 2012 უნდა იყოს კვირა 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "იან 2 2012 უნდა იყოს კვირა 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "იან 8 2012 უნდა იყოს კვირა 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "იან 9 2012 უნდა იყოს კვირა 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "იან 1 2007 უნდა იყოს კვირა 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "იან 7 2007 უნდა იყოს კვირა 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "იან 8 2007 უნდა იყოს კვირა 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "იან 14 2007 უნდა იყოს კვირა 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "იან 15 2007 უნდა იყოს კვირა 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "დეკ 31 2007 უნდა იყოს კვირა 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "იან 1 2008 უნდა იყოს კვირა 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "იან 6 2008 უნდა იყოს კვირა 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "იან 7 2008 უნდა იყოს კვირა 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "იან 13 2008 უნდა იყოს კვირა 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "იან 14 2008 უნდა იყოს კვირა 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "დეკ 30 2002 უნდა იყოს კვირა 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "იან 1 2003 უნდა იყოს კვირა 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "იან 5 2003 უნდა იყოს კვირა 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "იან 6 2003 უნდა იყოს კვირა 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "იან 12 2003 უნდა იყოს კვირა 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "იან 13 2003 უნდა იყოს კვირა 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "დეკ 29 2008 უნდა იყოს კვირა 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "იან 1 2009 უნდა იყოს კვირა 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "იან 4 2009 უნდა იყოს კვირა 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "იან 5 2009 უნდა იყოს კვირა 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "იან 11 2009 უნდა იყოს კვირა 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "იან 12 2009 უნდა იყოს კვირა 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "დეკ 28 2009 უნდა იყოს კვირა 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "იან 1 2010 უნდა იყოს კვირა 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "იან 3 2010 უნდა იყოს კვირა 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "იან 4 2010 უნდა იყოს კვირა 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "იან 10 2010 უნდა იყოს კვირა 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "იან 11 2010 უნდა იყოს კვირა 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "დეკ 27 2010 უნდა იყოს კვირა 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "იან 1 2011 უნდა იყოს კვირა 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "იან 2 2011 უნდა იყოს კვირა 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "იან 3 2011 უნდა იყოს კვირა 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "იან 9 2011 უნდა იყოს კვირა 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "იან 10 2011 უნდა იყოს კვირა 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ლი', "დეკ 26 2011 უნდა იყოს კვირა 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ლი', "იან 1 2012 უნდა იყოს კვირა 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 მე-2', "იან 2 2012 უნდა იყოს კვირა 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 მე-2', "იან 8 2012 უნდა იყოს კვირა 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 მე-3', "იან 9 2012 უნდა იყოს კვირა 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + +/************************************************** + Khmer + *************************************************/ + +exports["locale:km"] = { + setUp: function (cb) { + moment.locale('km'); + cb(); + }, + + tearDown: function (cb) { + moment.locale('km'); + cb(); + }, + + "parse": function (test) { + var tests = 'មករា មករា_កុម្ភៈ កុម្ភៈ_មិនា មិនា_មេសា មេសា_ឧសភា ឧសភា_មិថុនា មិថុនា_កក្កដា កក្កដា_សីហា សីហា_កញ្ញា កញ្ញា_តុលា តុលា_វិច្ឆិកា វិច្ឆិកា_ធ្នូ ធ្នូ'.split("_"), + i; + + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format": function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'អាទិត្យ, កុម្ភៈ 14 2010, 3:25:50 pm'], + ['ddd, hA', 'អាទិត្យ, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 កុម្ភៈ កុម្ភៈ'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 អាទិត្យ អាទិត្យ អាទិត្យ'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '6 6 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['L', '14/02/2010'], + ['LL', '14 កុម្ភៈ 2010'], + ['LLL', '14 កុម្ភៈ 2010 15:25'], + ['LLLL', 'អាទិត្យ, 14 កុម្ភៈ 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 កុម្ភៈ 2010'], + ['lll', '14 កុម្ភៈ 2010 15:25'], + ['llll', 'អាទិត្យ, 14 កុម្ភៈ 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal": function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1st'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2nd'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3rd'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4th'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5th'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6th'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7th'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8th'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9th'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10th'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11th'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12th'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13th'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14th'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15th'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16th'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17th'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18th'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19th'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20th'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21st'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22nd'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23rd'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24th'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25th'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26th'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27th'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28th'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29th'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30th'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31st'); + test.done(); + }, + + "format month": function (test) { + var expected = 'មករា មករា_កុម្ភៈ កុម្ភៈ_មិនា មិនា_មេសា មេសា_ឧសភា ឧសភា_មិថុនា មិថុនា_កក្កដា កក្កដា_សីហា សីហា_កញ្ញា កញ្ញា_តុលា តុលា_វិច្ឆិកា វិច្ឆិកា_ធ្នូ ធ្នូ'.split("_"), + i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week": function (test) { + var expected = 'អាទិត្យ អាទិត្យ អាទិត្យ_ច័ន្ទ ច័ន្ទ ច័ន្ទ_អង្គារ អង្គារ អង្គារ_ពុធ ពុធ ពុធ_ព្រហស្បតិ៍ ព្រហស្បតិ៍ ព្រហស្បតិ៍_សុក្រ សុក្រ សុក្រ_សៅរ៍ សៅរ៍ សៅរ៍'.split("_"), + i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from": function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ប៉ុន្មានវិនាទី", "44 seconds = ប៉ុន្មានវិនាទី"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "មួយនាទី", "45 seconds = មួយនាទី"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "មួយនាទី", "89 seconds = មួយនាទី"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 នាទី", "90 seconds = 2 នាទី"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 នាទី", "44 minutes = 44 នាទី"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "មួយម៉ោង", "45 minutes = មួយម៉ោង"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "មួយម៉ោង", "89 minutes = មួយម៉ោង"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ម៉ោង", "90 minutes = 2 ម៉ោង"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ម៉ោង", "5 hours = 5 ម៉ោង"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ម៉ោង", "21 hours = 21 ម៉ោង"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "មួយថ្ងៃ", "22 hours = មួយថ្ងៃ"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "មួយថ្ងៃ", "35 hours = មួយថ្ងៃ"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 ថ្ងៃ", "36 hours = 2 ថ្ងៃ"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "មួយថ្ងៃ", "1 day = មួយថ្ងៃ"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 ថ្ងៃ", "5 days = 5 ថ្ងៃ"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 ថ្ងៃ", "25 days = 25 ថ្ងៃ"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "មួយខែ", "26 days = មួយខែ"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "មួយខែ", "30 days = មួយខែ"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "មួយខែ", "43 days = មួយខែ"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 ខែ", "46 days = 2 ខែ"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 ខែ", "75 days = 2 ខែ"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 ខែ", "76 days = 3 ខែ"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "មួយខែ", "1 month = មួយខែ"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 ខែ", "5 months = 5 ខែ"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "មួយឆ្នាំ", "345 days = មួយឆ្នាំ"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 ឆ្នាំ", "548 days = 2 ឆ្នាំ"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "មួយឆ្នាំ", "1 year = មួយឆ្នាំ"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 ឆ្នាំ", "5 years = 5 ឆ្នាំ"); + test.done(); + }, + + "suffix": function (test) { + test.equal(moment(30000).from(0), "ប៉ុន្មានវិនាទីទៀត", "prefix"); + test.equal(moment(0).from(30000), "ប៉ុន្មានវិនាទីមុន", "suffix"); + test.done(); + }, + + "now from now": function (test) { + test.equal(moment().fromNow(), "ប៉ុន្មានវិនាទីមុន", "now from now should display as in the past"); + test.done(); + }, + + "fromNow": function (test) { + test.equal(moment().add({ + s: 30 + }).fromNow(), "ប៉ុន្មានវិនាទីទៀត", "in a few seconds"); + test.equal(moment().add({ + d: 5 + }).fromNow(), "5 ថ្ងៃទៀត", "in 5 days"); + test.done(); + }, + + "calendar day": function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "ថ្ងៃនៈ ម៉ោង 02:00", "today at the same time"); + test.equal(moment(a).add({ + m: 25 + }).calendar(), "ថ្ងៃនៈ ម៉ោង 02:25", "Now plus 25 min"); + test.equal(moment(a).add({ + h: 1 + }).calendar(), "ថ្ងៃនៈ ម៉ោង 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({ + d: 1 + }).calendar(), "ស្អែក ម៉ោង 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({ + h: 1 + }).calendar(), "ថ្ងៃនៈ ម៉ោង 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({ + d: 1 + }).calendar(), "ម្សិលមិញ ម៉ោង 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week": function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({ + d: i + }); + test.equal(m.calendar(), m.format('dddd [ម៉ោង] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [ម៉ោង] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [ម៉ោង] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week": function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({ + d: i + }); + test.equal(m.calendar(), m.format('dddd [សប្តាហ៍មុន] [ម៉ោង] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [សប្តាហ៍មុន] [ម៉ោង] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [សប្តាហ៍មុន] [ម៉ោង] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else": function (test) { + var weeksAgo = moment().subtract({ + w: 1 + }), + weeksFromNow = moment().add({ + w: 1 + }); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({ + w: 2 + }); + weeksFromNow = moment().add({ + w: 2 + }); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday": function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday": function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday": function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday": function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday": function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday": function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday": function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted": function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Korean + *************************************************/ + +exports["locale:ko"] = { + setUp : function (cb) { + moment.locale('ko'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = '1월 1월_2월 2월_3월 3월_4월 4월_5월 5월_6월 6월_7월 7월_8월 8월_9월 9월_10월 10월_11월 11월_12월 12월'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "parse meridiem" : function (test) { + var elements = [{ + expression : "1981년 9월 8일 오후 2시 30분", + inputFormat : "YYYY[년] M[월] D[일] A h[시] m[분]", + outputFormat : "A", + expected : "오후" + }, { + expression : "1981년 9월 8일 오전 2시 30분", + inputFormat : "YYYY[년] M[월] D[일] A h[시] m[분]", + outputFormat : "A h시", + expected : "오전 2시" + }, { + expression : "14시 30분", + inputFormat : "H[시] m[분]", + outputFormat : "A", + expected : "오후" + }, { + expression : "오후 4시", + inputFormat : "A h[시]", + outputFormat : "H", + expected : "16" + }], i, l, it, actual; + + + for (i = 0, l = elements.length; i < l; ++i) { + it = elements[i]; + actual = moment(it.expression, it.inputFormat).format(it.outputFormat); + + test.equal( + actual, + it.expected, + "'" + it.outputFormat + "' of '" + it.expression + "' must be '" + it.expected + "' but was '" + actual + "'." + ); + } + + test.done(); + }, + + "format" : function (test) { + var a = [ + ['YYYY년 MMMM Do dddd a h:mm:ss', '2010년 2월 14일 일요일 오후 3:25:50'], + ['ddd A h', '일 오후 3'], + ['M Mo MM MMMM MMM', '2 2일 02 2월 2월'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14일 14'], + ['d do dddd ddd dd', '0 0일 일요일 일 일'], + ['DDD DDDo DDDD', '45 45일 045'], + ['w wo ww', '8 8일 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', '오후 오후'], + ['일년 중 DDDo째 되는 날', '일년 중 45일째 되는 날'], + ['L', '2010.02.14'], + ['LL', '2010년 2월 14일'], + ['LLL', '2010년 2월 14일 오후 3시 25분'], + ['LLLL', '2010년 2월 14일 일요일 오후 3시 25분'], + ['l', '2010.2.14'], + ['ll', '2010년 2월 14일'], + ['lll', '2010년 2월 14일 오후 3시 25분'], + ['llll', '2010년 2월 14일 일 오후 3시 25분'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1일', '1일'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2일', '2일'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3일', '3일'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4일', '4일'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5일', '5일'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6일', '6일'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7일', '7일'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8일', '8일'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9일', '9일'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10일', '10일'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11일', '11일'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12일', '12일'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13일', '13일'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14일', '14일'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15일', '15일'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16일', '16일'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17일', '17일'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18일', '18일'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19일', '19일'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20일', '20일'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21일', '21일'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22일', '22일'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23일', '23일'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24일', '24일'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25일', '25일'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26일', '26일'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27일', '27일'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28일', '28일'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29일', '29일'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30일', '30일'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31일', '31일'); + test.done(); + }, + + "format month" : function (test) { + var expected = '1월 1월_2월 2월_3월 3월_4월 4월_5월 5월_6월 6월_7월 7월_8월 8월_9월 9월_10월 10월_11월 11월_12월 12월'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = '일요일 일 일_월요일 월 월_화요일 화 화_수요일 수 수_목요일 목 목_금요일 금 금_토요일 토 토'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "몇초", "44초 = 몇초"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "일분", "45초 = 일분"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "일분", "89초 = 일분"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2분", "90초 = 2분"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44분", "44분 = 44분"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "한시간", "45분 = 한시간"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "한시간", "89분 = 한시간"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2시간", "90분 = 2시간"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5시간", "5시간 = 5시간"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21시간", "21시간 = 21시간"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "하루", "22시간 = 하루"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "하루", "35시간 = 하루"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2일", "36시간 = 2일"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "하루", "하루 = 하루"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5일", "5일 = 5일"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25일", "25일 = 25일"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "한달", "26일 = 한달"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "한달", "30일 = 한달"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "한달", "45일 = 한달"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2달", "46일 = 2달"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2달", "75일 = 2달"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3달", "76일 = 3달"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "한달", "1달 = 한달"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5달", "5달 = 5달"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "일년", "345일 = 일년"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2년", "548일 = 2년"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "일년", "일년 = 일년"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5년", "5년 = 5년"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "몇초 후", "prefix"); + test.equal(moment(0).from(30000), "몇초 전", "suffix"); + + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "몇초 전", "now from now should display as in the past"); + + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "몇초 후", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "5일 후", "in 5 days"); + + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "오늘 오전 2시 00분", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "오늘 오전 2시 25분", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "오늘 오전 3시 00분", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "내일 오전 2시 00분", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "오늘 오전 1시 00분", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "어제 오전 2시 00분", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('지난주 dddd LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('지난주 dddd LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('지난주 dddd LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Sunday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday format" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1일', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1일', "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2일', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2일', "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3일', "Jan 15 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + +/************************************************** + Luxembourgish + *************************************************/ + +exports["locale:lb"] = { + setUp: function (cb) { + moment.locale('lb'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown: function (cb) { + moment.locale('lb'); + cb(); + }, + + "parse": function (test) { + var tests = 'Januar Jan._Februar Febr._Mäerz Mrz._Abrëll Abr._Mee Mee_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split("_"), i; + + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format": function (test) { + var a = [ + ['dddd, Do MMMM YYYY, HH:mm:ss', 'Sonndeg, 14. Februar 2010, 15:25:50'], + ['ddd, HH:mm', 'So., 15:25'], + ['M Mo MM MMMM MMM', '2 2. 02 Februar Febr.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. Sonndeg So. So'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['L', '14.02.2010'], + ['LL', '14. Februar 2010'], + ['LLL', '14. Februar 2010 15:25 Auer'], + ['LLLL', 'Sonndeg, 14. Februar 2010 15:25 Auer'], + ['l', '14.2.2010'], + ['ll', '14. Febr. 2010'], + ['lll', '14. Febr. 2010 15:25 Auer'], + ['llll', 'So., 14. Febr. 2010 15:25 Auer'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format month": function (test) { + var expected = 'Januar Jan._Februar Febr._Mäerz Mrz._Abrëll Abr._Mee Mee_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week": function (test) { + var expected = 'Sonndeg So. So_Méindeg Mé. Mé_Dënschdeg Dë. Dë_Mëttwoch Më. Më_Donneschdeg Do. Do_Freideg Fr. Fr_Samschdeg Sa. Sa'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from": function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "e puer Sekonnen", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "eng Minutt", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "eng Minutt", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 Minutten", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 Minutten", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "eng Stonn", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "eng Stonn", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 Stonnen", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 Stonnen", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 Stonnen", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "een Dag", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "een Dag", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 Deeg", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "een Dag", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 Deeg", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 Deeg", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ee Mount", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ee Mount", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "ee Mount", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 Méint", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 Méint", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 Méint", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ee Mount", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 Méint", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ee Joer", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 Joer", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ee Joer", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 Joer", "5 years = 5 years"); + test.done(); + }, + + "suffix": function (test) { + test.equal(moment(30000).from(0), "an e puer Sekonnen", "prefix"); + test.equal(moment(0).from(30000), "virun e puer Sekonnen", "suffix"); + test.done(); + }, + + "fromNow": function (test) { + test.equal(moment().add({s: 30}).fromNow(), "an e puer Sekonnen", "in a few seconds"); + test.equal(moment().add({d: 1}).fromNow(), "an engem Dag", "in one day"); + test.equal(moment().add({d: 2}).fromNow(), "an 2 Deeg", "in 2 days"); + test.equal(moment().add({d: 3}).fromNow(), "an 3 Deeg", "in 3 days"); + test.equal(moment().add({d: 4}).fromNow(), "a 4 Deeg", "in 4 days"); + test.equal(moment().add({d: 5}).fromNow(), "a 5 Deeg", "in 5 days"); + test.equal(moment().add({d: 6}).fromNow(), "a 6 Deeg", "in 6 days"); + test.equal(moment().add({d: 7}).fromNow(), "a 7 Deeg", "in 7 days"); + test.equal(moment().add({d: 8}).fromNow(), "an 8 Deeg", "in 8 days"); + test.equal(moment().add({d: 9}).fromNow(), "an 9 Deeg", "in 9 days"); + test.equal(moment().add({d: 10}).fromNow(), "an 10 Deeg", "in 10 days"); + test.equal(moment().add({y: 100}).fromNow(), "an 100 Joer", "in 100 years"); + test.equal(moment().add({y: 400}).fromNow(), "a 400 Joer", "in 400 years"); + test.done(); + }, + + "calendar last week": function (test) { + var i, m, weekday, datestring; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + + // Different date string for "Dënschdeg" (Tuesday) and "Donneschdeg" (Thursday) + weekday = parseInt(m.format('d'), 10); + datestring = (weekday === 2 || weekday === 4 ? '[Leschten] dddd [um] LT' : '[Leschte] dddd [um] LT'); + + test.equal(m.calendar(), m.format(datestring), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(datestring), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(datestring), "Today + " + i + " days end of day"); + } + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Lithuanian + *************************************************/ + +exports["locale:lt"] = { + setUp : function (cb) { + moment.locale('lt'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'sausio sau_vasario vas_kovo kov_balandžio bal_gegužės geg_birželio bir_liepos lie_rugpjūčio rgp_rugsėjo rgs_spalio spa_lapkričio lap_gruodžio grd'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'sekmadienis, 14-oji vasario 2010, 3:25:50 pm'], + ['ddd, hA', 'Sek, 3PM'], + ['M Mo MM MMMM MMM', '2 2-oji 02 vasario vas'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-oji 14'], + ['d do dddd ddd dd', '0 0-oji sekmadienis Sek S'], + ['DDD DDDo DDDD', '45 45-oji 045'], + ['w wo ww', '6 6-oji 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['DDDo [metų diena]', '45-oji metų diena'], + ['L', '2010-02-14'], + ['LL', '2010 m. vasario 14 d.'], + ['LLL', '2010 m. vasario 14 d., 15:25 val.'], + ['LLLL', '2010 m. vasario 14 d., sekmadienis, 15:25 val.'], + ['l', '2010-02-14'], + ['ll', '2010 m. vasario 14 d.'], + ['lll', '2010 m. vasario 14 d., 15:25 val.'], + ['llll', '2010 m. vasario 14 d., Sek, 15:25 val.'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1-oji', '1-oji'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2-oji', '2-oji'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3-oji', '3-oji'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4-oji', '4-oji'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5-oji', '5-oji'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6-oji', '6-oji'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7-oji', '7-oji'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8-oji', '8-oji'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9-oji', '9-oji'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10-oji', '10-oji'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11-oji', '11-oji'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12-oji', '12-oji'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13-oji', '13-oji'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14-oji', '14-oji'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15-oji', '15-oji'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16-oji', '16-oji'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17-oji', '17-oji'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18-oji', '18-oji'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19-oji', '19-oji'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20-oji', '20-oji'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21-oji', '21-oji'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22-oji', '22-oji'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23-oji', '23-oji'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24-oji', '24-oji'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25-oji', '25-oji'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26-oji', '26-oji'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27-oji', '27-oji'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28-oji', '28-oji'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29-oji', '29-oji'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30-oji', '30-oji'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31-oji', '31-oji'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'sausio sau_vasario vas_kovo kov_balandžio bal_gegužės geg_birželio bir_liepos lie_rugpjūčio rgp_rugsėjo rgs_spalio spa_lapkričio lap_gruodžio grd'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'sekmadienis Sek S_pirmadienis Pir P_antradienis Ant A_trečiadienis Tre T_ketvirtadienis Ket K_penktadienis Pen Pn_šeštadienis Šeš Š'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "format week on US calendar" : function (test) { + test.expect(7); + moment.locale("lt", {week: {dow: 0, doy: 6}}); // Tests, whether the weekday names are correct, even if the week does not start on Monday + var expected = 'sekmadienis Sek S_pirmadienis Pir P_antradienis Ant A_trečiadienis Tre T_ketvirtadienis Ket K_penktadienis Pen Pn_šeštadienis Šeš Š'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + moment.locale("lt", {week: {dow: 1, doy: 4}}); + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "kelios sekundės", "44 seconds = seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minutė", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minutė", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutės", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 10}), true), "10 minučių", "10 minutes = 10 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 11}), true), "11 minučių", "11 minutes = 11 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 19}), true), "19 minučių", "19 minutes = 19 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 20}), true), "20 minučių", "20 minutes = 20 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutės", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "valanda", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "valanda", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 valandos", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 valandos", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 10}), true), "10 valandų", "10 hours = 10 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 valandos", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "diena", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "diena", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dienos", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "diena", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dienos", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 10}), true), "10 dienų", "10 days = 10 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dienos", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "mėnuo", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "mėnuo", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "mėnuo", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mėnesiai", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mėnesiai", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mėnesiai", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "mėnuo", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mėnesiai", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 10}), true), "10 mėnesių", "10 months = 10 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "metai", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 metai", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "metai", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 metai", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "po kelių sekundžių", "prefix"); + test.equal(moment(0).from(30000), "prieš kelias sekundes", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "prieš kelias sekundes", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "po kelių sekundžių", "in seconds"); + test.equal(moment().add({d: 5}).fromNow(), "po 5 dienų", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Šiandien 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Šiandien 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Šiandien 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Rytoj 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Šiandien 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Vakar 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[Praėjusį] dddd LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[Praėjusį] dddd LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[Praėjusį] dddd LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52-oji', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1-oji', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1-oji', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2-oji', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2-oji', "Jan 15 2012 should be week 2"); + + test.done(); + } + +}; + +var moment = require("../../moment"); + + + /************************************************** + Latvian + *************************************************/ + +exports["locale:lv"] = { + setUp : function (cb) { + moment.locale('lv'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'janvāris jan_februāris feb_marts mar_aprīlis apr_maijs mai_jūnijs jūn_jūlijs jūl_augusts aug_septembris sep_oktobris okt_novembris nov_decembris dec'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'svētdiena, 14. februāris 2010, 3:25:50 pm'], + ['ddd, hA', 'Sv, 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februāris feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. svētdiena Sv Sv'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['L', '14.02.2010'], + ['LL', '2010. gada 14. februāris'], + ['LLL', '2010. gada 14. februāris, 15:25'], + ['LLLL', '2010. gada 14. februāris, svētdiena, 15:25'], + ['l', '14.2.2010'], + ['ll', '2010. gada 14. feb'], + ['lll', '2010. gada 14. feb, 15:25'], + ['llll', '2010. gada 14. feb, Sv, 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'janvāris jan_februāris feb_marts mar_aprīlis apr_maijs mai_jūnijs jūn_jūlijs jūl_augusts aug_septembris sep_oktobris okt_novembris nov_decembris dec'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'svētdiena Sv Sv_pirmdiena P P_otrdiena O O_trešdiena T T_ceturtdiena C C_piektdiena Pk Pk_sestdiena S S'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "dažas sekundes", "44 seconds = seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minūti", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minūti", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minūtes", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minūtes", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "stundu", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "stundu", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 stundas", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 stundas", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 stunda", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "dienu", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "dienu", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dienas", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "dienu", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dienas", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dienas", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "mēnesi", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "mēnesi", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "mēnesi", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mēneši", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mēneši", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mēneši", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "mēnesi", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mēneši", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "gadu", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 gadi", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "gadu", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 gadi", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "dažas sekundes vēlāk", "prefix"); + test.equal(moment(0).from(30000), "dažas sekundes agrāk", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "dažas sekundes agrāk", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "dažas sekundes vēlāk", "in seconds"); + test.equal(moment().add({d: 5}).fromNow(), "5 dienas vēlāk", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Šodien pulksten 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Šodien pulksten 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Šodien pulksten 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Rīt pulksten 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Šodien pulksten 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Vakar pulksten 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [pulksten] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [pulksten] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [pulksten] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[Pagājušā] dddd [pulksten] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[Pagājušā] dddd [pulksten] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[Pagājušā] dddd [pulksten] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Macedonian + *************************************************/ + +exports["locale:mk"] = { + "setUp" : function (cb) { + moment.locale('mk'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + "tearDown" : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'јануари јан_февруари фев_март мар_април апр_мај мај_јуни јун_јули јул_август авг_септември сеп_октомври окт_ноември ное_декември дек'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, H:mm:ss', 'недела, февруари 14-ти 2010, 15:25:50'], + ['ddd, hA', 'нед, 3PM'], + ['M Mo MM MMMM MMM', '2 2-ри 02 февруари фев'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-ти 14'], + ['d do dddd ddd dd', '0 0-ев недела нед нe'], + ['DDD DDDo DDDD', '45 45-ти 045'], + ['w wo ww', '7 7-ми 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45-ти day of the year'], + ['L', '14.02.2010'], + ['LL', '14 февруари 2010'], + ['LLL', '14 февруари 2010 15:25'], + ['LLLL', 'недела, 14 февруари 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 фев 2010'], + ['lll', '14 фев 2010 15:25'], + ['llll', 'нед, 14 фев 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1-ви', '1-ви'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2-ри', '2-ри'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3-ти', '3-ти'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4-ти', '4-ти'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5-ти', '5-ти'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6-ти', '6-ти'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7-ми', '7-ми'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8-ми', '8-ми'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9-ти', '9-ти'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10-ти', '10-ти'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11-ти', '11-ти'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12-ти', '12-ти'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13-ти', '13-ти'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14-ти', '14-ти'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15-ти', '15-ти'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16-ти', '16-ти'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17-ти', '17-ти'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18-ти', '18-ти'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19-ти', '19-ти'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20-ти', '20-ти'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21-ви', '21-ви'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22-ри', '22-ри'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23-ти', '23-ти'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24-ти', '24-ти'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25-ти', '25-ти'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26-ти', '26-ти'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27-ми', '27-ми'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28-ми', '28-ми'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29-ти', '29-ти'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30-ти', '30-ти'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31-ви', '31-ви'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'јануари јан_февруари фев_март мар_април апр_мај мај_јуни јун_јули јул_август авг_септември сеп_октомври окт_ноември ное_декември дек'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'недела нед нe_понеделник пон пo_вторник вто вт_среда сре ср_четврток чет че_петок пет пе_сабота саб сa'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "неколку секунди", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "минута", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "минута", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 минути", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 минути", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "час", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "час", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 часа", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 часа", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 часа", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ден", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ден", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 дена", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ден", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 дена", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 дена", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "месец", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "месец", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "месец", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 месеци", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 месеци", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 месеци", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "месец", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 месеци", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "година", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 години", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "година", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 години", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "после неколку секунди", "prefix"); + test.equal(moment(0).from(30000), "пред неколку секунди", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "пред неколку секунди", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "после неколку секунди", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "после 5 дена", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Денес во 2:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Денес во 2:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Денес во 3:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Утре во 2:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Денес во 1:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Вчера во 2:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [во] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [во] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [во] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + case 3: + case 6: + return '[Во изминатата] dddd [во] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Во изминатиот] dddd [во] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ви', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ви', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-ри', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-ри', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-ти', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Malayalam + *************************************************/ + +exports["locale:ml"] = { + setUp : function (cb) { + moment.locale('ml'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'ജനുവരി ജനു._ഫെബ്രുവരി ഫെബ്രു._മാർച്ച് മാർ._ഏപ്രിൽ ഏപ്രി._മേയ് മേയ്_ജൂൺ ജൂൺ_ജൂലൈ ജൂലൈ._ഓഗസ്റ്റ് ഓഗ._സെപ്റ്റംബർ സെപ്റ്റ._ഒക്ടോബർ ഒക്ടോ._നവംബർ നവം._ഡിസംബർ ഡിസം.'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, a h:mm:ss -നു', 'ഞായറാഴ്ച, 14 ഫെബ്രുവരി 2010, ഉച്ച കഴിഞ്ഞ് 3:25:50 -നു'], + ['ddd, a h -നു', 'ഞായർ, ഉച്ച കഴിഞ്ഞ് 3 -നു'], + ['M Mo MM MMMM MMM', '2 2 02 ഫെബ്രുവരി ഫെബ്രു.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 ഞായറാഴ്ച ഞായർ ഞാ'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'ഉച്ച കഴിഞ്ഞ് ഉച്ച കഴിഞ്ഞ്'], + ['L', '14/02/2010'], + ['LL', '14 ഫെബ്രുവരി 2010'], + ['LLL', '14 ഫെബ്രുവരി 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു'], + ['LLLL', 'ഞായറാഴ്ച, 14 ഫെബ്രുവരി 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു'], + ['l', '14/2/2010'], + ['ll', '14 ഫെബ്രു. 2010'], + ['lll', '14 ഫെബ്രു. 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു'], + ['llll', 'ഞായർ, 14 ഫെബ്രു. 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'ജനുവരി ജനു._ഫെബ്രുവരി ഫെബ്രു._മാർച്ച് മാർ._ഏപ്രിൽ ഏപ്രി._മേയ് മേയ്_ജൂൺ ജൂൺ_ജൂലൈ ജൂലൈ._ഓഗസ്റ്റ് ഓഗ._സെപ്റ്റംബർ സെപ്റ്റ._ഒക്ടോബർ ഒക്ടോ._നവംബർ നവം._ഡിസംബർ ഡിസം.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'ഞായറാഴ്ച ഞായർ ഞാ_തിങ്കളാഴ്ച തിങ്കൾ തി_ചൊവ്വാഴ്ച ചൊവ്വ ചൊ_ബുധനാഴ്ച ബുധൻ ബു_വ്യാഴാഴ്ച വ്യാഴം വ്യാ_വെള്ളിയാഴ്ച വെള്ളി വെ_ശനിയാഴ്ച ശനി ശ'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "അൽപ നിമിഷങ്ങൾ", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "ഒരു മിനിറ്റ്", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "ഒരു മിനിറ്റ്", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 മിനിറ്റ്", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 മിനിറ്റ്", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ഒരു മണിക്കൂർ", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ഒരു മണിക്കൂർ", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 മണിക്കൂർ", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 മണിക്കൂർ", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 മണിക്കൂർ", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ഒരു ദിവസം", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ഒരു ദിവസം", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 ദിവസം", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ഒരു ദിവസം", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 ദിവസം", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 ദിവസം", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ഒരു മാസം", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ഒരു മാസം", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "ഒരു മാസം", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 മാസം", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 മാസം", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 മാസം", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ഒരു മാസം", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 മാസം", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ഒരു വർഷം", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 വർഷം", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ഒരു വർഷം", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 വർഷം", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "അൽപ നിമിഷങ്ങൾ കഴിഞ്ഞ്", "prefix"); + test.equal(moment(0).from(30000), "അൽപ നിമിഷങ്ങൾ മുൻപ്", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "അൽപ നിമിഷങ്ങൾ മുൻപ്", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "അൽപ നിമിഷങ്ങൾ കഴിഞ്ഞ്", "അൽപ നിമിഷങ്ങൾ കഴിഞ്ഞ്"); + test.equal(moment().add({d: 5}).fromNow(), "5 ദിവസം കഴിഞ്ഞ്", "5 ദിവസം കഴിഞ്ഞ്"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "ഇന്ന് രാത്രി 2:00 -നു", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "ഇന്ന് രാത്രി 2:25 -നു", "Now plus 25 min"); + test.equal(moment(a).add({h: 3}).calendar(), "ഇന്ന് രാവിലെ 5:00 -നു", "Now plus 3 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "നാളെ രാത്രി 2:00 -നു", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "ഇന്ന് രാത്രി 1:00 -നു", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "ഇന്നലെ രാത്രി 2:00 -നു", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[കഴിഞ്ഞ] dddd[,] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[കഴിഞ്ഞ] dddd[,] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[കഴിഞ്ഞ] dddd[,] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + "meridiem" : function (test) { + test.equal(moment([2011, 2, 23, 2, 30]).format('a'), "രാത്രി", "before dawn"); + test.equal(moment([2011, 2, 23, 9, 30]).format('a'), "രാവിലെ", "morning"); + test.equal(moment([2011, 2, 23, 14, 30]).format('a'), "ഉച്ച കഴിഞ്ഞ്", "during day"); + test.equal(moment([2011, 2, 23, 17, 30]).format('a'), "വൈകുന്നേരം", "evening"); + test.equal(moment([2011, 2, 23, 19, 30]).format('a'), "വൈകുന്നേരം", "late evening"); + test.equal(moment([2011, 2, 23, 21, 20]).format('a'), "രാത്രി", "night"); + + test.equal(moment([2011, 2, 23, 2, 30]).format('A'), "രാത്രി", "before dawn"); + test.equal(moment([2011, 2, 23, 9, 30]).format('A'), "രാവിലെ", "morning"); + test.equal(moment([2011, 2, 23, 14, 30]).format('A'), "ഉച്ച കഴിഞ്ഞ്", " during day"); + test.equal(moment([2011, 2, 23, 17, 30]).format('A'), "വൈകുന്നേരം", "evening"); + test.equal(moment([2011, 2, 23, 19, 30]).format('A'), "വൈകുന്നേരം", "late evening"); + test.equal(moment([2011, 2, 23, 21, 20]).format('A'), "രാത്രി", "night"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', "Jan 15 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Marathi + *************************************************/ + +exports["locale:mr"] = { + setUp : function (cb) { + moment.locale('mr'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'जानेवारी जाने._फेब्रुवारी फेब्रु._मार्च मार्च._एप्रिल एप्रि._मे मे._जून जून._जुलै जुलै._ऑगस्ट ऑग._सप्टेंबर सप्टें._ऑक्टोबर ऑक्टो._नोव्हेंबर नोव्हें._डिसेंबर डिसें.'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, a h:mm:ss वाजता', 'रविवार, १४ फेब्रुवारी २०१०, दुपारी ३:२५:५० वाजता'], + ['ddd, a h वाजता', 'रवि, दुपारी ३ वाजता'], + ['M Mo MM MMMM MMM', '२ २ ०२ फेब्रुवारी फेब्रु.'], + ['YYYY YY', '२०१० १०'], + ['D Do DD', '१४ १४ १४'], + ['d do dddd ddd dd', '० ० रविवार रवि र'], + ['DDD DDDo DDDD', '४५ ४५ ०४५'], + ['w wo ww', '८ ८ ०८'], + ['h hh', '३ ०३'], + ['H HH', '१५ १५'], + ['m mm', '२५ २५'], + ['s ss', '५० ५०'], + ['a A', 'दुपारी दुपारी'], + ['L', '१४/०२/२०१०'], + ['LL', '१४ फेब्रुवारी २०१०'], + ['LLL', '१४ फेब्रुवारी २०१०, दुपारी ३:२५ वाजता'], + ['LLLL', 'रविवार, १४ फेब्रुवारी २०१०, दुपारी ३:२५ वाजता'], + ['l', '१४/२/२०१०'], + ['ll', '१४ फेब्रु. २०१०'], + ['lll', '१४ फेब्रु. २०१०, दुपारी ३:२५ वाजता'], + ['llll', 'रवि, १४ फेब्रु. २०१०, दुपारी ३:२५ वाजता'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '१', '१'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '२', '२'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '३', '३'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '४', '४'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '५', '५'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '६', '६'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '७', '७'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '८', '८'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '९', '९'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '१०', '१०'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '११', '११'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '१२', '१२'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '१३', '१३'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '१४', '१४'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '१५', '१५'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '१६', '१६'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '१७', '१७'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '१८', '१८'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '१९', '१९'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '२०', '२०'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '२१', '२१'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '२२', '२२'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '२३', '२३'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '२४', '२४'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '२५', '२५'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '२६', '२६'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '२७', '२७'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '२८', '२८'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '२९', '२९'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '३०', '३०'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '३१', '३१'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'जानेवारी जाने._फेब्रुवारी फेब्रु._मार्च मार्च._एप्रिल एप्रि._मे मे._जून जून._जुलै जुलै._ऑगस्ट ऑग._सप्टेंबर सप्टें._ऑक्टोबर ऑक्टो._नोव्हेंबर नोव्हें._डिसेंबर डिसें.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'रविवार रवि र_सोमवार सोम सो_मंगळवार मंगळ मं_बुधवार बुध बु_गुरूवार गुरू गु_शुक्रवार शुक्र शु_शनिवार शनि श'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "सेकंद", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "एक मिनिट", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "एक मिनिट", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "२ मिनिटे", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "४४ मिनिटे", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "एक तास", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "एक तास", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "२ तास", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "५ तास", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "२१ तास", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "एक दिवस", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "एक दिवस", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "२ दिवस", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "एक दिवस", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "५ दिवस", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "२५ दिवस", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "एक महिना", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "एक महिना", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "एक महिना", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "२ महिने", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "२ महिने", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "३ महिने", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "एक महिना", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "५ महिने", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "एक वर्ष", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "२ वर्षे", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "एक वर्ष", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "५ वर्षे", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "सेकंद नंतर", "prefix"); + test.equal(moment(0).from(30000), "सेकंद पूर्वी", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "सेकंद पूर्वी", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "सेकंद नंतर", "सेकंद नंतर"); + test.equal(moment().add({d: 5}).fromNow(), "५ दिवस नंतर", "५ दिवस नंतर"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "आज रात्री २:०० वाजता", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "आज रात्री २:२५ वाजता", "Now plus 25 min"); + test.equal(moment(a).add({h: 3}).calendar(), "आज सकाळी ५:०० वाजता", "Now plus 3 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "उद्या रात्री २:०० वाजता", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "आज रात्री १:०० वाजता", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "काल रात्री २:०० वाजता", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd[,] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[मागील] dddd[,] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[मागील] dddd[,] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[मागील] dddd[,] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + "meridiem" : function (test) { + test.equal(moment([2011, 2, 23, 2, 30]).format('a'), "रात्री", "before dawn"); + test.equal(moment([2011, 2, 23, 9, 30]).format('a'), "सकाळी", "morning"); + test.equal(moment([2011, 2, 23, 14, 30]).format('a'), "दुपारी", "during day"); + test.equal(moment([2011, 2, 23, 17, 30]).format('a'), "सायंकाळी", "evening"); + test.equal(moment([2011, 2, 23, 19, 30]).format('a'), "सायंकाळी", "late evening"); + test.equal(moment([2011, 2, 23, 21, 20]).format('a'), "रात्री", "night"); + + test.equal(moment([2011, 2, 23, 2, 30]).format('A'), "रात्री", "before dawn"); + test.equal(moment([2011, 2, 23, 9, 30]).format('A'), "सकाळी", "morning"); + test.equal(moment([2011, 2, 23, 14, 30]).format('A'), "दुपारी", " during day"); + test.equal(moment([2011, 2, 23, 17, 30]).format('A'), "सायंकाळी", "evening"); + test.equal(moment([2011, 2, 23, 19, 30]).format('A'), "सायंकाळी", "late evening"); + test.equal(moment([2011, 2, 23, 21, 20]).format('A'), "रात्री", "night"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '१ ०१ १', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '१ ०१ १', "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '२ ०२ २', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '२ ०२ २', "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '३ ०३ ३', "Jan 15 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Bahasa Melayu + *************************************************/ + +exports["locale:ms-my"] = { + setUp : function (cb) { + moment.locale('ms-my'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var i, + tests = 'Januari Jan_Februari Feb_Mac Mac_April Apr_Mei Mei_Jun Jun_Julai Jul_Ogos Ogs_September Sep_Oktober Okt_November Nov_Disember Dis'.split("_"); + + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' sepatutnya bulan ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Ahad, Februari 14 2010, 3:25:50 petang'], + ['ddd, hA', 'Ahd, 3petang'], + ['M Mo MM MMMM MMM', '2 2 02 Februari Feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 Ahad Ahd Ah'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '7 7 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'petang petang'], + ['[hari] [ke] DDDo [tahun] ini', 'hari ke 45 tahun ini'], + ['L', '14/02/2010'], + ['LL', '14 Februari 2010'], + ['LLL', '14 Februari 2010 pukul 15.25'], + ['LLLL', 'Ahad, 14 Februari 2010 pukul 15.25'], + ['l', '14/2/2010'], + ['ll', '14 Feb 2010'], + ['lll', '14 Feb 2010 pukul 15.25'], + ['llll', 'Ahd, 14 Feb 2010 pukul 15.25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); + test.done(); + }, + + "format month" : function (test) { + var i, + expected = 'Januari Jan_Februari Feb_Mac Mac_April Apr_Mei Mei_Jun Jun_Julai Jul_Ogos Ogs_September Sep_Oktober Okt_November Nov_Disember Dis'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var i, + expected = 'Ahad Ahd Ah_Isnin Isn Is_Selasa Sel Sl_Rabu Rab Rb_Khamis Kha Km_Jumaat Jum Jm_Sabtu Sab Sb'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "beberapa saat", "44 saat = beberapa saat"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "seminit", "45 saat = seminit"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "seminit", "89 saat = seminit"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minit", "90 saat = 2 minit"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minit", "44 minit = 44 minit"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "sejam", "45 minit = sejam"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "sejam", "89 minit = sejam"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 jam", "90 minit = 2 jam"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 jam", "5 jam = 5 jam"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 jam", "21 jam = 21 jam"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "sehari", "22 jam = sehari"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "sehari", "35 jam = sehari"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 hari", "36 jam = 2 hari"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "sehari", "1 hari = sehari"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 hari", "5 hari = 5 hari"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 hari", "25 hari = 25 hari"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "sebulan", "26 hari = sebulan"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "sebulan", "30 hari = sebulan"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "sebulan", "45 hari = sebulan"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 bulan", "46 hari = 2 bulan"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 bulan", "75 hari = 2 bulan"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 bulan", "76 hari = 3 bulan"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "sebulan", "1 bulan = sebulan"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 bulan", "5 bulan = 5 bulan"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "setahun", "345 hari = setahun"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 tahun", "548 hari = 2 tahun"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "setahun", "1 tahun = setahun"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 tahun", "5 tahun = 5 tahun"); + + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "dalam beberapa saat", "prefix"); + test.equal(moment(0).from(30000), "beberapa saat yang lepas", "suffix"); + + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "beberapa saat yang lepas", "waktu sekarang dari sekarang sepatutnya menunjukkan sebagai telah lepas"); + + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "dalam beberapa saat", "dalam beberapa saat"); + test.equal(moment().add({d: 5}).fromNow(), "dalam 5 hari", "dalam 5 hari"); + + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Hari ini pukul 02.00", "hari ini pada waktu yang sama"); + test.equal(moment(a).add({m: 25}).calendar(), "Hari ini pukul 02.25", "Sekarang tambah 25 minit"); + test.equal(moment(a).add({h: 1}).calendar(), "Hari ini pukul 03.00", "Sekarang tambah 1 jam"); + test.equal(moment(a).add({d: 1}).calendar(), "Esok pukul 02.00", "esok pada waktu yang sama"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Hari ini pukul 01.00", "Sekarang tolak 1 jam"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Kelmarin pukul 02.00", "kelmarin pada waktu yang sama"); + + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [pukul] LT'), "Hari ini + " + i + " hari waktu sekarang"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [pukul] LT'), "Hari ini + " + i + " hari permulaan hari"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [pukul] LT'), "Hari ini + " + i + " hari tamat hari"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), "Hari ini - " + i + " hari waktu sekarang"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), "Hari ini - " + i + " hari permulaan hari"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), "Hari ini - " + i + " hari tamat hari"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 minggu lepas"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "dalam 1 minggu"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 minggu lepas"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "dalam 2 minggu"); + + test.done(); + }, + + // Sunday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 sepatutnya minggu 1"); + test.equal(moment([2012, 0, 7]).week(), 2, "Jan 7 2012 sepatutnya minggu 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 sepatutnya minggu 2"); + test.equal(moment([2012, 0, 14]).week(), 3, "Jan 14 2012 sepatutnya minggu 3"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 sepatutnya minggu 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 53, "Dec 31 2006 sepatutnya minggu 53"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 sepatutnya minggu 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 sepatutnya minggu 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 sepatutnya minggu 1"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 sepatutnya minggu 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 sepatutnya minggu 2"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 30]).week(), 52, "Dec 30 2007 sepatutnya minggu 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 sepatutnya minggu 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 sepatutnya minggu 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 sepatutnya minggu 1"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 sepatutnya minggu 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 sepatutnya minggu 2"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 52, "Dec 29 2002 sepatutnya minggu 52"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 sepatutnya minggu 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 sepatutnya minggu 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 sepatutnya minggu 1"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 sepatutnya minggu 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 sepatutnya minggu 2"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 52, "Dec 28 2008 sepatutnya minggu 52"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 sepatutnya minggu 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 sepatutnya minggu 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 sepatutnya minggu 1"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 sepatutnya minggu 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 sepatutnya minggu 2"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 52, "Dec 27 2009 sepatutnya minggu 52"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 sepatutnya minggu 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 sepatutnya minggu 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 sepatutnya minggu 1"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 sepatutnya minggu 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 sepatutnya minggu 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 52, "Dec 26 2010 sepatutnya minggu 52"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 sepatutnya minggu 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 sepatutnya minggu 1"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 sepatutnya minggu 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 sepatutnya minggu 2"); + + test.done(); + }, + + "weeks year starting sunday format" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', "Jan 1 2012 sepatutnya minggu 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', "Jan 7 2012 sepatutnya minggu 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 sepatutnya minggu 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', "Jan 14 2012 sepatutnya minggu 3"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', "Jan 15 2012 sepatutnya minggu 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + +/************************************************** + Myanmar Burmese + *************************************************/ + +exports["locale:my"] = { + setUp: function (cb) { + moment.locale('my'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown: function (cb) { + moment.locale('en'); + cb(); + }, + + "parse": function (test) { + test.expect(96); + var tests = 'ဇန်နဝါရီ ဇန်_ဖေဖော်ဝါရီ ဖေ_မတ် မတ်_ဧပြီ ပြီ_မေ မေ_ဇွန် ဇွန်_ဇူလိုင် လိုင်_သြဂုတ် သြ_စက်တင်ဘာ စက်_အောက်တိုဘာ အောက်_နိုဝင်ဘာ နို_ဒီဇင်ဘာ ဒီ'.split("_"), + i; + + function equalTest (input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format": function (test) { + test.expect(22); + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'တနင်္ဂနွေ, ဖေဖော်ဝါရီ ၁၄ ၂၀၁၀, ၃:၂၅:၅၀ pm'], + ['ddd, hA', 'နွေ, ၃PM'], + ['M Mo MM MMMM MMM', '၂ ၂ ၀၂ ဖေဖော်ဝါရီ ဖေ'], + ['YYYY YY', '၂၀၁၀ ၁၀'], + ['D Do DD', '၁၄ ၁၄ ၁၄'], + ['d do dddd ddd dd', '၀ ၀ တနင်္ဂနွေ နွေ နွေ'], + ['DDD DDDo DDDD', '၄၅ ၄၅ ၀၄၅'], + ['w wo ww', '၆ ၆ ၀၆'], + ['h hh', '၃ ၀၃'], + ['H HH', '၁၅ ၁၅'], + ['m mm', '၂၅ ၂၅'], + ['s ss', '၅၀ ၅၀'], + ['a A', 'pm PM'], + ['[နှစ်၏] DDDo [ရက်မြောက်]', 'နှစ်၏ ၄၅ ရက်မြောက်'], + ['L', '၁၄/၀၂/၂၀၁၀'], + ['LL', '၁၄ ဖေဖော်ဝါရီ ၂၀၁၀'], + ['LLL', '၁၄ ဖေဖော်ဝါရီ ၂၀၁၀ ၁၅:၂၅'], + ['LLLL', 'တနင်္ဂနွေ ၁၄ ဖေဖော်ဝါရီ ၂၀၁၀ ၁၅:၂၅'], + ['l', '၁၄/၂/၂၀၁၀'], + ['ll', '၁၄ ဖေ ၂၀၁၀'], + ['lll', '၁၄ ဖေ ၂၀၁၀ ၁၅:၂၅'], + ['llll', 'နွေ ၁၄ ဖေ ၂၀၁၀ ၁၅:၂၅'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal": function (test) { + test.expect(31); + test.equal(moment([2011, 0, 1]).format('DDDo'), '၁', '၁'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '၂', '၂'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '၃', '၃'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '၄', '၄'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '၅', '၅'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '၆', '၆'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '၇', '၇'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '၈', '၈'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '၉', '၉'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '၁၀', '၁၀'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '၁၁', '၁၁'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '၁၂', '၁၂'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '၁၃', '၁၃'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '၁၄', '၁၄'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '၁၅', '၁၅'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '၁၆', '၁၆'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '၁၇', '၁၇'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '၁၈', '၁၈'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '၁၉', '၁၉'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '၂၀', '၂၀'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '၂၁', '၂၁'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '၂၂', '၂၂'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '၂၃', '၂၃'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '၂၄', '၂၄'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '၂၅', '၂၅'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '၂၆', '၂၆'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '၂၇', '၂၇'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '၂၈', '၂၈'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '၂၉', '၂၉'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '၃၀', '၃၀'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '၃၁', '၃၁'); + test.done(); + }, + + "format month": function (test) { + test.expect(12); + var expected = 'ဇန်နဝါရီ ဇန်_ဖေဖော်ဝါရီ ဖေ_မတ် မတ်_ဧပြီ ပြီ_မေ မေ_ဇွန် ဇွန်_ဇူလိုင် လိုင်_သြဂုတ် သြ_စက်တင်ဘာ စက်_အောက်တိုဘာ အောက်_နိုဝင်ဘာ နို_ဒီဇင်ဘာ ဒီ'.split("_"), + i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week": function (test) { + test.expect(7); + var expected = 'တနင်္ဂနွေ နွေ နွေ_တနင်္လာ လာ လာ_အင်္ဂါ င်္ဂါ င်္ဂါ_ဗုဒ္ဓဟူး ဟူး ဟူး_ကြာသပတေး ကြာ ကြာ_သောကြာ သော သော_စနေ နေ နေ'.split("_"), + i; + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from": function (test) { + test.expect(28); + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({ + s: 44 + }), true), "စက္ကန်.အနည်းငယ်", "၄၄ စက္ကန်. = စက္ကန်.အနည်းငယ်"); + test.equal(start.from(moment([2007, 1, 28]).add({ + s: 45 + }), true), "တစ်မိနစ်", "၄၅ စက္ကန်. = တစ်မိနစ်"); + test.equal(start.from(moment([2007, 1, 28]).add({ + s: 89 + }), true), "တစ်မိနစ်", "၈၉ စက္ကန်. = တစ်မိနစ်"); + test.equal(start.from(moment([2007, 1, 28]).add({ + s: 90 + }), true), "၂ မိနစ်", "၉၀ စက္ကန်. = ၂ မိနစ်"); + test.equal(start.from(moment([2007, 1, 28]).add({ + m: 44 + }), true), "၄၄ မိနစ်", "၄၄ မိနစ် = ၄၄ မိနစ်"); + test.equal(start.from(moment([2007, 1, 28]).add({ + m: 45 + }), true), "တစ်နာရီ", "၄၅ မိနစ် = ၁ နာရီ"); + test.equal(start.from(moment([2007, 1, 28]).add({ + m: 89 + }), true), "တစ်နာရီ", "၈၉ မိနစ် = တစ်နာရီ"); + test.equal(start.from(moment([2007, 1, 28]).add({ + m: 90 + }), true), "၂ နာရီ", "မိနစ် ၉၀= ၂ နာရီ"); + test.equal(start.from(moment([2007, 1, 28]).add({ + h: 5 + }), true), "၅ နာရီ", "၅ နာရီ= ၅ နာရီ"); + test.equal(start.from(moment([2007, 1, 28]).add({ + h: 21 + }), true), "၂၁ နာရီ", "၂၁ နာရီ =၂၁ နာရီ"); + test.equal(start.from(moment([2007, 1, 28]).add({ + h: 22 + }), true), "တစ်ရက်", "၂၂ နာရီ =တစ်ရက်"); + test.equal(start.from(moment([2007, 1, 28]).add({ + h: 35 + }), true), "တစ်ရက်", "၃၅ နာရီ =တစ်ရက်"); + test.equal(start.from(moment([2007, 1, 28]).add({ + h: 36 + }), true), "၂ ရက်", "၃၆ နာရီ = ၂ ရက်"); + test.equal(start.from(moment([2007, 1, 28]).add({ + d: 1 + }), true), "တစ်ရက်", "၁ ရက်= တစ်ရက်"); + test.equal(start.from(moment([2007, 1, 28]).add({ + d: 5 + }), true), "၅ ရက်", "၅ ရက် = ၅ ရက်"); + test.equal(start.from(moment([2007, 1, 28]).add({ + d: 25 + }), true), "၂၅ ရက်", "၂၅ ရက်= ၂၅ ရက်"); + test.equal(start.from(moment([2007, 1, 28]).add({ + d: 26 + }), true), "တစ်လ", "၂၆ ရက် = တစ်လ"); + test.equal(start.from(moment([2007, 1, 28]).add({ + d: 30 + }), true), "တစ်လ", "ရက် ၃၀ = တစ်လ"); + test.equal(start.from(moment([2007, 1, 28]).add({ + d: 43 + }), true), "တစ်လ", "၄၃ ရက် = တစ်လ"); + test.equal(start.from(moment([2007, 1, 28]).add({ + d: 46 + }), true), "၂ လ", "၄၆ ရက် = ၂ လ"); + test.equal(start.from(moment([2007, 1, 28]).add({ + d: 74 + }), true), "၂ လ", "၇၅ ရက်= ၂ လ"); + test.equal(start.from(moment([2007, 1, 28]).add({ + d: 76 + }), true), "၃ လ", "၇၆ ရက် = ၃ လ"); + test.equal(start.from(moment([2007, 1, 28]).add({ + M: 1 + }), true), "တစ်လ", "၁ လ = တစ်လ"); + test.equal(start.from(moment([2007, 1, 28]).add({ + M: 5 + }), true), "၅ လ", "၅ လ = ၅ လ"); + test.equal(start.from(moment([2007, 1, 28]).add({ + d: 345 + }), true), "တစ်နှစ်", "၃၄၅ ရက် = တစ်နှစ်"); + test.equal(start.from(moment([2007, 1, 28]).add({ + d: 548 + }), true), "၂ နှစ်", "၅၄၈ ရက် = ၂ နှစ်"); + test.equal(start.from(moment([2007, 1, 28]).add({ + y: 1 + }), true), "တစ်နှစ်", "၁ နှစ် = တစ်နှစ်"); + test.equal(start.from(moment([2007, 1, 28]).add({ + y: 5 + }), true), "၅ နှစ်", "၅ နှစ် = ၅ နှစ်"); + test.done(); + }, + + "suffix": function (test) { + test.expect(2); + test.equal(moment(30000).from(0), "လာမည့် စက္ကန်.အနည်းငယ် မှာ", "prefix"); + test.equal(moment(0).from(30000), "လွန်ခဲ့သော စက္ကန်.အနည်းငယ် က", "suffix"); + test.done(); + }, + + "now from now": function (test) { + test.expect(1); + test.equal(moment().fromNow(), "လွန်ခဲ့သော စက္ကန်.အနည်းငယ် က", "ယခုမှစပြီး အတိတ်တွင်ဖော်ပြသလိုဖော်ပြမည်"); + test.done(); + }, + + "fromNow": function (test) { + test.expect(2); + test.equal(moment().add({ + s: 30 + }).fromNow(), "လာမည့် စက္ကန်.အနည်းငယ် မှာ", "လာမည့် စက္ကန်.အနည်းငယ် မှာ"); + test.equal(moment().add({ + d: 5 + }).fromNow(), "လာမည့် ၅ ရက် မှာ", "လာမည့် ၅ ရက် မှာ"); + test.done(); + }, + + "calendar day": function (test) { + test.expect(6); + + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "ယနေ. ၀၂:၀၀ မှာ", "ယနေ. ဒီအချိန်"); + test.equal(moment(a).add({ + m: 25 + }).calendar(), "ယနေ. ၀၂:၂၅ မှာ", "ယခုမှ ၂၅ မိနစ်ပေါင်းထည့်"); + test.equal(moment(a).add({ + h: 1 + }).calendar(), "ယနေ. ၀၃:၀၀ မှာ", "ယခုမှ ၁ နာရီပေါင်းထည့်"); + test.equal(moment(a).add({ + d: 1 + }).calendar(), "မနက်ဖြန် ၀၂:၀၀ မှာ", "မနက်ဖြန် ဒီအချိန်"); + test.equal(moment(a).subtract({ + h: 1 + }).calendar(), "ယနေ. ၀၁:၀၀ မှာ", "ယခုမှ ၁ နာရီနှုတ်"); + test.equal(moment(a).subtract({ + d: 1 + }).calendar(), "မနေ.က ၀၂:၀၀ မှာ", "မနေ.က ဒီအချိန်"); + test.done(); + }, + + "calendar next week": function (test) { + test.expect(15); + + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({ + d: i + }); + test.equal(m.calendar(), m.format('dddd LT [မှာ]'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd LT [မှာ]'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd LT [မှာ]'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week": function (test) { + test.expect(15); + + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({ + d: i + }); + test.equal(m.calendar(), m.format('[ပြီးခဲ့သော] dddd LT [မှာ]'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[ပြီးခဲ့သော] dddd LT [မှာ]'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[ပြီးခဲ့သော] dddd LT [မှာ]'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else": function (test) { + test.expect(4); + + var weeksAgo = moment().subtract({ + w: 1 + }), + weeksFromNow = moment().add({ + w: 1 + }); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "လွန်ခဲ့သော ၁ ပတ်က"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "၁ ပတ်အတွင်း"); + + weeksAgo = moment().subtract({ + w: 2 + }); + weeksFromNow = moment().add({ + w: 2 + }); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "၂ ပတ် အရင်က"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "၂ ပတ် အတွင်း"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday": function (test) { + test.expect(5); + + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday": function (test) { + test.expect(5); + + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday": function (test) { + test.expect(6); + + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday": function (test) { + test.expect(6); + + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday": function (test) { + test.expect(6); + + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday": function (test) { + test.expect(6); + + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday": function (test) { + test.expect(6); + + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted": function (test) { + test.expect(5); + + test.equal(moment([2012, 0, 1]).format('w ww wo'), '၅၂ ၅၂ ၅၂', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '၁ ၀၁ ၁', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '၁ ၀၁ ၁', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '၂ ၀၂ ၂', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '၂ ၀၂ ၂', "Jan 15 2012 should be week 2"); + + test.done(); + } + +}; + +var moment = require("../../moment"); + + + /************************************************** + Norwegian bokmål + *************************************************/ + +exports["locale:nb"] = { + setUp : function (cb) { + moment.locale('nb'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'januar jan_februar feb_mars mars_april april_mai mai_juni juni_juli juli_august aug_september sep_oktober okt_november nov_desember des'.split("_"), + i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'søndag, februar 14. 2010, 3:25:50 pm'], + ['ddd, hA', 'sø., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. søndag sø. sø'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[den] DDDo [dagen i året]', 'den 45. dagen i året'], + ['L', '14.02.2010'], + ['LL', '14. februar 2010'], + ['LLL', '14. februar 2010 kl. 15.25'], + ['LLLL', 'søndag 14. februar 2010 kl. 15.25'], + ['l', '14.2.2010'], + ['ll', '14. feb. 2010'], + ['lll', '14. feb. 2010 kl. 15.25'], + ['llll', 'sø. 14. feb. 2010 kl. 15.25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'januar jan._februar feb._mars mars_april april_mai mai_juni juni_juli juli_august aug._september sep._oktober okt._november nov._desember des.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'søndag sø. sø_mandag ma. ma_tirsdag ti. ti_onsdag on. on_torsdag to. to_fredag fr. fr_lørdag lø. lø'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "noen sekunder", "44 sekunder = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "ett minutt", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "ett minutt", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutter", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutter", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "en time", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "en time", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 timer", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 timer", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 timer", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "en dag", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "en dag", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dager", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "en dag", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dager", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dager", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "en måned", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "en måned", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "en måned", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 måneder", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 måneder", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 måneder", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "en måned", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 måneder", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ett år", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 år", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ett år", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 år", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "om noen sekunder", "prefix"); + test.equal(moment(0).from(30000), "for noen sekunder siden", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "for noen sekunder siden", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "om noen sekunder", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "om 5 dager", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "i dag kl. 2.00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "i dag kl. 2.25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "i dag kl. 3.00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "i morgen kl. 2.00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "i dag kl. 1.00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "i går kl. 2.00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [kl.] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [kl.] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [kl.] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[forrige] dddd [kl.] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[forrige] dddd [kl.] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[forrige] dddd [kl.] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Nepali + *************************************************/ + +exports["locale:ne"] = { + setUp : function (cb) { + moment.locale('ne'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'जनवरी जन._फेब्रुवरी फेब्रु._मार्च मार्च_अप्रिल अप्रि._मई मई_जुन जुन_जुलाई जुलाई._अगष्ट अग._सेप्टेम्बर सेप्ट._अक्टोबर अक्टो._नोभेम्बर नोभे._डिसेम्बर डिसे.'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, aको h:mm:ss बजे', 'आइतबार, १४ फेब्रुवरी २०१०, बेलुकाको ३:२५:५० बजे'], + ['ddd, aको h बजे', 'आइत., बेलुकाको ३ बजे'], + ['M Mo MM MMMM MMM', '२ २ ०२ फेब्रुवरी फेब्रु.'], + ['YYYY YY', '२०१० १०'], + ['D Do DD', '१४ १४ १४'], + ['d do dddd ddd dd', '० ० आइतबार आइत. आइ.'], + ['DDD DDDo DDDD', '४५ ४५ ०४५'], + ['w wo ww', '७ ७ ०७'], + ['h hh', '३ ०३'], + ['H HH', '१५ १५'], + ['m mm', '२५ २५'], + ['s ss', '५० ५०'], + ['a A', 'बेलुका बेलुका'], + ['L', '१४/०२/२०१०'], + ['LL', '१४ फेब्रुवरी २०१०'], + ['LLL', '१४ फेब्रुवरी २०१०, बेलुकाको ३:२५ बजे'], + ['LLLL', 'आइतबार, १४ फेब्रुवरी २०१०, बेलुकाको ३:२५ बजे'], + ['l', '१४/२/२०१०'], + ['ll', '१४ फेब्रु. २०१०'], + ['lll', '१४ फेब्रु. २०१०, बेलुकाको ३:२५ बजे'], + ['llll', 'आइत., १४ फेब्रु. २०१०, बेलुकाको ३:२५ बजे'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '१', '१'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '२', '२'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '३', '३'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '४', '४'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '५', '५'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '६', '६'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '७', '७'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '८', '८'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '९', '९'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '१०', '१०'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '११', '११'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '१२', '१२'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '१३', '१३'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '१४', '१४'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '१५', '१५'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '१६', '१६'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '१७', '१७'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '१८', '१८'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '१९', '१९'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '२०', '२०'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '२१', '२१'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '२२', '२२'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '२३', '२३'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '२४', '२४'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '२५', '२५'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '२६', '२६'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '२७', '२७'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '२८', '२८'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '२९', '२९'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '३०', '३०'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '३१', '३१'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'जनवरी जन._फेब्रुवरी फेब्रु._मार्च मार्च_अप्रिल अप्रि._मई मई_जुन जुन_जुलाई जुलाई._अगष्ट अग._सेप्टेम्बर सेप्ट._अक्टोबर अक्टो._नोभेम्बर नोभे._डिसेम्बर डिसे.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'आइतबार आइत. आइ._सोमबार सोम. सो._मङ्गलबार मङ्गल. मङ्_बुधबार बुध. बु._बिहिबार बिहि. बि._शुक्रबार शुक्र. शु._शनिबार शनि. श.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "केही समय", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "एक मिनेट", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "एक मिनेट", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "२ मिनेट", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "४४ मिनेट", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "एक घण्टा", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "एक घण्टा", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "२ घण्टा", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "५ घण्टा", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "२१ घण्टा", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "एक दिन", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "एक दिन", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "२ दिन", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "एक दिन", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "५ दिन", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "२५ दिन", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "एक महिना", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "एक महिना", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "एक महिना", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "२ महिना", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "२ महिना", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "३ महिना", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "एक महिना", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "५ महिना", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "एक बर्ष", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "२ बर्ष", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "एक बर्ष", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "५ बर्ष", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "केही समयमा", "prefix"); + test.equal(moment(0).from(30000), "केही समय अगाडी", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "केही समय अगाडी", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "केही समयमा", "केही समयमा"); + test.equal(moment().add({d: 5}).fromNow(), "५ दिनमा", "५ दिनमा"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "आज रातीको २:०० बजे", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "आज रातीको २:२५ बजे", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "आज बिहानको ३:०० बजे", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "भोली रातीको २:०० बजे", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "आज रातीको १:०० बजे", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "हिजो रातीको २:०० बजे", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('[आउँदो] dddd[,] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[आउँदो] dddd[,] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[आउँदो] dddd[,] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[गएको] dddd[,] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[गएको] dddd[,] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[गएको] dddd[,] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + "meridiem" : function (test) { + test.equal(moment([2011, 2, 23, 2, 30]).format('a'), "राती", "before dawn"); + test.equal(moment([2011, 2, 23, 9, 30]).format('a'), "बिहान", "morning"); + test.equal(moment([2011, 2, 23, 14, 30]).format('a'), "दिउँसो", "during day"); + test.equal(moment([2011, 2, 23, 17, 30]).format('a'), "बेलुका", "evening"); + test.equal(moment([2011, 2, 23, 19, 30]).format('a'), "साँझ", "late evening"); + test.equal(moment([2011, 2, 23, 21, 20]).format('a'), "राती", "night"); + + test.equal(moment([2011, 2, 23, 2, 30]).format('A'), "राती", "before dawn"); + test.equal(moment([2011, 2, 23, 9, 30]).format('A'), "बिहान", "morning"); + test.equal(moment([2011, 2, 23, 14, 30]).format('A'), "दिउँसो", "during day"); + test.equal(moment([2011, 2, 23, 17, 30]).format('A'), "बेलुका", "evening"); + test.equal(moment([2011, 2, 23, 19, 30]).format('A'), "साँझ", "late evening"); + test.equal(moment([2011, 2, 23, 21, 20]).format('A'), "राती", "night"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '१ ०१ १', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '१ ०१ १', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '२ ०२ २', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '२ ०२ २', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '३ ०३ ३', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Dutch + *************************************************/ + +exports["locale:nl"] = { + setUp : function (cb) { + moment.locale('nl'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'januari jan._februari feb._maart mrt._april apr._mei mei._juni jun._juli jul._augustus aug._september sep._oktober okt._november nov._december dec.'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, HH:mm:ss', 'zondag, februari 14de 2010, 15:25:50'], + ['ddd, HH', 'zo., 15'], + ['M Mo MM MMMM MMM', '2 2de 02 februari feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14de 14'], + ['d do dddd ddd dd', '0 0de zondag zo. Zo'], + ['DDD DDDo DDDD', '45 45ste 045'], + ['w wo ww', '6 6de 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45ste day of the year'], + ['L', '14-02-2010'], + ['LL', '14 februari 2010'], + ['LLL', '14 februari 2010 15:25'], + ['LLLL', 'zondag 14 februari 2010 15:25'], + ['l', '14-2-2010'], + ['ll', '14 feb. 2010'], + ['lll', '14 feb. 2010 15:25'], + ['llll', 'zo. 14 feb. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1ste', '1ste'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2de', '2de'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3de', '3de'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4de', '4de'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5de', '5de'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6de', '6de'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7de', '7de'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8ste', '8ste'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9de', '9de'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10de', '10de'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11de', '11de'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12de', '12de'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13de', '13de'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14de', '14de'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15de', '15de'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16de', '16de'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17de', '17de'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18de', '18de'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19de', '19de'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20ste', '20ste'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21ste', '21ste'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22ste', '22ste'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23ste', '23ste'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24ste', '24ste'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25ste', '25ste'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26ste', '26ste'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27ste', '27ste'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28ste', '28ste'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29ste', '29ste'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30ste', '30ste'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31ste', '31ste'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'januari jan._februari feb._maart mrt._april apr._mei mei_juni jun._juli jul._augustus aug._september sep._oktober okt._november nov._december dec.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'zondag zo. Zo_maandag ma. Ma_dinsdag di. Di_woensdag wo. Wo_donderdag do. Do_vrijdag vr. Vr_zaterdag za. Za'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "een paar seconden", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "één minuut", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "één minuut", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuten", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuten", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "één uur", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "één uur", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 uur", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 uur", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 uur", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "één dag", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "één dag", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dagen", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "één dag", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dagen", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dagen", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "één maand", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "één maand", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "één maand", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 maanden", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 maanden", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 maanden", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "één maand", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 maanden", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "één jaar", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 jaar", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "één jaar", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 jaar", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "over een paar seconden", "prefix"); + test.equal(moment(0).from(30000), "een paar seconden geleden", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "een paar seconden geleden", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "over een paar seconden", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "over 5 dagen", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "vandaag om 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "vandaag om 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "vandaag om 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "morgen om 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "vandaag om 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "gisteren om 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [om] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [om] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [om] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + "month abbreviation" : function (test) { + test.equal(moment([2012, 5, 23]).format('D-MMM-YYYY'), '23-jun-2012', 'format month abbreviation surrounded by dashes should not include a dot'); + test.equal(moment([2012, 5, 23]).format('D MMM YYYY'), '23 jun. 2012', 'format month abbreviation not surrounded by dashes should include a dot'); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52ste', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1ste', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1ste', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2de', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2de', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Norwegian nynorsk + *************************************************/ + +exports["locale:nn"] = { + setUp : function (cb) { + moment.locale('nn'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'januar jan_februar feb_mars mar_april apr_mai mai_juni jun_juli jul_august aug_september sep_oktober okt_november nov_desember des'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'sundag, februar 14. 2010, 3:25:50 pm'], + ['ddd, hA', 'sun, 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februar feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. sundag sun su'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['L', '14.02.2010'], + ['LL', '14 februar 2010'], + ['LLL', '14 februar 2010 15:25'], + ['LLLL', 'sundag 14 februar 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 feb 2010'], + ['lll', '14 feb 2010 15:25'], + ['llll', 'sun 14 feb 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'januar jan_februar feb_mars mar_april apr_mai mai_juni jun_juli jul_august aug_september sep_oktober okt_november nov_desember des'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'sundag sun su_måndag mån må_tysdag tys ty_onsdag ons on_torsdag tor to_fredag fre fr_laurdag lau lø'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "nokre sekund", "44 sekunder = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "eit minutt", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "eit minutt", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutt", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutt", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ein time", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ein time", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 timar", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 timar", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 timar", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ein dag", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ein dag", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dagar", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ein dag", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dagar", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dagar", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ein månad", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ein månad", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "ein månad", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 månader", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 månader", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 månader", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ein månad", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 månader", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "eit år", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 år", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "eit år", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 år", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "om nokre sekund", "prefix"); + test.equal(moment(0).from(30000), "for nokre sekund sidan", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "for nokre sekund sidan", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "om nokre sekund", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "om 5 dagar", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "I dag klokka 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "I dag klokka 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "I dag klokka 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "I morgon klokka 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "I dag klokka 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "I går klokka 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [klokka] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [klokka] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [klokka] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[Føregåande] dddd [klokka] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[Føregåande] dddd [klokka] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[Føregåande] dddd [klokka] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Polish + *************************************************/ + +exports["locale:pl"] = { + setUp : function (cb) { + moment.locale('pl'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'styczeń sty_luty lut_marzec mar_kwiecień kwi_maj maj_czerwiec cze_lipiec lip_sierpień sie_wrzesień wrz_październik paź_listopad lis_grudzień gru'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'niedziela, luty 14. 2010, 3:25:50 pm'], + ['ddd, hA', 'nie, 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 luty lut'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. niedziela nie N'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['L', '14.02.2010'], + ['LL', '14 lutego 2010'], + ['LLL', '14 lutego 2010 15:25'], + ['LLLL', 'niedziela, 14 lutego 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 lut 2010'], + ['lll', '14 lut 2010 15:25'], + ['llll', 'nie, 14 lut 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'styczeń sty_luty lut_marzec mar_kwiecień kwi_maj maj_czerwiec cze_lipiec lip_sierpień sie_wrzesień wrz_październik paź_listopad lis_grudzień gru'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'niedziela nie N_poniedziałek pon Pn_wtorek wt Wt_środa śr Śr_czwartek czw Cz_piątek pt Pt_sobota sb So'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "kilka sekund", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minuta", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minuta", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuty", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuty", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "godzina", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "godzina", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 godziny", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 godzin", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 godzin", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "1 dzień", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "1 dzień", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dni", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "1 dzień", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dni", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dni", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "miesiąc", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "miesiąc", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "miesiąc", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 miesiące", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 miesiące", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 miesiące", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "miesiąc", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 miesięcy", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "rok", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 lata", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "rok", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 lat", "5 years = 5 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 112}), true), "112 lat", "112 years = 112 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 122}), true), "122 lata", "122 years = 122 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 213}), true), "213 lat", "213 years = 213 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 223}), true), "223 lata", "223 years = 223 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "za kilka sekund", "prefix"); + test.equal(moment(0).from(30000), "kilka sekund temu", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "kilka sekund temu", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "za kilka sekund", "in a few seconds"); + test.equal(moment().add({h: 1}).fromNow(), "za godzinę", "in an hour"); + test.equal(moment().add({d: 5}).fromNow(), "za 5 dni", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Dziś o 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Dziś o 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Dziś o 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Jutro o 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Dziś o 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Wczoraj o 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('[W] dddd [o] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[W] dddd [o] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[W] dddd [o] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + return '[W zeszłą niedzielę o] LT'; + case 3: + return '[W zeszłą środę o] LT'; + case 6: + return '[W zeszłą sobotę o] LT'; + default: + return '[W zeszły] dddd [o] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); + + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); + + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Portuguese - Brazilian + *************************************************/ + +exports["locale:pt-br"] = { + setUp : function (cb) { + moment.locale('pt-br'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'janeiro jan_fevereiro fev_março mar_abril abr_maio mai_junho jun_julho jul_agosto ago_setembro set_outubro out_novembro nov_dezembro dez'.split("_"), i; + + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'domingo, fevereiro 14º 2010, 3:25:50 pm'], + ['ddd, hA', 'dom, 3PM'], + ['M Mo MM MMMM MMM', '2 2º 02 fevereiro fev'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14º 14'], + ['d do dddd ddd', '0 0º domingo dom'], + ['DDD DDDo DDDD', '45 45º 045'], + ['w wo ww', '8 8º 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45º day of the year'], + ['L', '14/02/2010'], + ['LL', '14 de fevereiro de 2010'], + ['LLL', '14 de fevereiro de 2010 às 15:25'], + ['LLLL', 'domingo, 14 de fevereiro de 2010 às 15:25'], + ['l', '14/2/2010'], + ['ll', '14 de fev de 2010'], + ['lll', '14 de fev de 2010 às 15:25'], + ['llll', 'dom, 14 de fev de 2010 às 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'janeiro jan_fevereiro fev_março mar_abril abr_maio mai_junho jun_julho jul_agosto ago_setembro set_outubro out_novembro nov_dezembro dez'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'domingo dom_segunda-feira seg_terça-feira ter_quarta-feira qua_quinta-feira qui_sexta-feira sex_sábado sáb'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "segundos", "44 seconds = seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "um minuto", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "um minuto", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutos", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutos", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "uma hora", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "uma hora", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 horas", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 horas", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 horas", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "um dia", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "um dia", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dias", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "um dia", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dias", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dias", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "um mês", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "um mês", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "um mês", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 meses", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 meses", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 meses", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "um mês", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 meses", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "um ano", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 anos", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "um ano", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 anos", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "em segundos", "prefix"); + test.equal(moment(0).from(30000), "segundos atrás", "suffix"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "em segundos", "in seconds"); + test.equal(moment().add({d: 5}).fromNow(), "em 5 dias", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Hoje às 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Hoje às 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Hoje às 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Amanhã às 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Hoje às 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Ontem às 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [às] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [às] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [às] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Sunday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday format" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1º', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1º', "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2º', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2º', "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3º', "Jan 15 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Portuguese + *************************************************/ + +exports["locale:pt"] = { + setUp : function (cb) { + moment.locale('pt'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'Janeiro Jan_Fevereiro Fev_Março Mar_Abril Abr_Maio Mai_Junho Jun_Julho Jul_Agosto Ago_Setembro Set_Outubro Out_Novembro Nov_Dezembro Dez'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'domingo, fevereiro 14º 2010, 3:25:50 pm'], + ['ddd, hA', 'dom, 3PM'], + ['M Mo MM MMMM MMM', '2 2º 02 fevereiro fev'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14º 14'], + ['d do dddd ddd dd', '0 0º domingo dom dom'], + ['DDD DDDo DDDD', '45 45º 045'], + ['w wo ww', '6 6º 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45º day of the year'], + ['L', '14/02/2010'], + ['LL', '14 de fevereiro de 2010'], + ['LLL', '14 de fevereiro de 2010 15:25'], + ['LLLL', 'domingo, 14 de fevereiro de 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 de fev de 2010'], + ['lll', '14 de fev de 2010 15:25'], + ['llll', 'dom, 14 de fev de 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'janeiro jan_fevereiro fev_março mar_abril abr_maio mai_junho jun_julho jul_agosto ago_setembro set_outubro out_novembro nov_dezembro dez'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'domingo dom dom_segunda-feira seg 2ª_terça-feira ter 3ª_quarta-feira qua 4ª_quinta-feira qui 5ª_sexta-feira sex 6ª_sábado sáb sáb'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "segundos", "44 seconds = seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "um minuto", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "um minuto", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minutos", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minutos", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "uma hora", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "uma hora", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 horas", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 horas", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 horas", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "um dia", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "um dia", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dias", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "um dia", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dias", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dias", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "um mês", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "um mês", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "um mês", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 meses", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 meses", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 meses", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "um mês", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 meses", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "um ano", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 anos", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "um ano", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 anos", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "em segundos", "prefix"); + test.equal(moment(0).from(30000), "há segundos", "suffix"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "em segundos", "in seconds"); + test.equal(moment().add({d: 5}).fromNow(), "em 5 dias", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Hoje às 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Hoje às 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Hoje às 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Amanhã às 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Hoje às 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Ontem às 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [às] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [às] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [às] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Romanian + *************************************************/ + +exports["locale:ro"] = { + setUp : function (cb) { + moment.locale('ro'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'ianuarie ian._februarie febr._martie mart._aprilie apr._mai mai_iunie iun._iulie iul._august aug._septembrie sept._octombrie oct._noiembrie nov._decembrie dec.'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss A', 'duminică, februarie 14 2010, 3:25:50 PM'], + ['ddd, hA', 'Dum, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 februarie febr.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 duminică Dum Du'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '7 7 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[a] DDDo[a zi a anului]', 'a 45a zi a anului'], + ['L', '14.02.2010'], + ['LL', '14 februarie 2010'], + ['LLL', '14 februarie 2010 15:25'], + ['LLLL', 'duminică, 14 februarie 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 febr. 2010'], + ['lll', '14 febr. 2010 15:25'], + ['llll', 'Dum, 14 febr. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'ianuarie ian._februarie febr._martie mart._aprilie apr._mai mai_iunie iun._iulie iul._august aug._septembrie sept._octombrie oct._noiembrie nov._decembrie dec.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'duminică Dum Du_luni Lun Lu_marți Mar Ma_miercuri Mie Mi_joi Joi Jo_vineri Vin Vi_sâmbătă Sâm Sâ'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "câteva secunde", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "un minut", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "un minut", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minute", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 de minute", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "o oră", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "o oră", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ore", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ore", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 de ore", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "o zi", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "o zi", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 zile", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "o zi", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 zile", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 de zile", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "o lună", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "o lună", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "o lună", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 luni", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 luni", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 luni", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "o lună", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 luni", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "un an", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 ani", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "un an", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 ani", "5 years = 5 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 19}), true), "19 ani", "19 years = 19 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 20}), true), "20 de ani", "20 years = 20 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 100}), true), "100 de ani", "100 years = 100 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 101}), true), "101 ani", "101 years = 101 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 119}), true), "119 ani", "119 years = 119 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 120}), true), "120 de ani", "120 years = 120 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 219}), true), "219 ani", "219 years = 219 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 220}), true), "220 de ani", "220 years = 220 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "peste câteva secunde", "prefix"); + test.equal(moment(0).from(30000), "câteva secunde în urmă", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "câteva secunde în urmă", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "peste câteva secunde", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "peste 5 zile", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "azi la 2:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "azi la 2:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "azi la 3:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "mâine la 2:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "azi la 1:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "ieri la 2:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [la] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [la] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [la] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[fosta] dddd [la] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[fosta] dddd [la] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[fosta] dddd [la] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Russian + *************************************************/ + +exports["locale:ru"] = { + setUp : function (cb) { + moment.locale('ru'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'январь янв_февраль фев_март мар_апрель апр_май май_июнь июнь_июль июль_август авг_сентябрь сен_октябрь окт_ноябрь ноя_декабрь дек'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "parse exceptional case" : function (test) { + test.equal(moment('11 мая 1989', ['DD MMMM YYYY']).format('DD-MM-YYYY'), '11-05-1989'); + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, HH:mm:ss', 'воскресенье, 14-го февраля 2010, 15:25:50'], + ['ddd, h A', 'вс, 3 дня'], + ['M Mo MM MMMM MMM', '2 2-й 02 февраль фев'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-го 14'], + ['d do dddd ddd dd', '0 0-й воскресенье вс вс'], + ['DDD DDDo DDDD', '45 45-й 045'], + ['w wo ww', '7 7-я 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'дня дня'], + ['DDDo [день года]', '45-й день года'], + ['L', '14.02.2010'], + ['LL', '14 февраля 2010 г.'], + ['LLL', '14 февраля 2010 г., 15:25'], + ['LLLL', 'воскресенье, 14 февраля 2010 г., 15:25'], + ['l', '14.2.2010'], + ['ll', '14 фев 2010 г.'], + ['lll', '14 фев 2010 г., 15:25'], + ['llll', 'вс, 14 фев 2010 г., 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format meridiem" : function (test) { + test.equal(moment([2012, 11, 28, 0, 0]).format("A"), "ночи", "night"); + test.equal(moment([2012, 11, 28, 3, 59]).format("A"), "ночи", "night"); + test.equal(moment([2012, 11, 28, 4, 0]).format("A"), "утра", "morning"); + test.equal(moment([2012, 11, 28, 11, 59]).format("A"), "утра", "morning"); + test.equal(moment([2012, 11, 28, 12, 0]).format("A"), "дня", "afternoon"); + test.equal(moment([2012, 11, 28, 16, 59]).format("A"), "дня", "afternoon"); + test.equal(moment([2012, 11, 28, 17, 0]).format("A"), "вечера", "evening"); + test.equal(moment([2012, 11, 28, 23, 59]).format("A"), "вечера", "evening"); + + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1-й', '1-й'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2-й', '2-й'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3-й', '3-й'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4-й', '4-й'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5-й', '5-й'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6-й', '6-й'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7-й', '7-й'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8-й', '8-й'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9-й', '9-й'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10-й', '10-й'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11-й', '11-й'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12-й', '12-й'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13-й', '13-й'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14-й', '14-й'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15-й', '15-й'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16-й', '16-й'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17-й', '17-й'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18-й', '18-й'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19-й', '19-й'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20-й', '20-й'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21-й', '21-й'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22-й', '22-й'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23-й', '23-й'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24-й', '24-й'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25-й', '25-й'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26-й', '26-й'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27-й', '27-й'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28-й', '28-й'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29-й', '29-й'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30-й', '30-й'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31-й', '31-й'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'январь янв_февраль фев_март мар_апрель апр_май май_июнь июнь_июль июль_август авг_сентябрь сен_октябрь окт_ноябрь ноя_декабрь дек'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format month case" : function (test) { + var months = { + 'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), + 'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_') + }, i; + for (i = 0; i < 12; i++) { + test.equal(moment([2011, i, 1]).format('D MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); + test.equal(moment([2011, i, 1]).format('MMMM'), months.nominative[i], '1 ' + months.nominative[i]); + } + test.done(); + }, + + "format month short case" : function (test) { + var monthsShort = { + 'nominative': 'янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), + 'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_') + }, i; + for (i = 0; i < 12; i++) { + test.equal(moment([2011, i, 1]).format('D MMM'), '1 ' + monthsShort.accusative[i], '1 ' + monthsShort.accusative[i]); + test.equal(moment([2011, i, 1]).format('MMM'), monthsShort.nominative[i], '1 ' + monthsShort.nominative[i]); + } + test.done(); + }, + + "format month case with escaped symbols" : function (test) { + var months = { + 'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), + 'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_') + }, i; + for (i = 0; i < 12; i++) { + test.equal(moment([2013, i, 1]).format('D[] MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); + test.equal(moment([2013, i, 1]).format('[]D[] []MMMM[]'), '1 ' + months.accusative[i] + '', '1 ' + months.accusative[i] + ''); + test.equal(moment([2013, i, 1]).format('D[-й день] MMMM'), '1-й день ' + months.accusative[i], '1-й день ' + months.accusative[i]); + test.equal(moment([2013, i, 1]).format('D, MMMM'), '1, ' + months.nominative[i], '1, ' + months.nominative[i]); + } + test.done(); + }, + + "format month short case with escaped symbols" : function (test) { + var monthsShort = { + 'nominative': 'янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), + 'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_') + }, i; + for (i = 0; i < 12; i++) { + test.equal(moment([2013, i, 1]).format('D[] MMM'), '1 ' + monthsShort.accusative[i], '1 ' + monthsShort.accusative[i]); + test.equal(moment([2013, i, 1]).format('[]D[] []MMM[]'), '1 ' + monthsShort.accusative[i] + '', '1 ' + monthsShort.accusative[i] + ''); + test.equal(moment([2013, i, 1]).format('D[-й день] MMM'), '1-й день ' + monthsShort.accusative[i], '1-й день ' + monthsShort.accusative[i]); + test.equal(moment([2013, i, 1]).format('D, MMM'), '1, ' + monthsShort.nominative[i], '1, ' + monthsShort.nominative[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'воскресенье вс вс_понедельник пн пн_вторник вт вт_среда ср ср_четверг чт чт_пятница пт пт_суббота сб сб'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "несколько секунд", "44 seconds = seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "минута", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "минута", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 минуты", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 31}), true), "31 минута", "31 minutes = 31 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 минуты", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "час", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "час", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 часа", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 часов", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 час", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "день", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "день", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 дня", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "день", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 дней", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), "11 дней", "11 days = 11 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), "21 день", "21 days = 21 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 дней", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "месяц", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "месяц", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "месяц", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 месяца", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 месяца", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 месяца", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "месяц", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 месяцев", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "год", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 года", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "год", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 лет", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "через несколько секунд", "prefix"); + test.equal(moment(0).from(30000), "несколько секунд назад", "suffix"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "через несколько секунд", "in seconds"); + test.equal(moment().add({d: 5}).fromNow(), "через 5 дней", "in 5 days"); + test.equal(moment().add({m: 31}).fromNow(), "через 31 минуту", "in 31 minutes = in 31 minutes"); + test.equal(moment().subtract({m: 31}).fromNow(), "31 минуту назад", "31 minutes ago = 31 minutes ago"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Сегодня в 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Сегодня в 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Сегодня в 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Завтра в 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Сегодня в 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Вчера в 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + function makeFormat(d) { + return d.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT'; + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + return '[В прошлое] dddd [в] LT'; + case 1: + case 2: + case 4: + return '[В прошлый] dddd [в] LT'; + case 3: + case 5: + case 6: + return '[В прошлую] dddd [в] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-я', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-я', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-я', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-я', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-я', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Slovak + *************************************************/ + +exports["locale:sk"] = { + setUp : function (cb) { + moment.locale('sk'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'január jan._február feb._marec mar._apríl apr._máj máj_jún jún._júl júl._august aug._september sep._október okt._november nov._december dec.'.split("_"), i; + function equalTest(input, mmm, monthIndex) { + test.equal(moment(input, mmm).month(), monthIndex, input + ' should be month ' + (monthIndex + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss', 'nedeľa, február 14. 2010, 3:25:50'], + ['ddd, h', 'ne, 3'], + ['M Mo MM MMMM MMM', '2 2. 02 február feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. nedeľa ne ne'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['DDDo [deň v roku]', '45. deň v roku'], + ['L', '14.02.2010'], + ['LL', '14. február 2010'], + ['LLL', '14. február 2010 15:25'], + ['LLLL', 'nedeľa 14. február 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14. feb 2010'], + ['lll', '14. feb 2010 15:25'], + ['llll', 'ne 14. feb 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'január jan_február feb_marec mar_apríl apr_máj máj_jún jún_júl júl_august aug_september sep_október okt_november nov_december dec'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'nedeľa ne ne_pondelok po po_utorok ut ut_streda st st_štvrtok št št_piatok pi pi_sobota so so'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "pár sekúnd", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minúta", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minúta", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minúty", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minút", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "hodina", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "hodina", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 hodiny", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 hodín", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 hodín", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "deň", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "deň", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dni", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "deň", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dní", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dní", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "mesiac", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "mesiac", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "mesiac", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 mesiace", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 mesiace", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mesiace", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "mesiac", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mesiacov", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "rok", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 roky", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "rok", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 rokov", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "za pár sekúnd", "prefix"); + test.equal(moment(0).from(30000), "pred pár sekundami", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "pred pár sekundami", "now from now should display as in the past"); + test.done(); + }, + + "fromNow (future)" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "za pár sekúnd", "in a few seconds"); + test.equal(moment().add({m: 1}).fromNow(), "za minútu", "in a minute"); + test.equal(moment().add({m: 3}).fromNow(), "za 3 minúty", "in 3 minutes"); + test.equal(moment().add({m: 10}).fromNow(), "za 10 minút", "in 10 minutes"); + test.equal(moment().add({h: 1}).fromNow(), "za hodinu", "in an hour"); + test.equal(moment().add({h: 3}).fromNow(), "za 3 hodiny", "in 3 hours"); + test.equal(moment().add({h: 10}).fromNow(), "za 10 hodín", "in 10 hours"); + test.equal(moment().add({d: 1}).fromNow(), "za deň", "in a day"); + test.equal(moment().add({d: 3}).fromNow(), "za 3 dni", "in 3 days"); + test.equal(moment().add({d: 10}).fromNow(), "za 10 dní", "in 10 days"); + test.equal(moment().add({M: 1}).fromNow(), "za mesiac", "in a month"); + test.equal(moment().add({M: 3}).fromNow(), "za 3 mesiace", "in 3 months"); + test.equal(moment().add({M: 10}).fromNow(), "za 10 mesiacov", "in 10 months"); + test.equal(moment().add({y: 1}).fromNow(), "za rok", "in a year"); + test.equal(moment().add({y: 3}).fromNow(), "za 3 roky", "in 3 years"); + test.equal(moment().add({y: 10}).fromNow(), "za 10 rokov", "in 10 years"); + test.done(); + }, + + "fromNow (past)" : function (test) { + test.equal(moment().subtract({s: 30}).fromNow(), "pred pár sekundami", "a few seconds ago"); + test.equal(moment().subtract({m: 1}).fromNow(), "pred minútou", "a minute ago"); + test.equal(moment().subtract({m: 3}).fromNow(), "pred 3 minútami", "3 minutes ago"); + test.equal(moment().subtract({m: 10}).fromNow(), "pred 10 minútami", "10 minutes ago"); + test.equal(moment().subtract({h: 1}).fromNow(), "pred hodinou", "an hour ago"); + test.equal(moment().subtract({h: 3}).fromNow(), "pred 3 hodinami", "3 hours ago"); + test.equal(moment().subtract({h: 10}).fromNow(), "pred 10 hodinami", "10 hours ago"); + test.equal(moment().subtract({d: 1}).fromNow(), "pred dňom", "a day ago"); + test.equal(moment().subtract({d: 3}).fromNow(), "pred 3 dňami", "3 days ago"); + test.equal(moment().subtract({d: 10}).fromNow(), "pred 10 dňami", "10 days ago"); + test.equal(moment().subtract({M: 1}).fromNow(), "pred mesiacom", "a month ago"); + test.equal(moment().subtract({M: 3}).fromNow(), "pred 3 mesiacmi", "3 months ago"); + test.equal(moment().subtract({M: 10}).fromNow(), "pred 10 mesiacmi", "10 months ago"); + test.equal(moment().subtract({y: 1}).fromNow(), "pred rokom", "a year ago"); + test.equal(moment().subtract({y: 3}).fromNow(), "pred 3 rokmi", "3 years ago"); + test.equal(moment().subtract({y: 10}).fromNow(), "pred 10 rokmi", "10 years ago"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "dnes o 2:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "dnes o 2:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "dnes o 3:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "zajtra o 2:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "dnes o 1:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "včera o 2:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m, nextDay; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + nextDay = ''; + switch (m.day()) { + case 0: + nextDay = 'v nedeľu'; + break; + case 1: + nextDay = 'v pondelok'; + break; + case 2: + nextDay = 'v utorok'; + break; + case 3: + nextDay = 'v stredu'; + break; + case 4: + nextDay = 'vo štvrtok'; + break; + case 5: + nextDay = 'v piatok'; + break; + case 6: + nextDay = 'v sobotu'; + break; + } + test.equal(m.calendar(), m.format('[' + nextDay + '] [o] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[' + nextDay + '] [o] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[' + nextDay + '] [o] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m, lastDay; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + lastDay = ''; + switch (m.day()) { + case 0: + lastDay = 'minulú nedeľu'; + break; + case 1: + lastDay = 'minulý pondelok'; + break; + case 2: + lastDay = 'minulý utorok'; + break; + case 3: + lastDay = 'minulú stredu'; + break; + case 4: + lastDay = 'minulý štvrtok'; + break; + case 5: + lastDay = 'minulý piatok'; + break; + case 6: + lastDay = 'minulú sobotu'; + break; + } + test.equal(m.calendar(), m.format('[' + lastDay + '] [o] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[' + lastDay + '] [o] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[' + lastDay + '] [o] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + "humanize duration" : function (test) { + test.equal(moment.duration(1, "minutes").humanize(), "minúta", "a minute (future)"); + test.equal(moment.duration(1, "minutes").humanize(true), "za minútu", "in a minute"); + test.equal(moment.duration(-1, "minutes").humanize(), "minúta", "a minute (past)"); + test.equal(moment.duration(-1, "minutes").humanize(true), "pred minútou", "a minute ago"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Slovenian + *************************************************/ + +exports["locale:sl"] = { + setUp : function (cb) { + moment.locale('sl'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'januar jan._februar feb._marec mar._april apr._maj maj_junij jun._julij jul._avgust avg._september sep._oktober okt._november nov._december dec.'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedelja, 14. februar 2010, 3:25:50 pm'], + ['ddd, hA', 'ned., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. nedelja ned. ne'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '7 7. 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['L', '14. 02. 2010'], + ['LL', '14. februar 2010'], + ['LLL', '14. februar 2010 15:25'], + ['LLLL', 'nedelja, 14. februar 2010 15:25'], + ['l', '14. 2. 2010'], + ['ll', '14. feb. 2010'], + ['lll', '14. feb. 2010 15:25'], + ['llll', 'ned., 14. feb. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'januar jan._februar feb._marec mar._april apr._maj maj._junij jun._julij jul._avgust avg._september sep._oktober okt._november nov._december dec.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'nedelja ned. ne_ponedeljek pon. po_torek tor. to_sreda sre. sr_četrtek čet. če_petek pet. pe_sobota sob. so'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "nekaj sekund", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "ena minuta", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "ena minuta", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuti", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minut", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ena ura", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ena ura", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 uri", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ur", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ur", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "en dan", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "en dan", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dni", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "en dan", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dni", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dni", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "en mesec", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "en mesec", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "en mesec", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 meseca", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 meseca", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 mesece", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "en mesec", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 mesecev", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "eno leto", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 leti", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "eno leto", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 let", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "čez nekaj sekund", "prefix"); + test.equal(moment(0).from(30000), "nekaj sekund nazaj", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "nekaj sekund nazaj", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "čez nekaj sekund", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "čez 5 dni", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "danes ob 2:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "danes ob 2:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "danes ob 3:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "jutri ob 2:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "danes ob 1:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "včeraj ob 2:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + return '[v] [nedeljo] [ob] LT'; + case 3: + return '[v] [sredo] [ob] LT'; + case 6: + return '[v] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[v] dddd [ob] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + case 3: + case 6: + return '[prejšnja] dddd [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prejšnji] dddd [ob] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Albanian + *************************************************/ + +exports["locale:sq"] = { + setUp : function (cb) { + moment.locale('sq'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var i, + tests = 'Janar Jan_Shkurt Shk_Mars Mar_Prill Pri_Maj Maj_Qershor Qer_Korrik Kor_Gusht Gus_Shtator Sht_Tetor Tet_Nëntor Nën_Dhjetor Dhj'.split("_"); + + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, HH:mm:ss', 'E Diel, Shkurt 14. 2010, 15:25:50'], + ['ddd, HH', 'Die, 15'], + ['M Mo MM MMMM MMM', '2 2. 02 Shkurt Shk'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. E Diel Die D'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '6 6. 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'MD MD'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['L', '14/02/2010'], + ['LL', '14 Shkurt 2010'], + ['LLL', '14 Shkurt 2010 15:25'], + ['LLLL', 'E Diel, 14 Shkurt 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 Shk 2010'], + ['lll', '14 Shk 2010 15:25'], + ['llll', 'Die, 14 Shk 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + + test.done(); + }, + + "meridiem" : function (test) { + test.equal(moment([2011, 2, 23, 0, 0]).format('A'), "PD", "before dawn"); + test.equal(moment([2011, 2, 23, 12, 0]).format('A'), "MD", "noon"); + + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var i, + expected = 'Janar Jan_Shkurt Shk_Mars Mar_Prill Pri_Maj Maj_Qershor Qer_Korrik Kor_Gusht Gus_Shtator Sht_Tetor Tet_Nëntor Nën_Dhjetor Dhj'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var i, + expected = 'E Diel Die D_E Hënë Hën H_E Martë Mar Ma_E Mërkurë Mër Më_E Enjte Enj E_E Premte Pre P_E Shtunë Sht Sh'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "disa sekonda", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "një minutë", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "një minutë", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuta", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuta", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "një orë", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "një orë", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 orë", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 orë", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 orë", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "një ditë", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "një ditë", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 ditë", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "një ditë", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 ditë", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 ditë", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "një muaj", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "një muaj", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "një muaj", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 muaj", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 muaj", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 muaj", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "një muaj", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 muaj", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "një vit", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 vite", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "një vit", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 vite", "5 years = 5 years"); + + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "në disa sekonda", "prefix"); + test.equal(moment(0).from(30000), "disa sekonda më parë", "suffix"); + + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "disa sekonda më parë", "now from now should display as in the past"); + + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "në disa sekonda", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "në 5 ditë", "in 5 days"); + + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Sot në 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Sot në 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Sot në 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Nesër në 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Sot në 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Dje në 02:00", "yesterday at the same time"); + + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [në] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [në] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [në] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('dddd [e kaluar në] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [e kaluar në] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [e kaluar në] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Serbian-cyrillic (sr-cyr) + *************************************************/ + +exports["locale:sr-cyrl"] = { + setUp : function (cb) { + moment.locale('sr-cyrl'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'јануар јан._фебруар феб._март мар._април апр._мај мај_јун јун_јул јул_август авг._септембар сеп._октобар окт._новембар нов._децембар дец.'.split("_"), + i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'недеља, 14. фебруар 2010, 3:25:50 pm'], + ['ddd, hA', 'нед., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 фебруар феб.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. недеља нед. не'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '7 7. 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['L', '14. 02. 2010'], + ['LL', '14. фебруар 2010'], + ['LLL', '14. фебруар 2010 15:25'], + ['LLLL', 'недеља, 14. фебруар 2010 15:25'], + ['l', '14. 2. 2010'], + ['ll', '14. феб. 2010'], + ['lll', '14. феб. 2010 15:25'], + ['llll', 'нед., 14. феб. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'јануар јан._фебруар феб._март мар._април апр._мај мај_јун јун_јул јул_август авг._септембар сеп._октобар окт._новембар нов._децембар дец.'.split("_"), + i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'недеља нед. не_понедељак пон. по_уторак уто. ут_среда сре. ср_четвртак чет. че_петак пет. пе_субота суб. су'.split("_"), + i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "неколико секунди", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "један минут", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "један минут", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 минуте", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 минута", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "један сат", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "један сат", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 сата", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 сати", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 сати", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "дан", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "дан", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 дана", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "дан", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 дана", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 дана", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "месец", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "месец", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "месец", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 месеца", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 месеца", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 месеца", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "месец", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 месеци", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "годину", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 године", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "годину", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 година", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "за неколико секунди", "prefix"); + test.equal(moment(0).from(30000), "пре неколико секунди", "prefix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "пре неколико секунди", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "за неколико секунди", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "за 5 дана", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "данас у 2:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "данас у 2:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "данас у 3:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "сутра у 2:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "данас у 1:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "јуче у 2:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + return '[у] [недељу] [у] LT'; + case 3: + return '[у] [среду] [у] LT'; + case 6: + return '[у] [суботу] [у] LT'; + case 1: + case 2: + case 4: + case 5: + return '[у] dddd [у] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + function makeFormat(d) { + var lastWeekDay = [ + '[прошле] [недеље] [у] LT', + '[прошлог] [понедељка] [у] LT', + '[прошлог] [уторка] [у] LT', + '[прошле] [среде] [у] LT', + '[прошлог] [четвртка] [у] LT', + '[прошлог] [петка] [у] LT', + '[прошле] [суботе] [у] LT' + ]; + + return lastWeekDay[d.day()]; + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Serbian-latin (sr) + *************************************************/ + +exports["locale:sr"] = { + setUp : function (cb) { + moment.locale('sr'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'januar jan._februar feb._mart mar._april apr._maj maj_jun jun_jul jul_avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split("_"), + i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedelja, 14. februar 2010, 3:25:50 pm'], + ['ddd, hA', 'ned., 3PM'], + ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14. 14'], + ['d do dddd ddd dd', '0 0. nedelja ned. ne'], + ['DDD DDDo DDDD', '45 45. 045'], + ['w wo ww', '7 7. 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45. day of the year'], + ['L', '14. 02. 2010'], + ['LL', '14. februar 2010'], + ['LLL', '14. februar 2010 15:25'], + ['LLLL', 'nedelja, 14. februar 2010 15:25'], + ['l', '14. 2. 2010'], + ['ll', '14. feb. 2010'], + ['lll', '14. feb. 2010 15:25'], + ['llll', 'ned., 14. feb. 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'januar jan._februar feb._mart mar._april apr._maj maj_jun jun_jul jul_avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split("_"), + i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'nedelja ned. ne_ponedeljak pon. po_utorak uto. ut_sreda sre. sr_četvrtak čet. če_petak pet. pe_subota sub. su'.split("_"), + i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "nekoliko sekundi", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "jedan minut", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "jedan minut", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minute", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuta", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "jedan sat", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "jedan sat", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 sata", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 sati", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 sati", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "dan", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "dan", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dana", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "dan", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dana", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dana", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "mesec", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "mesec", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "mesec", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 meseca", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 meseca", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 meseca", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "mesec", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 meseci", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "godinu", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 godine", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "godinu", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 godina", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "za nekoliko sekundi", "prefix"); + test.equal(moment(0).from(30000), "pre nekoliko sekundi", "prefix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "pre nekoliko sekundi", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "za nekoliko sekundi", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "za 5 dana", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "danas u 2:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "danas u 2:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "danas u 3:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "sutra u 2:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "danas u 1:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "juče u 2:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + return '[u] [nedelju] [u] LT'; + case 3: + return '[u] [sredu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + function makeFormat(d) { + var lastWeekDay = [ + '[prošle] [nedelje] [u] LT', + '[prošlog] [ponedeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT' + ]; + + return lastWeekDay[d.day()]; + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + +/************************************************** + Swedish + *************************************************/ + +exports["locale:sv"] = { + setUp : function (cb) { + moment.locale('sv'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'januari jan_februari feb_mars mar_april apr_maj maj_juni jun_juli jul_augusti aug_september sep_oktober okt_november nov_december dec'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'söndag, februari 14e 2010, 3:25:50 pm'], + ['ddd, hA', 'sön, 3PM'], + ['M Mo MM MMMM MMM', '2 2a 02 februari feb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14e 14'], + ['d do dddd ddd dd', '0 0e söndag sön sö'], + ['DDD DDDo DDDD', '45 45e 045'], + ['w wo ww', '6 6e 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45e day of the year'], + ['L', '2010-02-14'], + ['LL', '14 februari 2010'], + ['LLL', '14 februari 2010 15:25'], + ['LLLL', 'söndag 14 februari 2010 15:25'], + ['l', '2010-2-14'], + ['ll', '14 feb 2010'], + ['lll', '14 feb 2010 15:25'], + ['llll', 'sön 14 feb 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1a', '1a'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2a', '2a'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3e', '3e'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4e', '4e'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5e', '5e'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6e', '6e'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7e', '7e'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8e', '8e'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9e', '9e'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10e', '10e'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11e', '11e'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12e', '12e'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13e', '13e'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14e', '14e'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15e', '15e'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16e', '16e'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17e', '17e'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18e', '18e'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19e', '19e'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20e', '20e'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21a', '21a'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22a', '22a'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23e', '23e'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24e', '24e'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25e', '25e'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26e', '26e'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27e', '27e'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28e', '28e'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29e', '29e'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30e', '30e'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31a', '31a'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'januari jan_februari feb_mars mar_april apr_maj maj_juni jun_juli jul_augusti aug_september sep_oktober okt_november nov_december dec'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'söndag sön sö_måndag mån må_tisdag tis ti_onsdag ons on_torsdag tor to_fredag fre fr_lördag lör lö'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "några sekunder", "44 sekunder = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "en minut", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "en minut", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuter", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuter", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "en timme", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "en timme", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 timmar", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 timmar", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 timmar", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "en dag", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "en dag", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 dagar", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "en dag", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 dagar", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 dagar", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "en månad", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "en månad", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "en månad", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 månader", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 månader", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 månader", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "en månad", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 månader", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ett år", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 år", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ett år", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 år", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "om några sekunder", "prefix"); + test.equal(moment(0).from(30000), "för några sekunder sedan", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "för några sekunder sedan", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "om några sekunder", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "om 5 dagar", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Idag 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Idag 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Idag 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Imorgon 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Idag 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Igår 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[Förra] dddd[en] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[Förra] dddd[en] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[Förra] dddd[en] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52a', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1a', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1a', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2a', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2a', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Tamil - தமிழ் + *************************************************/ + +exports["locale:ta"] = { + setUp : function (cb) { + moment.locale('ta'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('ta'); + cb(); + }, + + "parse" : function (test) { + var tests = 'ஜனவரி ஜனவரி_பிப்ரவரி பிப்ரவரி_மார்ச் மார்ச்_ஏப்ரல் ஏப்ரல்_மே மே_ஜூன் ஜூன்_ஜூலை ஜூலை_ஆகஸ்ட் ஆகஸ்ட்_செப்டெம்பர் செப்டெம்பர்_அக்டோபர் அக்டோபர்_நவம்பர் நவம்பர்_டிசம்பர் டிசம்பர்'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'ஞாயிற்றுக்கிழமை, பிப்ரவரி 14வது 2010, 3:25:50 எற்பாடு'], + ['ddd, hA', 'ஞாயிறு, 3 எற்பாடு'], + ['M Mo MM MMMM MMM', '2 2வது 02 பிப்ரவரி பிப்ரவரி'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14வது 14'], + ['d do dddd ddd dd', '0 0வது ஞாயிற்றுக்கிழமை ஞாயிறு ஞா'], + ['DDD DDDo DDDD', '45 45வது 045'], + ['w wo ww', '8 8வது 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', ' எற்பாடு எற்பாடு'], + ['[ஆண்டின்] DDDo [நாள்]', 'ஆண்டின் 45வது நாள்'], + ['L', '14/02/2010'], + ['LL', '14 பிப்ரவரி 2010'], + ['LLL', '14 பிப்ரவரி 2010, 15:25'], + ['LLLL', 'ஞாயிற்றுக்கிழமை, 14 பிப்ரவரி 2010, 15:25'], + ['l', '14/2/2010'], + ['ll', '14 பிப்ரவரி 2010'], + ['lll', '14 பிப்ரவரி 2010, 15:25'], + ['llll', 'ஞாயிறு, 14 பிப்ரவரி 2010, 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1வது', '1வது'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2வது', '2வது'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3வது', '3வது'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4வது', '4வது'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5வது', '5வது'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6வது', '6வது'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7வது', '7வது'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8வது', '8வது'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9வது', '9வது'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10வது', '10வது'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11வது', '11வது'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12வது', '12வது'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13வது', '13வது'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14வது', '14வது'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15வது', '15வது'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16வது', '16வது'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17வது', '17வது'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18வது', '18வது'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19வது', '19வது'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20வது', '20வது'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21வது', '21வது'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22வது', '22வது'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23வது', '23வது'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24வது', '24வது'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25வது', '25வது'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26வது', '26வது'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27வது', '27வது'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28வது', '28வது'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29வது', '29வது'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30வது', '30வது'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31வது', '31வது'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'ஜனவரி ஜனவரி_பிப்ரவரி பிப்ரவரி_மார்ச் மார்ச்_ஏப்ரல் ஏப்ரல்_மே மே_ஜூன் ஜூன்_ஜூலை ஜூலை_ஆகஸ்ட் ஆகஸ்ட்_செப்டெம்பர் செப்டெம்பர்_அக்டோபர் அக்டோபர்_நவம்பர் நவம்பர்_டிசம்பர் டிசம்பர்'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'ஞாயிற்றுக்கிழமை ஞாயிறு ஞா_திங்கட்கிழமை திங்கள் தி_செவ்வாய்கிழமை செவ்வாய் செ_புதன்கிழமை புதன் பு_வியாழக்கிழமை வியாழன் வி_வெள்ளிக்கிழமை வெள்ளி வெ_சனிக்கிழமை சனி ச'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ஒரு சில விநாடிகள்", "44 விநாடிகள் = ஒரு சில விநாடிகள்"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "ஒரு நிமிடம்", "45 விநாடிகள் = ஒரு நிமிடம்"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "ஒரு நிமிடம்", "89 விநாடிகள் = ஒரு நிமிடம்"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 நிமிடங்கள்", "90 விநாடிகள் = 2 நிமிடங்கள்"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 நிமிடங்கள்", "44 நிமிடங்கள் = 44 நிமிடங்கள்"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ஒரு மணி நேரம்", "45 நிமிடங்கள் = ஒரு மணி நேரம்"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ஒரு மணி நேரம்", "89 நிமிடங்கள் = ஒரு மணி நேரம்"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 மணி நேரம்", "90 நிமிடங்கள் = 2 மணி நேரம்"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 மணி நேரம்", "5 மணி நேரம் = 5 மணி நேரம்"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 மணி நேரம்", "21 மணி நேரம் = 21 மணி நேரம்"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ஒரு நாள்", "22 மணி நேரம் = ஒரு நாள்"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ஒரு நாள்", "35 மணி நேரம் = ஒரு நாள்"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 நாட்கள்", "36 மணி நேரம் = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ஒரு நாள்", "1 நாள் = ஒரு நாள்"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 நாட்கள்", "5 நாட்கள் = 5 நாட்கள்"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 நாட்கள்", "25 நாட்கள் = 25 நாட்கள்"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ஒரு மாதம்", "26 நாட்கள் = ஒரு மாதம்"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ஒரு மாதம்", "30 நாட்கள் = ஒரு மாதம்"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "ஒரு மாதம்", "45 நாட்கள் = ஒரு மாதம்"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 மாதங்கள்", "46 நாட்கள் = 2 மாதங்கள்"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 மாதங்கள்", "75 நாட்கள் = 2 மாதங்கள்"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 மாதங்கள்", "76 நாட்கள் = 3 மாதங்கள்"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ஒரு மாதம்", "1 மாதம் = ஒரு மாதம்"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 மாதங்கள்", "5 மாதங்கள் = 5 மாதங்கள்"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ஒரு வருடம்", "345 நாட்கள் = ஒரு வருடம்"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 ஆண்டுகள்", "548 நாட்கள் = 2 ஆண்டுகள்"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ஒரு வருடம்", "1 வருடம் = ஒரு வருடம்"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 ஆண்டுகள்", "5 ஆண்டுகள் = 5 ஆண்டுகள்"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "ஒரு சில விநாடிகள் இல்", "prefix"); + test.equal(moment(0).from(30000), "ஒரு சில விநாடிகள் முன்", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "ஒரு சில விநாடிகள் முன்", "இப்போது இருந்து கடந்த காலத்தில் காட்ட வேண்டும்"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "ஒரு சில விநாடிகள் இல்", "ஒரு சில விநாடிகள் இல்"); + test.equal(moment().add({d: 5}).fromNow(), "5 நாட்கள் இல்", "5 நாட்கள் இல்"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "இன்று 02:00", "இன்று 02:00"); + test.equal(moment(a).add({m: 25}).calendar(), "இன்று 02:25", "இன்று 02:25"); + test.equal(moment(a).add({h: 1}).calendar(), "இன்று 03:00", "இன்று 03:00"); + test.equal(moment(a).add({d: 1}).calendar(), "நாளை 02:00", "நாளை 02:00"); + test.equal(moment(a).subtract({h: 1}).calendar(), "இன்று 01:00", "இன்று 01:00"); + test.equal(moment(a).subtract({d: 1}).calendar(), "நேற்று 02:00", "நேற்று 02:00"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd, LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd, LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd, LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[கடந்த வாரம்] dddd, LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[கடந்த வாரம்] dddd, LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[கடந்த வாரம்] dddd, LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1th is the first week of the year. + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); + + test.done(); + }, + + "meridiem" : function (test) { + test.equal(moment([2011, 2, 23, 2, 30]).format('a'), " வைகறை", "before dawn"); + test.equal(moment([2011, 2, 23, 9, 30]).format('a'), " காலை", "morning"); + test.equal(moment([2011, 2, 23, 14, 30]).format('a'), " நண்பகல்", "during day"); + test.equal(moment([2011, 2, 23, 17, 30]).format('a'), " எற்பாடு", "evening"); + test.equal(moment([2011, 2, 23, 19, 30]).format('a'), " மாலை", "late evening"); + test.equal(moment([2011, 2, 23, 21, 20]).format('a'), " இரவு", "night"); + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Thai + *************************************************/ + +exports["locale:th"] = { + setUp : function (cb) { + moment.locale('th'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'มกราคม มกรา_กุมภาพันธ์ กุมภา_มีนาคม มีนา_เมษายน เมษา_พฤษภาคม พฤษภา_มิถุนายน มิถุนา_กรกฎาคม กรกฎา_สิงหาคม สิงหา_กันยายน กันยา_ตุลาคม ตุลา_พฤศจิกายน พฤศจิกา_ธันวาคม ธันวา'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, h:mm:ss a', 'อาทิตย์, 14 กุมภาพันธ์ 2010, 3:25:50 หลังเที่ยง'], + ['ddd, h A', 'อาทิตย์, 3 หลังเที่ยง'], + ['M Mo MM MMMM MMM', '2 2 02 กุมภาพันธ์ กุมภา'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 อาทิตย์ อาทิตย์ อา.'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'หลังเที่ยง หลังเที่ยง'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['L', '2010/02/14'], + ['LL', '14 กุมภาพันธ์ 2010'], + ['LLL', '14 กุมภาพันธ์ 2010 เวลา 15 นาฬิกา 25 นาที'], + ['LLLL', 'วันอาทิตย์ที่ 14 กุมภาพันธ์ 2010 เวลา 15 นาฬิกา 25 นาที'], + ['l', '2010/2/14'], + ['ll', '14 กุมภา 2010'], + ['lll', '14 กุมภา 2010 เวลา 15 นาฬิกา 25 นาที'], + ['llll', 'วันอาทิตย์ที่ 14 กุมภา 2010 เวลา 15 นาฬิกา 25 นาที'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format month" : function (test) { + var expected = 'มกราคม มกรา_กุมภาพันธ์ กุมภา_มีนาคม มีนา_เมษายน เมษา_พฤษภาคม พฤษภา_มิถุนายน มิถุนา_กรกฎาคม กรกฎา_สิงหาคม สิงหา_กันยายน กันยา_ตุลาคม ตุลา_พฤศจิกายน พฤศจิกา_ธันวาคม ธันวา'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'อาทิตย์ อาทิตย์ อา._จันทร์ จันทร์ จ._อังคาร อังคาร อ._พุธ พุธ พ._พฤหัสบดี พฤหัส พฤ._ศุกร์ ศุกร์ ศ._เสาร์ เสาร์ ส.'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ไม่กี่วินาที", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "1 นาที", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "1 นาที", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 นาที", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 นาที", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "1 ชั่วโมง", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "1 ชั่วโมง", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ชั่วโมง", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ชั่วโมง", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ชั่วโมง", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "1 วัน", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "1 วัน", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 วัน", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "1 วัน", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 วัน", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 วัน", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "1 เดือน", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "1 เดือน", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "1 เดือน", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 เดือน", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 เดือน", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 เดือน", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "1 เดือน", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 เดือน", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "1 ปี", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 ปี", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "1 ปี", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 ปี", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "อีก ไม่กี่วินาที", "prefix"); + test.equal(moment(0).from(30000), "ไม่กี่วินาทีที่แล้ว", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "ไม่กี่วินาทีที่แล้ว", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "อีก ไม่กี่วินาที", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "อีก 5 วัน", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "วันนี้ เวลา 2 นาฬิกา 0 นาที", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "วันนี้ เวลา 2 นาฬิกา 25 นาที", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "วันนี้ เวลา 3 นาฬิกา 0 นาที", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "พรุ่งนี้ เวลา 2 นาฬิกา 0 นาที", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "วันนี้ เวลา 1 นาฬิกา 0 นาที", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "เมื่อวานนี้ เวลา 2 นาฬิกา 0 นาที", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd[หน้า เวลา] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd[หน้า เวลา] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd[หน้า เวลา] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[วัน]dddd[ที่แล้ว เวลา] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[วัน]dddd[ที่แล้ว เวลา] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[วัน]dddd[ที่แล้ว เวลา] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Sunday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday format" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', "Jan 15 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Tagalog/Filipino + *************************************************/ + +exports["locale:tl-ph"] = { + setUp : function (cb) { + moment.locale('tl-ph'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'Enero Ene_Pebrero Peb_Marso Mar_Abril Abr_Mayo May_Hunyo Hun_Hulyo Hul_Agosto Ago_Setyembre Set_Oktubre Okt_Nobyembre Nob_Disyembre Dis'.split("_"), + i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Linggo, Pebrero 14 2010, 3:25:50 pm'], + ['ddd, hA', 'Lin, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 Pebrero Peb'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 Linggo Lin Li'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '6 6 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['L', '02/14/2010'], + ['LL', 'Pebrero 14, 2010'], + ['LLL', 'Pebrero 14, 2010 15:25'], + ['LLLL', 'Linggo, Pebrero 14, 2010 15:25'], + ['l', '2/14/2010'], + ['ll', 'Peb 14, 2010'], + ['lll', 'Peb 14, 2010 15:25'], + ['llll', 'Lin, Peb 14, 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'Enero Ene_Pebrero Peb_Marso Mar_Abril Abr_Mayo May_Hunyo Hun_Hulyo Hul_Agosto Ago_Setyembre Set_Oktubre Okt_Nobyembre Nob_Disyembre Dis'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'Linggo Lin Li_Lunes Lun Lu_Martes Mar Ma_Miyerkules Miy Mi_Huwebes Huw Hu_Biyernes Biy Bi_Sabado Sab Sab'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ilang segundo", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "isang minuto", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "isang minuto", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuto", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuto", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "isang oras", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "isang oras", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 oras", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 oras", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 oras", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "isang araw", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "isang araw", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 araw", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "isang araw", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 araw", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 araw", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "isang buwan", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "isang buwan", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "isang buwan", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 buwan", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 buwan", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 buwan", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "isang buwan", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 buwan", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "isang taon", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 taon", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "isang taon", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 taon", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "sa loob ng ilang segundo", "prefix"); + test.equal(moment(0).from(30000), "ilang segundo ang nakalipas", "suffix"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "sa loob ng ilang segundo", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "sa loob ng 5 araw", "in 5 days"); + test.done(); + }, + + "same day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Ngayon sa 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Ngayon sa 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Ngayon sa 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Bukas sa 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Ngayon sa 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Kahapon sa 02:00", "yesterday at the same time"); + test.done(); + }, + + "same next week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [sa] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [sa] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [sa] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "same last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('dddd [huling linggo] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [huling linggo] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [huling linggo] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "same all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Turkish + *************************************************/ + +exports["locale:tr"] = { + setUp : function (cb) { + moment.locale('tr'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'Ocak Oca_Şubat Şub_Mart Mar_Nisan Nis_Mayıs May_Haziran Haz_Temmuz Tem_Ağustos Ağu_Eylül Eyl_Ekim Eki_Kasım Kas_Aralık Ara'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'Pazar, Şubat 14\'üncü 2010, 3:25:50 pm'], + ['ddd, hA', 'Paz, 3PM'], + ['M Mo MM MMMM MMM', '2 2\'nci 02 Şubat Şub'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14\'üncü 14'], + ['d do dddd ddd dd', '0 0\'ıncı Pazar Paz Pz'], + ['DDD DDDo DDDD', '45 45\'inci 045'], + ['w wo ww', "7 7'nci 07"], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[yılın] DDDo [günü]', 'yılın 45\'inci günü'], + ['L', '14.02.2010'], + ['LL', '14 Şubat 2010'], + ['LLL', '14 Şubat 2010 15:25'], + ['LLLL', 'Pazar, 14 Şubat 2010 15:25'], + ['l', '14.2.2010'], + ['ll', '14 Şub 2010'], + ['lll', '14 Şub 2010 15:25'], + ['llll', 'Paz, 14 Şub 2010 15:25'] + ], + DDDo = [ + [359, '360\'ıncı'], + [199, '200\'üncü'], + [149, '150\'nci'] + ], + dt = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + DDDoDt, + i; + + for (i = 0; i < a.length; i++) { + test.equal(dt.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + for (i = 0; i < DDDo.length; i++) { + DDDoDt = moment([2010]); + test.equal(DDDoDt.add(DDDo[i][0], 'days').format('DDDo'), DDDo[i][1], DDDo[i][0] + ' ---> ' + DDDo[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1\'inci', '1st'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2\'nci', '2nd'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3\'üncü', '3rd'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4\'üncü', '4th'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5\'inci', '5th'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6\'ncı', '6th'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7\'nci', '7th'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8\'inci', '8th'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9\'uncu', '9th'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10\'uncu', '10th'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11\'inci', '11th'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12\'nci', '12th'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13\'üncü', '13th'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14\'üncü', '14th'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15\'inci', '15th'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16\'ncı', '16th'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17\'nci', '17th'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18\'inci', '18th'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19\'uncu', '19th'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20\'nci', '20th'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21\'inci', '21th'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22\'nci', '22th'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23\'üncü', '23th'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24\'üncü', '24th'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25\'inci', '25th'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26\'ncı', '26th'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27\'nci', '27th'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28\'inci', '28th'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29\'uncu', '29th'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30\'uncu', '30th'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31\'inci', '31st'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'Ocak Oca_Şubat Şub_Mart Mar_Nisan Nis_Mayıs May_Haziran Haz_Temmuz Tem_Ağustos Ağu_Eylül Eyl_Ekim Eki_Kasım Kas_Aralık Ara'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'Pazar Paz Pz_Pazartesi Pts Pt_Salı Sal Sa_Çarşamba Çar Ça_Perşembe Per Pe_Cuma Cum Cu_Cumartesi Cts Ct'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "birkaç saniye", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "bir dakika", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "bir dakika", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 dakika", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 dakika", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "bir saat", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "bir saat", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 saat", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 saat", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 saat", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "bir gün", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "bir gün", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 gün", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "bir gün", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 gün", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 gün", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "bir ay", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "bir ay", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "bir ay", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 ay", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 ay", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 ay", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "bir ay", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 ay", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "bir yıl", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 yıl", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "bir yıl", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 yıl", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "birkaç saniye sonra", "prefix"); + test.equal(moment(0).from(30000), "birkaç saniye önce", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "birkaç saniye önce", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "birkaç saniye sonra", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "5 gün sonra", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "bugün saat 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "bugün saat 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "bugün saat 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "yarın saat 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "bugün saat 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "dün 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('[haftaya] dddd [saat] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[haftaya] dddd [saat] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[haftaya] dddd [saat] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[geçen hafta] dddd [saat] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[geçen hafta] dddd [saat] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[geçen hafta] dddd [saat] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), "1 01 1'inci", "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), "1 01 1'inci", "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), "2 02 2'nci", "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), "2 02 2'nci", "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), "3 03 3'üncü", "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +// moment.js Morocco Central Atlas Tamaziɣt in Latin (tzm-la) tests +// author : Abdel Said : https://github.com/abdelsaid +var moment = require("../../moment"); + + +exports["locale:tzm-latn"] = { + setUp : function (cb) { + moment.locale('tzm-latn'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'innayr innayr_brˤayrˤ brˤayrˤ_marˤsˤ marˤsˤ_ibrir ibrir_mayyw mayyw_ywnyw ywnyw_ywlywz ywlywz_ɣwšt ɣwšt_šwtanbir šwtanbir_ktˤwbrˤ ktˤwbrˤ_nwwanbir nwwanbir_dwjnbir dwjnbir'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'asamas, brˤayrˤ 14 2010, 3:25:50 pm'], + ['ddd, hA', 'asamas, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 brˤayrˤ brˤayrˤ'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 asamas asamas asamas'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['L', '14/02/2010'], + ['LL', '14 brˤayrˤ 2010'], + ['LLL', '14 brˤayrˤ 2010 15:25'], + ['LLLL', 'asamas 14 brˤayrˤ 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 brˤayrˤ 2010'], + ['lll', '14 brˤayrˤ 2010 15:25'], + ['llll', 'asamas 14 brˤayrˤ 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'innayr innayr_brˤayrˤ brˤayrˤ_marˤsˤ marˤsˤ_ibrir ibrir_mayyw mayyw_ywnyw ywnyw_ywlywz ywlywz_ɣwšt ɣwšt_šwtanbir šwtanbir_ktˤwbrˤ ktˤwbrˤ_nwwanbir nwwanbir_dwjnbir dwjnbir'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'asamas asamas asamas_aynas aynas aynas_asinas asinas asinas_akras akras akras_akwas akwas akwas_asimwas asimwas asimwas_asiḍyas asiḍyas asiḍyas'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "imik", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "minuḍ", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "minuḍ", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 minuḍ", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 minuḍ", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "saɛa", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "saɛa", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 tassaɛin", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 tassaɛin", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 tassaɛin", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ass", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ass", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 ossan", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ass", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 ossan", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 ossan", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ayowr", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ayowr", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "ayowr", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 iyyirn", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 iyyirn", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 iyyirn", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ayowr", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 iyyirn", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "asgas", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 isgasn", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "asgas", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 isgasn", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "dadkh s yan imik", "prefix"); + test.equal(moment(0).from(30000), "yan imik", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "yan imik", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "dadkh s yan imik", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "dadkh s yan 5 ossan", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "asdkh g 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "asdkh g 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "asdkh g 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "aska g 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "asdkh g 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "assant g 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [g] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [g] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [g] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('dddd [g] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [g] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [g] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + + // Saturday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 31]).week(), 1, "Dec 31 2011 should be week 1"); + test.equal(moment([2012, 0, 6]).week(), 1, "Jan 6 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 2, "Jan 7 2012 should be week 2"); + test.equal(moment([2012, 0, 13]).week(), 2, "Jan 13 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 3, "Jan 14 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 30]).week(), 1, "Dec 30 2006 should be week 1"); + test.equal(moment([2007, 0, 5]).week(), 1, "Jan 5 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 2, "Jan 6 2007 should be week 2"); + test.equal(moment([2007, 0, 12]).week(), 2, "Jan 12 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 3, "Jan 13 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 1, "Dec 29 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 4]).week(), 1, "Jan 4 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 2, "Jan 5 2008 should be week 2"); + test.equal(moment([2008, 0, 11]).week(), 2, "Jan 11 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 3, "Jan 12 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 28]).week(), 1, "Dec 28 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 3]).week(), 1, "Jan 3 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 2, "Jan 4 2003 should be week 2"); + test.equal(moment([2003, 0, 10]).week(), 2, "Jan 10 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 3, "Jan 11 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 27]).week(), 1, "Dec 27 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 2]).week(), 1, "Jan 2 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 2, "Jan 3 2009 should be week 2"); + test.equal(moment([2009, 0, 9]).week(), 2, "Jan 9 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 3, "Jan 10 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 26]).week(), 1, "Dec 26 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 2, "Jan 2 2010 should be week 2"); + test.equal(moment([2010, 0, 8]).week(), 2, "Jan 8 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 3, "Jan 9 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 7]).week(), 1, "Jan 7 2011 should be week 1"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 14]).week(), 2, "Jan 14 2011 should be week 2"); + test.equal(moment([2011, 0, 15]).week(), 3, "Jan 15 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', "Dec 31 2011 should be week 1"); + test.equal(moment([2012, 0, 6]).format('w ww wo'), '1 01 1', "Jan 6 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', "Jan 7 2012 should be week 2"); + test.equal(moment([2012, 0, 13]).format('w ww wo'), '2 02 2', "Jan 13 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', "Jan 14 2012 should be week 3"); + + test.done(); + } +}; + +// moment.js Morocco Central Atlas Tamaziɣt (tzm) tests +// author : Abdel Said : https://github.com/abdelsaid +var moment = require("../../moment"); + + +exports["locale:tzm"] = { + setUp : function (cb) { + moment.locale('tzm'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'ⵉⵏⵏⴰⵢⵔ ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ ⴷⵓⵊⵏⴱⵉⵔ'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'ⴰⵙⴰⵎⴰⵙ, ⴱⵕⴰⵢⵕ 14 2010, 3:25:50 pm'], + ['ddd, hA', 'ⴰⵙⴰⵎⴰⵙ, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 ⴱⵕⴰⵢⵕ ⴱⵕⴰⵢⵕ'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '8 8 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[the] DDDo [day of the year]', 'the 45 day of the year'], + ['L', '14/02/2010'], + ['LL', '14 ⴱⵕⴰⵢⵕ 2010'], + ['LLL', '14 ⴱⵕⴰⵢⵕ 2010 15:25'], + ['LLLL', 'ⴰⵙⴰⵎⴰⵙ 14 ⴱⵕⴰⵢⵕ 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 ⴱⵕⴰⵢⵕ 2010'], + ['lll', '14 ⴱⵕⴰⵢⵕ 2010 15:25'], + ['llll', 'ⴰⵙⴰⵎⴰⵙ 14 ⴱⵕⴰⵢⵕ 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'ⵉⵏⵏⴰⵢⵔ ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ ⴷⵓⵊⵏⴱⵉⵔ'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ ⴰⵢⵏⴰⵙ ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ ⴰⵙⵉⵏⴰⵙ ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ ⴰⴽⵔⴰⵙ ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ ⴰⴽⵡⴰⵙ ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ ⴰⵙⵉⵎⵡⴰⵙ ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ ⴰⵙⵉⴹⵢⴰⵙ ⴰⵙⵉⴹⵢⴰⵙ'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "ⵉⵎⵉⴽ", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "ⵎⵉⵏⵓⴺ", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "ⵎⵉⵏⵓⴺ", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 ⵎⵉⵏⵓⴺ", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 ⵎⵉⵏⵓⴺ", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "ⵙⴰⵄⴰ", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "ⵙⴰⵄⴰ", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 ⵜⴰⵙⵙⴰⵄⵉⵏ", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 ⵜⴰⵙⵙⴰⵄⵉⵏ", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 ⵜⴰⵙⵙⴰⵄⵉⵏ", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "ⴰⵙⵙ", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "ⴰⵙⵙ", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 oⵙⵙⴰⵏ", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "ⴰⵙⵙ", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 oⵙⵙⴰⵏ", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 oⵙⵙⴰⵏ", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "ⴰⵢoⵓⵔ", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "ⴰⵢoⵓⵔ", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "ⴰⵢoⵓⵔ", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 ⵉⵢⵢⵉⵔⵏ", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 ⵉⵢⵢⵉⵔⵏ", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 ⵉⵢⵢⵉⵔⵏ", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "ⴰⵢoⵓⵔ", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 ⵉⵢⵢⵉⵔⵏ", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "ⴰⵙⴳⴰⵙ", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 ⵉⵙⴳⴰⵙⵏ", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "ⴰⵙⴳⴰⵙ", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 ⵉⵙⴳⴰⵙⵏ", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ ⵉⵎⵉⴽ", "prefix"); + test.equal(moment(0).from(30000), "ⵢⴰⵏ ⵉⵎⵉⴽ", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "ⵢⴰⵏ ⵉⵎⵉⴽ", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ ⵉⵎⵉⴽ", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ 5 oⵙⵙⴰⵏ", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "ⴰⵙⴷⵅ ⴴ 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "ⴰⵙⴷⵅ ⴴ 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "ⴰⵙⴷⵅ ⴴ 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "ⴰⵙⴽⴰ ⴴ 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "ⴰⵙⴷⵅ ⴴ 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "ⴰⵚⴰⵏⵜ ⴴ 02:00", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [ⴴ] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [ⴴ] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [ⴴ] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('dddd [ⴴ] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [ⴴ] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [ⴴ] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + + // Saturday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 31]).week(), 1, "Dec 31 2011 should be week 1"); + test.equal(moment([2012, 0, 6]).week(), 1, "Jan 6 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 2, "Jan 7 2012 should be week 2"); + test.equal(moment([2012, 0, 13]).week(), 2, "Jan 13 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 3, "Jan 14 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 30]).week(), 1, "Dec 30 2006 should be week 1"); + test.equal(moment([2007, 0, 5]).week(), 1, "Jan 5 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 2, "Jan 6 2007 should be week 2"); + test.equal(moment([2007, 0, 12]).week(), 2, "Jan 12 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 3, "Jan 13 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 1, "Dec 29 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 4]).week(), 1, "Jan 4 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 2, "Jan 5 2008 should be week 2"); + test.equal(moment([2008, 0, 11]).week(), 2, "Jan 11 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 3, "Jan 12 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 28]).week(), 1, "Dec 28 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 3]).week(), 1, "Jan 3 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 2, "Jan 4 2003 should be week 2"); + test.equal(moment([2003, 0, 10]).week(), 2, "Jan 10 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 3, "Jan 11 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 27]).week(), 1, "Dec 27 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 2]).week(), 1, "Jan 2 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 2, "Jan 3 2009 should be week 2"); + test.equal(moment([2009, 0, 9]).week(), 2, "Jan 9 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 3, "Jan 10 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 26]).week(), 1, "Dec 26 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 2, "Jan 2 2010 should be week 2"); + test.equal(moment([2010, 0, 8]).week(), 2, "Jan 8 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 3, "Jan 9 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 7]).week(), 1, "Jan 7 2011 should be week 1"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 14]).week(), 2, "Jan 14 2011 should be week 2"); + test.equal(moment([2011, 0, 15]).week(), 3, "Jan 15 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', "Dec 31 2011 should be week 1"); + test.equal(moment([2012, 0, 6]).format('w ww wo'), '1 01 1', "Jan 6 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', "Jan 7 2012 should be week 2"); + test.equal(moment([2012, 0, 13]).format('w ww wo'), '2 02 2', "Jan 13 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', "Jan 14 2012 should be week 3"); + + test.done(); + } +}; + + +var moment = require("../../moment"); + + + /************************************************** + Ukrainian + *************************************************/ + +exports["locale:uk"] = { + setUp : function (cb) { + moment.locale('uk'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'січень січ_лютий лют_березень бер_квітень квіт_травень трав_червень черв_липень лип_серпень серп_вересень вер_жовтень жовт_листопад лист_грудень груд'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do MMMM YYYY, HH:mm:ss', 'неділя, 14-го лютого 2010, 15:25:50'], + ['ddd, h A', 'нд, 3 дня'], + ['M Mo MM MMMM MMM', '2 2-й 02 лютий лют'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14-го 14'], + ['d do dddd ddd dd', '0 0-й неділя нд нд'], + ['DDD DDDo DDDD', '45 45-й 045'], + ['w wo ww', '7 7-й 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'дня дня'], + ['DDDo [день року]', '45-й день року'], + ['L', '14.02.2010'], + ['LL', '14 лютого 2010 р.'], + ['LLL', '14 лютого 2010 р., 15:25'], + ['LLLL', 'неділя, 14 лютого 2010 р., 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format meridiem" : function (test) { + test.equal(moment([2012, 11, 28, 0, 0]).format("A"), "ночі", "night"); + test.equal(moment([2012, 11, 28, 3, 59]).format("A"), "ночі", "night"); + test.equal(moment([2012, 11, 28, 4, 0]).format("A"), "ранку", "morning"); + test.equal(moment([2012, 11, 28, 11, 59]).format("A"), "ранку", "morning"); + test.equal(moment([2012, 11, 28, 12, 0]).format("A"), "дня", "afternoon"); + test.equal(moment([2012, 11, 28, 16, 59]).format("A"), "дня", "afternoon"); + test.equal(moment([2012, 11, 28, 17, 0]).format("A"), "вечора", "evening"); + test.equal(moment([2012, 11, 28, 23, 59]).format("A"), "вечора", "evening"); + + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1-й', '1-й'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2-й', '2-й'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3-й', '3-й'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4-й', '4-й'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5-й', '5-й'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6-й', '6-й'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7-й', '7-й'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8-й', '8-й'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9-й', '9-й'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10-й', '10-й'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11-й', '11-й'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12-й', '12-й'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13-й', '13-й'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14-й', '14-й'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15-й', '15-й'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16-й', '16-й'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17-й', '17-й'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18-й', '18-й'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19-й', '19-й'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20-й', '20-й'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21-й', '21-й'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22-й', '22-й'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23-й', '23-й'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24-й', '24-й'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25-й', '25-й'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26-й', '26-й'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27-й', '27-й'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28-й', '28-й'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29-й', '29-й'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30-й', '30-й'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31-й', '31-й'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'січень січ_лютий лют_березень бер_квітень квіт_травень трав_червень черв_липень лип_серпень серп_вересень вер_жовтень жовт_листопад лист_грудень груд'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format month case" : function (test) { + var months = { + 'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'), + 'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_') + }, i; + for (i = 0; i < 12; i++) { + test.equal(moment([2011, i, 1]).format('D MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]); + test.equal(moment([2011, i, 1]).format('MMMM'), months.nominative[i], '1 ' + months.nominative[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'неділя нд нд_понеділок пн пн_вівторок вт вт_середа ср ср_четвер чт чт_п’ятниця пт пт_субота сб сб'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "декілька секунд", "44 seconds = seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "хвилина", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "хвилина", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 хвилини", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 хвилини", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "годину", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "годину", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 години", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 годин", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 година", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "день", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "день", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 дні", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "день", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 днів", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), "11 днів", "11 days = 11 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), "21 день", "21 days = 21 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 днів", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "місяць", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "місяць", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "місяць", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 місяці", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 місяці", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 місяці", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "місяць", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 місяців", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "рік", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 роки", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "рік", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 років", "5 years = 5 years"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "за декілька секунд", "prefix"); + test.equal(moment(0).from(30000), "декілька секунд тому", "suffix"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "за декілька секунд", "in seconds"); + test.equal(moment().add({d: 5}).fromNow(), "за 5 днів", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Сьогодні о 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Сьогодні о 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Сьогодні о 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Завтра о 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Сьогодні о 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Вчора о 02:00", "yesterday at the same time"); + // A special case for Ukrainian since 11 hours have different preposition + test.equal(moment(a).add({h: 9}).calendar(), "Сьогодні об 11:00", "same day at 11 o'clock"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('[У] dddd [о' + (m.hours() === 11 ? 'б' : '') + '] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[У] dddd [о] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[У] dddd [о] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + function makeFormat(d) { + switch (d.day()) { + case 0: + case 3: + case 5: + case 6: + return '[Минулої] dddd [о' + (d.hours() === 11 ? 'б' : '') + '] LT'; + case 1: + case 2: + case 4: + return '[Минулого] dddd [о' + (d.hours() === 11 ? 'б' : '') + '] LT'; + } + } + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format(makeFormat(m)), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2011, 11, 26]).week(), 1, "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 12]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 1"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 2"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 1"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 2"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-й', "Dec 26 2011 should be week 1"); + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-й', "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-й', "Jan 2 2012 should be week 2"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-й', "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-й', "Jan 9 2012 should be week 3"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Uzbek + *************************************************/ + +exports["locale:uz"] = { + setUp : function (cb) { + moment.locale('uz'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = 'январь янв_февраль фев_март мар_апрель апр_май май_июнь июнь_июль июль_август авг_сентябрь сен_октябрь окт_ноябрь ноя_декабрь дек'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, Do-MMMM YYYY, h:mm:ss', 'Якшанба, 14-февраль 2010, 3:25:50'], + ['ddd, h:mm', 'Якш, 3:25'], + ['M Mo MM MMMM MMM', '2 2 02 февраль фев'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 Якшанба Якш Як'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '7 7 07'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[йилнинг] DDDo-[куни]', 'йилнинг 45-куни'], + ['L', '14/02/2010'], + ['LL', '14 февраль 2010'], + ['LLL', '14 февраль 2010 15:25'], + ['LLLL', '14 февраль 2010, Якшанба 15:25'], + ['l', '14/2/2010'], + ['ll', '14 фев 2010'], + ['lll', '14 фев 2010 15:25'], + ['llll', '14 фев 2010, Якш 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); + test.done(); + }, + + "format month" : function (test) { + var expected = 'январь янв_февраль фев_март мар_апрель апр_май май_июнь июн_июль июл_август авг_сентябрь сен_октябрь окт_ноябрь ноя_декабрь дек'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var expected = 'Якшанба Якш Як_Душанба Душ Ду_Сешанба Сеш Се_Чоршанба Чор Чо_Пайшанба Пай Па_Жума Жум Жу_Шанба Шан Ша'.split("_"), i; + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "фурсат", "44 секунд = фурсат"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "бир дакика", "45 секунд = бир дакика"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "бир дакика", "89 секунд = бир дакика"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 дакика", "90 секунд = 2 дакика"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 дакика", "44 дакика = 44 дакика"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "бир соат", "45 минут = бир соат"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "бир соат", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 соат", "90 минут = 2 соат"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 соат", "5 соат = 5 соат"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 соат", "21 соат = 21 соат"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "бир кун", "22 соат = бир кун"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "бир кун", "35 соат = бир кун"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 кун", "36 соат = 2 кун"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "бир кун", "1 кун = 1 кун"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 кун", "5 кун = 5 кун"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 кун", "25 кун = 25 кун"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "бир ой", "26 кун = бир ой"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "бир ой", "30 кун = бир ой"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "бир ой", "45 кун = бир ой"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 ой", "46 кун = 2 ой"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 ой", "75 кун = 2 ой"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 ой", "76 кун = 3 ой"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "бир ой", "бир ой = бир ой"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 ой", "5 ой = 5 ой"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "бир йил", "345 кун = бир йил"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 йил", "548 кун = 2 йил"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "бир йил", "1 йил = бир йил"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 йил", "5 йил = 5 йил"); + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "Якин фурсат ичида", "prefix"); + test.equal(moment(0).from(30000), "Бир неча фурсат олдин", "suffix"); + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "Бир неча фурсат олдин", "now from now should display as in the past"); + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "Якин фурсат ичида", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "Якин 5 кун ичида", "in 5 days"); + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Бугун соат 02:00 да", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Бугун соат 02:25 да", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Бугун соат 03:00 да", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Эртага 02:00 да", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Бугун соат 01:00 да", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Кеча соат 02:00 да", "yesterday at the same time"); + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [куни соат] LT [да]'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [куни соат] LT [да]'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [куни соат] LT [да]'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[Утган] dddd [куни соат] LT [да]'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[Утган] dddd [куни соат] LT [да]'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[Утган] dddd [куни соат] LT [да]'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 2, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 3, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 1, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 1, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 2, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 2, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 3, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 1, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 1, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 2, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 2, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 3, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Vietnamese + *************************************************/ + +exports["locale:vi"] = { + setUp : function (cb) { + moment.locale('vi'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var i, + tests = 'tháng 1,Th01_tháng 2,Th02_tháng 3,Th03_tháng 4,Th04_tháng 5,Th05_tháng 6,Th06_tháng 7,Th07_tháng 8,Th08_tháng 9,Th09_tháng 10,Th10_tháng 11,Th11_tháng 12,Th12'.split("_"); + + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + i); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(','); + equalTest(tests[i][0], '[tháng] M', i); + equalTest(tests[i][1], '[Th]M', i); + equalTest(tests[i][0], '[tháng] MM', i); + equalTest(tests[i][1], '[Th]MM', i); + equalTest(tests[i][0].toLocaleLowerCase(), '[THÁNG] M', i); + equalTest(tests[i][1].toLocaleLowerCase(), '[TH]M', i); + equalTest(tests[i][0].toLocaleUpperCase(), '[THÁNG] MM', i); + equalTest(tests[i][1].toLocaleUpperCase(), '[TH]MM', i); + } + + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, h:mm:ss a', 'chủ nhật, tháng 2 14 2010, 3:25:50 pm'], + ['ddd, hA', 'CN, 3PM'], + ['M Mo MM MMMM MMM', '2 2 02 tháng 2 Th02'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14 14'], + ['d do dddd ddd dd', '0 0 chủ nhật CN CN'], + ['DDD DDDo DDDD', '45 45 045'], + ['w wo ww', '6 6 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', 'pm PM'], + ['[ngày thứ] DDDo [của năm]', 'ngày thứ 45 của năm'], + ['L', '14/02/2010'], + ['LL', '14 tháng 2 năm 2010'], + ['LLL', '14 tháng 2 năm 2010 15:25'], + ['LLLL', 'chủ nhật, 14 tháng 2 năm 2010 15:25'], + ['l', '14/2/2010'], + ['ll', '14 Th02 2010'], + ['lll', '14 Th02 2010 15:25'], + ['llll', 'CN, 14 Th02 2010 15:25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + + test.done(); + }, + + "format ordinal" : function (test) { + test.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1'); + test.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2'); + test.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3'); + test.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4'); + test.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5'); + test.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6'); + test.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7'); + test.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8'); + test.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9'); + test.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10'); + + test.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11'); + test.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12'); + test.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13'); + test.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14'); + test.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15'); + test.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16'); + test.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17'); + test.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18'); + test.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19'); + test.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20'); + + test.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21'); + test.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22'); + test.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23'); + test.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24'); + test.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25'); + test.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26'); + test.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27'); + test.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28'); + test.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29'); + test.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30'); + + test.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31'); + test.done(); + }, + + "format month" : function (test) { + var i, + expected = 'tháng 1,Th01_tháng 2,Th02_tháng 3,Th03_tháng 4,Th04_tháng 5,Th05_tháng 6,Th06_tháng 7,Th07_tháng 8,Th08_tháng 9,Th09_tháng 10,Th10_tháng 11,Th11_tháng 12,Th12'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM,MMM'), expected[i], expected[i]); + } + test.done(); + }, + + "format week" : function (test) { + var i, + expected = 'chủ nhật CN CN_thứ hai T2 T2_thứ ba T3 T3_thứ tư T4 T4_thứ năm T5 T5_thứ sáu T6 T6_thứ bảy T7 T7'.split("_"); + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "vài giây", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "một phút", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "một phút", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2 phút", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44 phút", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "một giờ", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "một giờ", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2 giờ", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5 giờ", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21 giờ", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "một ngày", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "một ngày", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2 ngày", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "một ngày", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5 ngày", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25 ngày", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "một tháng", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "một tháng", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "một tháng", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2 tháng", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2 tháng", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3 tháng", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "một tháng", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5 tháng", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "một năm", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2 năm", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "một năm", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5 năm", "5 years = 5 years"); + + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "vài giây tới", "prefix"); + test.equal(moment(0).from(30000), "vài giây trước", "suffix"); + + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "vài giây trước", "now from now should display as in the past"); + + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "vài giây tới", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "5 ngày tới", "in 5 days"); + + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "Hôm nay lúc 02:00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "Hôm nay lúc 02:25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "Hôm nay lúc 03:00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "Ngày mai lúc 02:00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "Hôm nay lúc 01:00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "Hôm qua lúc 02:00", "yesterday at the same time"); + + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('dddd [tuần tới lúc] LT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [tuần tới lúc] LT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [tuần tới lúc] LT'), "Today + " + i + " days end of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('dddd [tuần rồi lúc] LT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('dddd [tuần rồi lúc] LT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('dddd [tuần rồi lúc] LT'), "Today - " + i + " days end of day"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + // Monday is the first day of the week. + // The week that contains Jan 4th is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 1, "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).week(), 2, "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 2, "Jan 15 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 8]).week(), 2, "Jan 8 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + test.equal(moment([2007, 0, 15]).week(), 3, "Jan 15 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 31]).week(), 1, "Dec 31 2007 should be week 1"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 7]).week(), 2, "Jan 7 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + test.equal(moment([2008, 0, 14]).week(), 3, "Jan 14 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 30]).week(), 1, "Dec 30 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 6]).week(), 2, "Jan 6 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + test.equal(moment([2003, 0, 13]).week(), 3, "Jan 13 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 29]).week(), 1, "Dec 29 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 5]).week(), 2, "Jan 5 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + test.equal(moment([2009, 0, 13]).week(), 3, "Jan 12 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 28]).week(), 53, "Dec 28 2009 should be week 53"); + test.equal(moment([2010, 0, 1]).week(), 53, "Jan 1 2010 should be week 53"); + test.equal(moment([2010, 0, 3]).week(), 53, "Jan 3 2010 should be week 53"); + test.equal(moment([2010, 0, 4]).week(), 1, "Jan 4 2010 should be week 1"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + test.equal(moment([2010, 0, 11]).week(), 2, "Jan 11 2010 should be week 2"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 27]).week(), 52, "Dec 27 2010 should be week 52"); + test.equal(moment([2011, 0, 1]).week(), 52, "Jan 1 2011 should be week 52"); + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 3]).week(), 1, "Jan 3 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + test.equal(moment([2011, 0, 10]).week(), 2, "Jan 10 2011 should be week 2"); + + test.done(); + }, + + "weeks year starting sunday formatted" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', "Jan 2 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', "Jan 8 2012 should be week 1"); + test.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', "Jan 9 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', "Jan 15 2012 should be week 2"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + +/************************************************** + Simplified Chinese +**************************************************/ + +exports["locale:zh-cn"] = { + setUp : function (cb) { + moment.locale('zh-cn'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split("_"), i; + + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, a h:mm:ss', '星期日, 二月 14日 2010, 下午 3:25:50'], + ['ddd, Ah', '周日, 下午3'], + ['M Mo MM MMMM MMM', '2 2月 02 二月 2月'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14日 14'], + ['d do dddd ddd dd', '0 0日 星期日 周日 日'], + ['DDD DDDo DDDD', '45 45日 045'], + ['w wo ww', '6 6周 06'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', '下午 下午'], + ['[这年的第] DDDo', '这年的第 45日'], + ['L', '2010-02-14'], + ['LL', '2010年2月14日'], + ['LLL', '2010年2月14日下午3点25'], + ['LLLL', '2010年2月14日星期日下午3点25'], + ['l', '2010-02-14'], + ['ll', '2010年2月14日'], + ['lll', '2010年2月14日下午3点25'], + ['llll', '2010年2月14日星期日下午3点25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + + test.done(); + }, + + "format month" : function (test) { + var expected = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split("_"), i; + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + + test.done(); + }, + + "format week" : function (test) { + var expected = '星期日 周日 日_星期一 周一 一_星期二 周二 二_星期三 周三 三_星期四 周四 四_星期五 周五 五_星期六 周六 六'.split("_"), i; + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "几秒", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "1分钟", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "1分钟", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2分钟", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44分钟", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "1小时", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "1小时", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2小时", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5小时", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21小时", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "1天", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "1天", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2天", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "1天", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5天", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25天", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "1个月", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "1个月", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "1个月", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2个月", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2个月", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3个月", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "1个月", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5个月", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "1年", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2年", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "1年", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5年", "5 years = 5 years"); + + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "几秒内", "prefix"); + test.equal(moment(0).from(30000), "几秒前", "suffix"); + + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "几秒前", "now from now should display as in the past"); + + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "几秒内", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "5天内", "in 5 days"); + + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "今天凌晨2点整", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "今天凌晨2点25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "今天凌晨3点整", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "明天凌晨2点整", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "今天凌晨1点整", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "昨天凌晨2点整", "yesterday at the same time"); + test.done(); + }, + + "calendar current week": function (test) { + var i, m, + today = moment().startOf('day'); + + for (i = 0; i < 7; i++) { + m = moment().startOf('week').add({d: i}); + if (Math.abs(m.diff(today, 'days')) <= 1) { + continue; // skip today, yesterday, tomorrow + } + test.equal(m.calendar(), m.format('[本]ddd凌晨12点整'), "Monday + " + i + " days current time"); + } + test.done(); + }, + + "calendar next week" : function (test) { + var i, m, + today = moment().startOf('day'); + + for (i = 7; i < 14; i++) { + m = moment().startOf('week').add({d: i}); + if (Math.abs(m.diff(today, 'days')) >= 7) { + continue; + } + if (Math.abs(m.diff(today, 'days')) <= 1) { + continue; // skip today, yesterday, tomorrow + } + test.equal(m.calendar(), m.format('[下]ddd凌晨12点整'), "Today + " + i + " days beginning of day"); + } + test.done(); + }, + + "calendar last week" : function (test) { + var i, m, + today = moment().startOf('day'); + + for (i = 1; i < 8; i++) { + m = moment().startOf('week').subtract({d: i}); + if ((Math.abs(m.diff(today, 'days')) >= 7) || (Math.abs(m.diff(today, 'days')) <= 1)) { + continue; + } + test.equal(m.calendar(), m.format('[上]ddd凌晨12点整'), "Monday - " + i + " days next week"); + } + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('LL'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('LL'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('LL'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('LL'), "in 2 weeks"); + test.done(); + }, + + "meridiem" : function (test) { + test.equal(moment([2011, 2, 23, 0, 0]).format('A'), "凌晨", "before dawn"); + test.equal(moment([2011, 2, 23, 6, 0]).format('A'), "早上", "morning"); + test.equal(moment([2011, 2, 23, 9, 0]).format('A'), "上午", "before noon"); + test.equal(moment([2011, 2, 23, 12, 0]).format('A'), "中午", "noon"); + test.equal(moment([2011, 2, 23, 13, 0]).format('A'), "下午", "afternoon"); + test.equal(moment([2011, 2, 23, 18, 0]).format('A'), "晚上", "night"); + + test.done(); + }, + + // Sunday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 52, "Jan 1 2012 should be week 52"); + test.equal(moment([2012, 0, 2]).week(), 1, "Jan 2 2012 should be week 52"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 52, "Dec 31 2006 should be week 52"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 1, "Jan 7 2007 should be week 1"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 2, "Jan 14 2007 should be week 2"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 1, "Jan 6 2008 should be week 1"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 2, "Jan 13 2008 should be week 2"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 52, "Dec 29 2002 should be week 52"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 1, "Jan 5 2003 should be week 1"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 2, "Jan 12 2003 should be week 2"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 1, "Jan 4 2009 should be week 1"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 2, "Jan 11 2009 should be week 2"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2010, 0, 2]).week(), 53, "Jan 2 2010 should be week 53"); + test.equal(moment([2010, 0, 10]).week(), 1, "Jan 10 2010 should be week 1"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2011, 0, 2]).week(), 52, "Jan 2 2011 should be week 52"); + test.equal(moment([2011, 0, 8]).week(), 1, "Jan 8 2011 should be week 1"); + test.equal(moment([2011, 0, 9]).week(), 1, "Jan 9 2011 should be week 1"); + + test.done(); + }, + + "weeks year starting sunday format" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52周', "Jan 1 2012 应该是第52周"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1周', "Jan 7 2012 应该是第 1周"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2周', "Jan 14 2012 应该是第 2周"); + + test.done(); + } +}; + +var moment = require("../../moment"); + + + /************************************************** + Traditional Chinese + *************************************************/ + +exports["locale:zh-tw"] = { + setUp : function (cb) { + moment.locale('zh-tw'); + moment.createFromInputFallback = function () { + throw new Error("input not handled by moment"); + }; + cb(); + }, + + tearDown : function (cb) { + moment.locale('en'); + cb(); + }, + + "parse" : function (test) { + var tests = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split("_"), i; + function equalTest(input, mmm, i) { + test.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1)); + } + for (i = 0; i < 12; i++) { + tests[i] = tests[i].split(' '); + equalTest(tests[i][0], 'MMM', i); + equalTest(tests[i][1], 'MMM', i); + equalTest(tests[i][0], 'MMMM', i); + equalTest(tests[i][1], 'MMMM', i); + equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i); + equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i); + equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i); + } + test.done(); + }, + + "format" : function (test) { + var a = [ + ['dddd, MMMM Do YYYY, a h:mm:ss', '星期日, 二月 14日 2010, 下午 3:25:50'], + ['ddd, Ah', '週日, 下午3'], + ['M Mo MM MMMM MMM', '2 2月 02 二月 2月'], + ['YYYY YY', '2010 10'], + ['D Do DD', '14 14日 14'], + ['d do dddd ddd dd', '0 0日 星期日 週日 日'], + ['DDD DDDo DDDD', '45 45日 045'], + ['w wo ww', '8 8週 08'], + ['h hh', '3 03'], + ['H HH', '15 15'], + ['m mm', '25 25'], + ['s ss', '50 50'], + ['a A', '下午 下午'], + ['[這年的第] DDDo', '這年的第 45日'], + ['L', '2010年2月14日'], + ['LL', '2010年2月14日'], + ['LLL', '2010年2月14日下午3點25'], + ['LLLL', '2010年2月14日星期日下午3點25'], + ['l', '2010年2月14日'], + ['ll', '2010年2月14日'], + ['lll', '2010年2月14日下午3點25'], + ['llll', '2010年2月14日星期日下午3點25'] + ], + b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)), + i; + + for (i = 0; i < a.length; i++) { + test.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]); + } + + test.done(); + }, + + "format month" : function (test) { + var expected = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split("_"), i; + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]); + } + + test.done(); + }, + + "format week" : function (test) { + var expected = '星期日 週日 日_星期一 週一 一_星期二 週二 二_星期三 週三 三_星期四 週四 四_星期五 週五 五_星期六 週六 六'.split("_"), i; + + for (i = 0; i < expected.length; i++) { + test.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]); + } + + test.done(); + }, + + "from" : function (test) { + var start = moment([2007, 1, 28]); + test.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), "幾秒", "44 seconds = a few seconds"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), "一分鐘", "45 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), "一分鐘", "89 seconds = a minute"); + test.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), "2分鐘", "90 seconds = 2 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), "44分鐘", "44 minutes = 44 minutes"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), "一小時", "45 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), "一小時", "89 minutes = an hour"); + test.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), "2小時", "90 minutes = 2 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), "5小時", "5 hours = 5 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), "21小時", "21 hours = 21 hours"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), "一天", "22 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), "一天", "35 hours = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), "2天", "36 hours = 2 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), "一天", "1 day = a day"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), "5天", "5 days = 5 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), "25天", "25 days = 25 days"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), "一個月", "26 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), "一個月", "30 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), "一個月", "43 days = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), "2個月", "46 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), "2個月", "75 days = 2 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), "3個月", "76 days = 3 months"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), "一個月", "1 month = a month"); + test.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), "5個月", "5 months = 5 months"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), "一年", "345 days = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), "2年", "548 days = 2 years"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), "一年", "1 year = a year"); + test.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), "5年", "5 years = 5 years"); + + test.done(); + }, + + "suffix" : function (test) { + test.equal(moment(30000).from(0), "幾秒內", "prefix"); + test.equal(moment(0).from(30000), "幾秒前", "suffix"); + + test.done(); + }, + + "now from now" : function (test) { + test.equal(moment().fromNow(), "幾秒前", "now from now should display as in the past"); + + test.done(); + }, + + "fromNow" : function (test) { + test.equal(moment().add({s: 30}).fromNow(), "幾秒內", "in a few seconds"); + test.equal(moment().add({d: 5}).fromNow(), "5天內", "in 5 days"); + + test.done(); + }, + + "calendar day" : function (test) { + var a = moment().hours(2).minutes(0).seconds(0); + + test.equal(moment(a).calendar(), "今天早上2點00", "today at the same time"); + test.equal(moment(a).add({m: 25}).calendar(), "今天早上2點25", "Now plus 25 min"); + test.equal(moment(a).add({h: 1}).calendar(), "今天早上3點00", "Now plus 1 hour"); + test.equal(moment(a).add({d: 1}).calendar(), "明天早上2點00", "tomorrow at the same time"); + test.equal(moment(a).subtract({h: 1}).calendar(), "今天早上1點00", "Now minus 1 hour"); + test.equal(moment(a).subtract({d: 1}).calendar(), "昨天早上2點00", "yesterday at the same time"); + + test.done(); + }, + + "calendar next week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().add({d: i}); + test.equal(m.calendar(), m.format('[下]ddddLT'), "Today + " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[下]ddddLT'), "Today + " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[下]ddddLT'), "Today + " + i + " days end of day"); + } + + test.done(); + }, + + "calendar last week" : function (test) { + var i, m; + for (i = 2; i < 7; i++) { + m = moment().subtract({d: i}); + test.equal(m.calendar(), m.format('[上]ddddLT'), "Today - " + i + " days current time"); + m.hours(0).minutes(0).seconds(0).milliseconds(0); + test.equal(m.calendar(), m.format('[上]ddddLT'), "Today - " + i + " days beginning of day"); + m.hours(23).minutes(59).seconds(59).milliseconds(999); + test.equal(m.calendar(), m.format('[上]ddddLT'), "Today - " + i + " days end of day"); + } + + test.done(); + }, + + "calendar all else" : function (test) { + var weeksAgo = moment().subtract({w: 1}), + weeksFromNow = moment().add({w: 1}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "1 week ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 1 week"); + + weeksAgo = moment().subtract({w: 2}); + weeksFromNow = moment().add({w: 2}); + + test.equal(weeksAgo.calendar(), weeksAgo.format('L'), "2 weeks ago"); + test.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), "in 2 weeks"); + + test.done(); + }, + + "meridiem" : function (test) { + test.equal(moment([2011, 2, 23, 0, 0]).format('a'), "早上", "morning"); + test.equal(moment([2011, 2, 23, 9, 0]).format('a'), "上午", "before noon"); + test.equal(moment([2011, 2, 23, 12, 0]).format('a'), "中午", "noon"); + test.equal(moment([2011, 2, 23, 13, 0]).format('a'), "下午", "after noon"); + test.equal(moment([2011, 2, 23, 18, 0]).format('a'), "晚上", "night"); + + test.equal(moment([2011, 2, 23, 0, 0]).format('A'), "早上", "morning"); + test.equal(moment([2011, 2, 23, 9, 0]).format('A'), "上午", "before noon"); + test.equal(moment([2011, 2, 23, 12, 0]).format('A'), "中午", "noon"); + test.equal(moment([2011, 2, 23, 13, 0]).format('A'), "下午", "afternoon"); + test.equal(moment([2011, 2, 23, 18, 0]).format('A'), "晚上", "night"); + + test.done(); + }, + + // Sunday is the first day of the week. + // The week that contains Jan 1st is the first week of the year. + + "weeks year starting sunday" : function (test) { + test.equal(moment([2012, 0, 1]).week(), 1, "Jan 1 2012 should be week 1"); + test.equal(moment([2012, 0, 7]).week(), 1, "Jan 7 2012 should be week 1"); + test.equal(moment([2012, 0, 8]).week(), 2, "Jan 8 2012 should be week 2"); + test.equal(moment([2012, 0, 14]).week(), 2, "Jan 14 2012 should be week 2"); + test.equal(moment([2012, 0, 15]).week(), 3, "Jan 15 2012 should be week 3"); + + test.done(); + }, + + "weeks year starting monday" : function (test) { + test.equal(moment([2006, 11, 31]).week(), 1, "Dec 31 2006 should be week 1"); + test.equal(moment([2007, 0, 1]).week(), 1, "Jan 1 2007 should be week 1"); + test.equal(moment([2007, 0, 6]).week(), 1, "Jan 6 2007 should be week 1"); + test.equal(moment([2007, 0, 7]).week(), 2, "Jan 7 2007 should be week 2"); + test.equal(moment([2007, 0, 13]).week(), 2, "Jan 13 2007 should be week 2"); + test.equal(moment([2007, 0, 14]).week(), 3, "Jan 14 2007 should be week 3"); + + test.done(); + }, + + "weeks year starting tuesday" : function (test) { + test.equal(moment([2007, 11, 29]).week(), 52, "Dec 29 2007 should be week 52"); + test.equal(moment([2008, 0, 1]).week(), 1, "Jan 1 2008 should be week 1"); + test.equal(moment([2008, 0, 5]).week(), 1, "Jan 5 2008 should be week 1"); + test.equal(moment([2008, 0, 6]).week(), 2, "Jan 6 2008 should be week 2"); + test.equal(moment([2008, 0, 12]).week(), 2, "Jan 12 2008 should be week 2"); + test.equal(moment([2008, 0, 13]).week(), 3, "Jan 13 2008 should be week 3"); + + test.done(); + }, + + "weeks year starting wednesday" : function (test) { + test.equal(moment([2002, 11, 29]).week(), 1, "Dec 29 2002 should be week 1"); + test.equal(moment([2003, 0, 1]).week(), 1, "Jan 1 2003 should be week 1"); + test.equal(moment([2003, 0, 4]).week(), 1, "Jan 4 2003 should be week 1"); + test.equal(moment([2003, 0, 5]).week(), 2, "Jan 5 2003 should be week 2"); + test.equal(moment([2003, 0, 11]).week(), 2, "Jan 11 2003 should be week 2"); + test.equal(moment([2003, 0, 12]).week(), 3, "Jan 12 2003 should be week 3"); + + test.done(); + }, + + "weeks year starting thursday" : function (test) { + test.equal(moment([2008, 11, 28]).week(), 1, "Dec 28 2008 should be week 1"); + test.equal(moment([2009, 0, 1]).week(), 1, "Jan 1 2009 should be week 1"); + test.equal(moment([2009, 0, 3]).week(), 1, "Jan 3 2009 should be week 1"); + test.equal(moment([2009, 0, 4]).week(), 2, "Jan 4 2009 should be week 2"); + test.equal(moment([2009, 0, 10]).week(), 2, "Jan 10 2009 should be week 2"); + test.equal(moment([2009, 0, 11]).week(), 3, "Jan 11 2009 should be week 3"); + + test.done(); + }, + + "weeks year starting friday" : function (test) { + test.equal(moment([2009, 11, 27]).week(), 1, "Dec 27 2009 should be week 1"); + test.equal(moment([2010, 0, 1]).week(), 1, "Jan 1 2010 should be week 1"); + test.equal(moment([2010, 0, 2]).week(), 1, "Jan 2 2010 should be week 1"); + test.equal(moment([2010, 0, 3]).week(), 2, "Jan 3 2010 should be week 2"); + test.equal(moment([2010, 0, 9]).week(), 2, "Jan 9 2010 should be week 2"); + test.equal(moment([2010, 0, 10]).week(), 3, "Jan 10 2010 should be week 3"); + + test.done(); + }, + + "weeks year starting saturday" : function (test) { + test.equal(moment([2010, 11, 26]).week(), 1, "Dec 26 2010 should be week 1"); + test.equal(moment([2011, 0, 1]).week(), 1, "Jan 1 2011 should be week 1"); + test.equal(moment([2011, 0, 2]).week(), 2, "Jan 2 2011 should be week 2"); + test.equal(moment([2011, 0, 8]).week(), 2, "Jan 8 2011 should be week 2"); + test.equal(moment([2011, 0, 9]).week(), 3, "Jan 9 2011 should be week 3"); + + test.done(); + }, + + "weeks year starting sunday format" : function (test) { + test.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1週', "Jan 1 2012 應該是第 1週"); + test.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1週', "Jan 7 2012 應該是第 1週"); + test.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2週', "Jan 8 2012 應該是第 2週"); + test.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2週', "Jan 14 2012 應該是第 2週"); + test.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3週', "Jan 15 2012 應該是第 3週"); + + test.done(); + } +}; + +}(this)); diff --git a/ajax/libs/moment.js/package.json b/ajax/libs/moment.js/package.json index 8dfd96faa..2ad6985aa 100755 --- a/ajax/libs/moment.js/package.json +++ b/ajax/libs/moment.js/package.json @@ -17,7 +17,7 @@ } ], "filename": "moment.min.js", - "version": "2.7.0", + "version": "2.8.0", "description": "A lightweight (4.3k) javascript date library for parsing, manipulating, and formatting dates.", "homepage": "http://momentjs.com/", "keywords": [