var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;
function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
- var result = {
- year: yearStr.length === 2 ? untrucateYear(parse10(yearStr)) : parse10(yearStr),
- month: defaultLocaleMonthsShort.indexOf(monthStr),
- day: parse10(dayStr),
- hour: parse10(hourStr),
- minute: parse10(minuteStr)
- };
+ var result = [
+ untruncateYear(yearStr),
+ defaultLocaleMonthsShort.indexOf(monthStr),
+ parseInt(dayStr, 10),
+ parseInt(hourStr, 10),
+ parseInt(minuteStr, 10)
+ ];
if (secondStr) {
- result.second = parse10(secondStr);
+ result.push(parseInt(secondStr, 10));
}
return result;
}
-function untrucateYear(year) {
- return year > 60 ? 1900 + year : 2000 + year;
+function untruncateYear(yearStr) {
+ var year = parseInt(yearStr, 10);
+ if (year <= 49) {
+ return 2000 + year;
+ } else if (year <= 999) {
+ return 1900 + year;
+ }
+ return year;
}
function preprocessRFC2822(s) {
}
function signedOffset(offHourStr, offMinuteStr) {
- var offHour = parse10(offHourStr) || 0,
- offMin = parse10(offMinuteStr) || 0,
+ var offHour = parseInt(offHourStr, 10) || 0,
+ offMin = parseInt(offMinuteStr, 10) || 0,
offMinSigned = offHour < 0 ? -offMin : offMin;
return offHour * 60 + offMinSigned;
}
if (weekdayStr) {
// TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.
var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
- weekdayActual = new Date(parsedInput.year, parsedInput.month, parsedInput.day).getDay();
+ weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();
if (weekdayProvided !== weekdayActual) {
getParsingFlags(config).weekdayMismatch = true;
config._isValid = false;
PST: 8 * 60
};
-function parse10(inty) {
- return parseInt(inty, 10);
-}
-
function calculateOffset(obsOffset, milOffset, offHourStr, offMinuteStr) {
if (obsOffset) {
return obsOffsets[obsOffset];
return;
}
- config._a = [parsedArray.year, parsedArray.month, parsedArray.day, parsedArray.hour, parsedArray.minute, parsedArray.second];
+ config._a = parsedArray;
config._tzm = calculateOffset(match[8], match[9], match[10], match[11]);
configFromArray(config);
assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1-я', 'Jan 8 2012 should be week 1');
assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2-я', 'Jan 9 2012 should be week 2');
});
-
-test('parsing RFC 2822', function (assert) {
- var testCases = {
- 'clean RFC2822 datetime with all options': 'Tue, 01 Nov 2016 01:23:45 UT',
- 'clean RFC2822 datetime without comma': 'Tue 01 Nov 2016 02:23:45 GMT',
- 'clean RFC2822 datetime without seconds': 'Tue, 01 Nov 2016 03:23 +0000',
- 'clean RFC2822 datetime without century': 'Tue, 01 Nov 16 04:23:45 Z',
- 'clean RFC2822 datetime without day': '01 Nov 2016 05:23:45 z',
- 'clean RFC2822 datetime with single-digit day-of-month': 'Tue, 1 Nov 2016 06:23:45 GMT',
- 'RFC2822 datetime with CFWSs': '(Init Comment) Tue,\n 1 Nov 2016 (Split\n Comment) 07:23:45 +0000 (GMT)'
- };
- var testCase;
-
- for (testCase in testCases) {
- var testResult = moment(testCases[testCase], moment.RFC_2822, true);
- assert.ok(testResult.isValid(), testResult);
- assert.ok(testResult.parsingFlags().rfc2822, testResult + ' - rfc2822 parsingFlag');
- }
-});
-
-test('non RFC 2822 strings', function (assert) {
- var testCases = {
- 'RFC2822 datetime with all options but invalid day delimiter': 'Tue. 01 Nov 2016 01:23:45 GMT',
- 'RFC2822 datetime with mismatching Day (week v date)': 'Mon, 01 Nov 2016 01:23:45 GMT'
- };
- var testCase;
-
- for (testCase in testCases) {
- var testResult = moment(testCases[testCase], moment.RFC_2822, true);
- assert.ok(!testResult.isValid(), testResult);
- assert.ok(!testResult.parsingFlags().rfc2822, testResult + ' - rfc2822 parsingFlag');
- }
-});
}
});
+test('parsing RFC 2822 in a different locale', function (assert) {
+ var testCases = {
+ 'clean RFC2822 datetime with all options': 'Tue, 01 Nov 2016 01:23:45 UT',
+ 'clean RFC2822 datetime without comma': 'Tue 01 Nov 2016 02:23:45 GMT',
+ 'clean RFC2822 datetime without seconds': 'Tue, 01 Nov 2016 03:23 +0000',
+ 'clean RFC2822 datetime without century': 'Tue, 01 Nov 16 04:23:45 Z',
+ 'clean RFC2822 datetime without day': '01 Nov 2016 05:23:45 z',
+ 'clean RFC2822 datetime with single-digit day-of-month': 'Tue, 1 Nov 2016 06:23:45 GMT',
+ 'RFC2822 datetime with CFWSs': '(Init Comment) Tue,\n 1 Nov 2016 (Split\n Comment) 07:23:45 +0000 (GMT)'
+ };
+ var testCase;
+
+ try {
+ moment.locale('ru');
+ for (testCase in testCases) {
+ var testResult = moment(testCases[testCase], moment.RFC_2822, true);
+ assert.ok(testResult.isValid(), testResult);
+ assert.ok(testResult.parsingFlags().rfc2822, testResult + ' - rfc2822 parsingFlag');
+ }
+ }
+ finally {
+ moment.locale('en');
+ }
+});
+
+test('non RFC 2822 strings in a different locale', function (assert) {
+ var testCases = {
+ 'RFC2822 datetime with all options but invalid day delimiter': 'Tue. 01 Nov 2016 01:23:45 GMT',
+ 'RFC2822 datetime with mismatching Day (week v date)': 'Mon, 01 Nov 2016 01:23:45 GMT'
+ };
+ var testCase;
+
+ try {
+ moment.locale('ru');
+ for (testCase in testCases) {
+ var testResult = moment(testCases[testCase], moment.RFC_2822, true);
+ assert.ok(!testResult.isValid(), testResult);
+ assert.ok(!testResult.parsingFlags().rfc2822, testResult + ' - rfc2822 parsingFlag');
+ }
+ }
+ finally {
+ moment.locale('en');
+ }
+});
+
test('parsing iso', function (assert) {
var offset = moment([2011, 9, 8]).utcOffset(),
pad = function (input) {