135 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
| import { int, pad } from "../utils";
 | |
| var doNothing = function () { return undefined; };
 | |
| export var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? "shorthand" : "longhand"][monthNumber]; };
 | |
| export var revFormat = {
 | |
|     D: doNothing,
 | |
|     F: function (dateObj, monthName, locale) {
 | |
|         dateObj.setMonth(locale.months.longhand.indexOf(monthName));
 | |
|     },
 | |
|     G: function (dateObj, hour) {
 | |
|         dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));
 | |
|     },
 | |
|     H: function (dateObj, hour) {
 | |
|         dateObj.setHours(parseFloat(hour));
 | |
|     },
 | |
|     J: function (dateObj, day) {
 | |
|         dateObj.setDate(parseFloat(day));
 | |
|     },
 | |
|     K: function (dateObj, amPM, locale) {
 | |
|         dateObj.setHours((dateObj.getHours() % 12) +
 | |
|             12 * int(new RegExp(locale.amPM[1], "i").test(amPM)));
 | |
|     },
 | |
|     M: function (dateObj, shortMonth, locale) {
 | |
|         dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));
 | |
|     },
 | |
|     S: function (dateObj, seconds) {
 | |
|         dateObj.setSeconds(parseFloat(seconds));
 | |
|     },
 | |
|     U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },
 | |
|     W: function (dateObj, weekNum, locale) {
 | |
|         var weekNumber = parseInt(weekNum);
 | |
|         var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);
 | |
|         date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);
 | |
|         return date;
 | |
|     },
 | |
|     Y: function (dateObj, year) {
 | |
|         dateObj.setFullYear(parseFloat(year));
 | |
|     },
 | |
|     Z: function (_, ISODate) { return new Date(ISODate); },
 | |
|     d: function (dateObj, day) {
 | |
|         dateObj.setDate(parseFloat(day));
 | |
|     },
 | |
|     h: function (dateObj, hour) {
 | |
|         dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));
 | |
|     },
 | |
|     i: function (dateObj, minutes) {
 | |
|         dateObj.setMinutes(parseFloat(minutes));
 | |
|     },
 | |
|     j: function (dateObj, day) {
 | |
|         dateObj.setDate(parseFloat(day));
 | |
|     },
 | |
|     l: doNothing,
 | |
|     m: function (dateObj, month) {
 | |
|         dateObj.setMonth(parseFloat(month) - 1);
 | |
|     },
 | |
|     n: function (dateObj, month) {
 | |
|         dateObj.setMonth(parseFloat(month) - 1);
 | |
|     },
 | |
|     s: function (dateObj, seconds) {
 | |
|         dateObj.setSeconds(parseFloat(seconds));
 | |
|     },
 | |
|     u: function (_, unixMillSeconds) {
 | |
|         return new Date(parseFloat(unixMillSeconds));
 | |
|     },
 | |
|     w: doNothing,
 | |
|     y: function (dateObj, year) {
 | |
|         dateObj.setFullYear(2000 + parseFloat(year));
 | |
|     },
 | |
| };
 | |
| export var tokenRegex = {
 | |
|     D: "",
 | |
|     F: "",
 | |
|     G: "(\\d\\d|\\d)",
 | |
|     H: "(\\d\\d|\\d)",
 | |
|     J: "(\\d\\d|\\d)\\w+",
 | |
|     K: "",
 | |
|     M: "",
 | |
|     S: "(\\d\\d|\\d)",
 | |
|     U: "(.+)",
 | |
|     W: "(\\d\\d|\\d)",
 | |
|     Y: "(\\d{4})",
 | |
|     Z: "(.+)",
 | |
|     d: "(\\d\\d|\\d)",
 | |
|     h: "(\\d\\d|\\d)",
 | |
|     i: "(\\d\\d|\\d)",
 | |
|     j: "(\\d\\d|\\d)",
 | |
|     l: "",
 | |
|     m: "(\\d\\d|\\d)",
 | |
|     n: "(\\d\\d|\\d)",
 | |
|     s: "(\\d\\d|\\d)",
 | |
|     u: "(.+)",
 | |
|     w: "(\\d\\d|\\d)",
 | |
|     y: "(\\d{2})",
 | |
| };
 | |
| export var formats = {
 | |
|     Z: function (date) { return date.toISOString(); },
 | |
|     D: function (date, locale, options) {
 | |
|         return locale.weekdays.shorthand[formats.w(date, locale, options)];
 | |
|     },
 | |
|     F: function (date, locale, options) {
 | |
|         return monthToStr(formats.n(date, locale, options) - 1, false, locale);
 | |
|     },
 | |
|     G: function (date, locale, options) {
 | |
|         return pad(formats.h(date, locale, options));
 | |
|     },
 | |
|     H: function (date) { return pad(date.getHours()); },
 | |
|     J: function (date, locale) {
 | |
|         return locale.ordinal !== undefined
 | |
|             ? date.getDate() + locale.ordinal(date.getDate())
 | |
|             : date.getDate();
 | |
|     },
 | |
|     K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },
 | |
|     M: function (date, locale) {
 | |
|         return monthToStr(date.getMonth(), true, locale);
 | |
|     },
 | |
|     S: function (date) { return pad(date.getSeconds()); },
 | |
|     U: function (date) { return date.getTime() / 1000; },
 | |
|     W: function (date, _, options) {
 | |
|         return options.getWeek(date);
 | |
|     },
 | |
|     Y: function (date) { return pad(date.getFullYear(), 4); },
 | |
|     d: function (date) { return pad(date.getDate()); },
 | |
|     h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },
 | |
|     i: function (date) { return pad(date.getMinutes()); },
 | |
|     j: function (date) { return date.getDate(); },
 | |
|     l: function (date, locale) {
 | |
|         return locale.weekdays.longhand[date.getDay()];
 | |
|     },
 | |
|     m: function (date) { return pad(date.getMonth() + 1); },
 | |
|     n: function (date) { return date.getMonth() + 1; },
 | |
|     s: function (date) { return date.getSeconds(); },
 | |
|     u: function (date) { return date.getTime(); },
 | |
|     w: function (date) { return date.getDay(); },
 | |
|     y: function (date) { return String(date.getFullYear()).substring(2); },
 | |
| };
 |