Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

197 lines
5.1 KiB

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;