import { toDate, isValidDate, getWeek } from './util'; import defaultLocale from './locale/en'; var REGEX_FORMAT = /\[([^\]]+)]|YYYY|YY?|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|m{1,2}|s{1,2}|Z{1,2}|S{1,3}|w{1,2}|x|X|a|A/g; function pad(val) { var len = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2; var output = "".concat(Math.abs(val)); var sign = val < 0 ? '-' : ''; while (output.length < len) { output = "0".concat(output); } return sign + output; } function formatTimezone(offset) { var delimeter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; var sign = offset > 0 ? '-' : '+'; var absOffset = Math.abs(offset); var hours = Math.floor(absOffset / 60); var minutes = absOffset % 60; return sign + pad(hours, 2) + delimeter + pad(minutes, 2); } var meridiem = function meridiem(h, _, isLowercase) { var word = h < 12 ? 'AM' : 'PM'; return isLowercase ? word.toLocaleLowerCase() : word; }; var formatFlags = { Y: function Y(date) { var y = date.getFullYear(); return y <= 9999 ? "".concat(y) : "+".concat(y); }, // Year: 00, 01, ..., 99 YY: function YY(date) { return pad(date.getFullYear(), 4).substr(2); }, // Year: 1900, 1901, ..., 2099 YYYY: function YYYY(date) { return pad(date.getFullYear(), 4); }, // Month: 1, 2, ..., 12 M: function M(date) { return date.getMonth() + 1; }, // Month: 01, 02, ..., 12 MM: function MM(date) { return pad(date.getMonth() + 1, 2); }, MMM: function MMM(date, locale) { return locale.monthsShort[date.getMonth()]; }, MMMM: function MMMM(date, locale) { return locale.months[date.getMonth()]; }, // Day of month: 1, 2, ..., 31 D: function D(date) { return date.getDate(); }, // Day of month: 01, 02, ..., 31 DD: function DD(date) { return pad(date.getDate(), 2); }, // Hour: 0, 1, ... 23 H: function H(date) { return date.getHours(); }, // Hour: 00, 01, ..., 23 HH: function HH(date) { return pad(date.getHours(), 2); }, // Hour: 1, 2, ..., 12 h: function h(date) { var hours = date.getHours(); if (hours === 0) { return 12; } if (hours > 12) { return hours % 12; } return hours; }, // Hour: 01, 02, ..., 12 hh: function hh() { var hours = formatFlags.h.apply(formatFlags, arguments); return pad(hours, 2); }, // Minute: 0, 1, ..., 59 m: function m(date) { return date.getMinutes(); }, // Minute: 00, 01, ..., 59 mm: function mm(date) { return pad(date.getMinutes(), 2); }, // Second: 0, 1, ..., 59 s: function s(date) { return date.getSeconds(); }, // Second: 00, 01, ..., 59 ss: function ss(date) { return pad(date.getSeconds(), 2); }, // 1/10 of second: 0, 1, ..., 9 S: function S(date) { return Math.floor(date.getMilliseconds() / 100); }, // 1/100 of second: 00, 01, ..., 99 SS: function SS(date) { return pad(Math.floor(date.getMilliseconds() / 10), 2); }, // Millisecond: 000, 001, ..., 999 SSS: function SSS(date) { return pad(date.getMilliseconds(), 3); }, // Day of week: 0, 1, ..., 6 d: function d(date) { return date.getDay(); }, // Day of week: 'Su', 'Mo', ..., 'Sa' dd: function dd(date, locale) { return locale.weekdaysMin[date.getDay()]; }, // Day of week: 'Sun', 'Mon',..., 'Sat' ddd: function ddd(date, locale) { return locale.weekdaysShort[date.getDay()]; }, // Day of week: 'Sunday', 'Monday', ...,'Saturday' dddd: function dddd(date, locale) { return locale.weekdays[date.getDay()]; }, // AM, PM A: function A(date, locale) { var meridiemFunc = locale.meridiem || meridiem; return meridiemFunc(date.getHours(), date.getMinutes(), false); }, // am, pm a: function a(date, locale) { var meridiemFunc = locale.meridiem || meridiem; return meridiemFunc(date.getHours(), date.getMinutes(), true); }, // Timezone: -01:00, +00:00, ... +12:00 Z: function Z(date) { return formatTimezone(date.getTimezoneOffset(), ':'); }, // Timezone: -0100, +0000, ... +1200 ZZ: function ZZ(date) { return formatTimezone(date.getTimezoneOffset()); }, // Seconds timestamp: 512969520 X: function X(date) { return Math.floor(date.getTime() / 1000); }, // Milliseconds timestamp: 512969520900 x: function x(date) { return date.getTime(); }, w: function w(date, locale) { return getWeek(date, { firstDayOfWeek: locale.firstDayOfWeek, firstWeekContainsDate: locale.firstWeekContainsDate }); }, ww: function ww(date, locale) { return pad(formatFlags.w(date, locale), 2); } }; function format(val, str) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var formatStr = str ? String(str) : 'YYYY-MM-DDTHH:mm:ss.SSSZ'; var date = toDate(val); if (!isValidDate(date)) { return 'Invalid Date'; } var locale = options.locale || defaultLocale; return formatStr.replace(REGEX_FORMAT, function (match, p1) { if (p1) { return p1; } if (typeof formatFlags[match] === 'function') { return "".concat(formatFlags[match](date, locale)); } return match; }); } export default format;